[{"data":1,"prerenderedAt":174222},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch5-cheng-xu-nei-cun-mo-xing":3,"wiki-doc-nav":1482},{"id":4,"title":5,"body":6,"description":104,"extension":1476,"meta":1477,"navigation":157,"path":1478,"seo":1479,"stem":1480,"__hash__":1481},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":8,"toc":1470},"minimark",[9,13,18,26,42,47,50,55,62,68,71,78,84,89,92,95,98,743,746,760,764,770,786,932,935,942,945,950,958,1073,1076,1081,1084,1089,1092,1098,1101,1466],[10,11,5],"h1",{"id":12},"_5程序内存模型",[14,15,17],"h2",{"id":16},"_51内存分区模型","5.1内存分区模型",[19,20,21,22],"p",{},"C++程序在执行时，将内存大方向划分为",[23,24,25],"strong",{},"4个区域",[27,28,29,33,36,39],"ul",{},[30,31,32],"li",{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[30,34,35],{},"全局区：存放全局变量和静态变量以及常量",[30,37,38],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[30,40,41],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,43,44],{},[23,45,46],{},"内存四区意义：",[19,48,49],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[51,52,54],"h3",{"id":53},"_511程序运行前","5.1.1程序运行前",[19,56,57,58,61],{},"​\t在程序编译后，生成了exe可执行程序，",[23,59,60],{},"未执行该程序前","分为两个区域",[19,63,64,65],{},"​\t",[23,66,67],{},"代码区：",[19,69,70],{},"​\t\t存放 CPU 执行的机器指令",[19,72,73,74,77],{},"​\t\t代码区是",[23,75,76],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,79,73,80,83],{},[23,81,82],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,85,64,86],{},[23,87,88],{},"全局区：",[19,90,91],{},"​\t\t全局变量和静态变量存放在此.",[19,93,94],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,96,97],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[99,100,105],"pre",{"className":101,"code":102,"language":103,"meta":104,"style":104},"language-c++ shiki shiki-themes github-light github-dark","\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","c++","",[106,107,108,117,138,152,159,165,183,199,204,216,221,227,242,256,261,267,302,329,334,362,389,394,400,417,433,438,465,492,497,524,550,555,582,609,614,631,647,674,701,706,721,726,737],"code",{"__ignoreMap":104},[109,110,113],"span",{"class":111,"line":112},"line",1,[109,114,116],{"class":115},"sJ8bj","\u002F\u002F全局变量\n",[109,118,120,124,128,131,135],{"class":111,"line":119},2,[109,121,123],{"class":122},"szBVR","int",[109,125,127],{"class":126},"sVt8B"," g_a ",[109,129,130],{"class":122},"=",[109,132,134],{"class":133},"sj4cs"," 10",[109,136,137],{"class":126},";\n",[109,139,141,143,146,148,150],{"class":111,"line":140},3,[109,142,123],{"class":122},[109,144,145],{"class":126}," g_b ",[109,147,130],{"class":122},[109,149,134],{"class":133},[109,151,137],{"class":126},[109,153,155],{"class":111,"line":154},4,[109,156,158],{"emptyLinePlaceholder":157},true,"\n",[109,160,162],{"class":111,"line":161},5,[109,163,164],{"class":115},"\u002F\u002F全局常量\n",[109,166,168,171,174,177,179,181],{"class":111,"line":167},6,[109,169,170],{"class":122},"const",[109,172,173],{"class":122}," int",[109,175,176],{"class":126}," c_g_a ",[109,178,130],{"class":122},[109,180,134],{"class":133},[109,182,137],{"class":126},[109,184,186,188,190,193,195,197],{"class":111,"line":185},7,[109,187,170],{"class":122},[109,189,173],{"class":122},[109,191,192],{"class":126}," c_g_b ",[109,194,130],{"class":122},[109,196,134],{"class":133},[109,198,137],{"class":126},[109,200,202],{"class":111,"line":201},8,[109,203,158],{"emptyLinePlaceholder":157},[109,205,207,209,213],{"class":111,"line":206},9,[109,208,123],{"class":122},[109,210,212],{"class":211},"sScJk"," main",[109,214,215],{"class":126},"() {\n",[109,217,219],{"class":111,"line":218},10,[109,220,158],{"emptyLinePlaceholder":157},[109,222,224],{"class":111,"line":223},11,[109,225,226],{"class":115},"    \u002F\u002F局部变量\n",[109,228,230,233,236,238,240],{"class":111,"line":229},12,[109,231,232],{"class":122},"    int",[109,234,235],{"class":126}," a ",[109,237,130],{"class":122},[109,239,134],{"class":133},[109,241,137],{"class":126},[109,243,245,247,250,252,254],{"class":111,"line":244},13,[109,246,232],{"class":122},[109,248,249],{"class":126}," b ",[109,251,130],{"class":122},[109,253,134],{"class":133},[109,255,137],{"class":126},[109,257,259],{"class":111,"line":258},14,[109,260,158],{"emptyLinePlaceholder":157},[109,262,264],{"class":111,"line":263},15,[109,265,266],{"class":115},"    \u002F\u002F打印地址\n",[109,268,270,273,276,280,283,286,288,291,294,297,299],{"class":111,"line":269},16,[109,271,272],{"class":126},"    cout ",[109,274,275],{"class":122},"\u003C\u003C",[109,277,279],{"class":278},"sZZnC"," \"局部变量a地址为： \"",[109,281,282],{"class":122}," \u003C\u003C",[109,284,285],{"class":126}," (",[109,287,123],{"class":122},[109,289,290],{"class":126},")",[109,292,293],{"class":122},"&",[109,295,296],{"class":126},"a ",[109,298,275],{"class":122},[109,300,301],{"class":126}," endl;\n",[109,303,305,307,309,312,314,316,318,320,322,325,327],{"class":111,"line":304},17,[109,306,272],{"class":126},[109,308,275],{"class":122},[109,310,311],{"class":278}," \"局部变量b地址为： \"",[109,313,282],{"class":122},[109,315,285],{"class":126},[109,317,123],{"class":122},[109,319,290],{"class":126},[109,321,293],{"class":122},[109,323,324],{"class":126},"b ",[109,326,275],{"class":122},[109,328,301],{"class":126},[109,330,332],{"class":111,"line":331},18,[109,333,158],{"emptyLinePlaceholder":157},[109,335,337,339,341,344,346,349,351,353,355,358,360],{"class":111,"line":336},19,[109,338,272],{"class":126},[109,340,275],{"class":122},[109,342,343],{"class":278}," \"全局变量g_a地址为： \"",[109,345,282],{"class":122},[109,347,348],{"class":126},"  (",[109,350,123],{"class":122},[109,352,290],{"class":126},[109,354,293],{"class":122},[109,356,357],{"class":126},"g_a ",[109,359,275],{"class":122},[109,361,301],{"class":126},[109,363,365,367,369,372,374,376,378,380,382,385,387],{"class":111,"line":364},20,[109,366,272],{"class":126},[109,368,275],{"class":122},[109,370,371],{"class":278}," \"全局变量g_b地址为： \"",[109,373,282],{"class":122},[109,375,348],{"class":126},[109,377,123],{"class":122},[109,379,290],{"class":126},[109,381,293],{"class":122},[109,383,384],{"class":126},"g_b ",[109,386,275],{"class":122},[109,388,301],{"class":126},[109,390,392],{"class":111,"line":391},21,[109,393,158],{"emptyLinePlaceholder":157},[109,395,397],{"class":111,"line":396},22,[109,398,399],{"class":115},"    \u002F\u002F静态变量\n",[109,401,403,406,408,411,413,415],{"class":111,"line":402},23,[109,404,405],{"class":122},"    static",[109,407,173],{"class":122},[109,409,410],{"class":126}," s_a ",[109,412,130],{"class":122},[109,414,134],{"class":133},[109,416,137],{"class":126},[109,418,420,422,424,427,429,431],{"class":111,"line":419},24,[109,421,405],{"class":122},[109,423,173],{"class":122},[109,425,426],{"class":126}," s_b ",[109,428,130],{"class":122},[109,430,134],{"class":133},[109,432,137],{"class":126},[109,434,436],{"class":111,"line":435},25,[109,437,158],{"emptyLinePlaceholder":157},[109,439,441,443,445,448,450,452,454,456,458,461,463],{"class":111,"line":440},26,[109,442,272],{"class":126},[109,444,275],{"class":122},[109,446,447],{"class":278}," \"静态变量s_a地址为： \"",[109,449,282],{"class":122},[109,451,285],{"class":126},[109,453,123],{"class":122},[109,455,290],{"class":126},[109,457,293],{"class":122},[109,459,460],{"class":126},"s_a ",[109,462,275],{"class":122},[109,464,301],{"class":126},[109,466,468,470,472,475,477,479,481,483,485,488,490],{"class":111,"line":467},27,[109,469,272],{"class":126},[109,471,275],{"class":122},[109,473,474],{"class":278}," \"静态变量s_b地址为： \"",[109,476,282],{"class":122},[109,478,285],{"class":126},[109,480,123],{"class":122},[109,482,290],{"class":126},[109,484,293],{"class":122},[109,486,487],{"class":126},"s_b ",[109,489,275],{"class":122},[109,491,301],{"class":126},[109,493,495],{"class":111,"line":494},28,[109,496,158],{"emptyLinePlaceholder":157},[109,498,500,502,504,507,509,511,513,515,517,520,522],{"class":111,"line":499},29,[109,501,272],{"class":126},[109,503,275],{"class":122},[109,505,506],{"class":278}," \"字符串常量地址为： \"",[109,508,282],{"class":122},[109,510,285],{"class":126},[109,512,123],{"class":122},[109,514,290],{"class":126},[109,516,293],{"class":122},[109,518,519],{"class":278},"\"hello world\"",[109,521,282],{"class":122},[109,523,301],{"class":126},[109,525,527,529,531,533,535,537,539,541,543,546,548],{"class":111,"line":526},30,[109,528,272],{"class":126},[109,530,275],{"class":122},[109,532,506],{"class":278},[109,534,282],{"class":122},[109,536,285],{"class":126},[109,538,123],{"class":122},[109,540,290],{"class":126},[109,542,293],{"class":122},[109,544,545],{"class":278},"\"hello world1\"",[109,547,282],{"class":122},[109,549,301],{"class":126},[109,551,553],{"class":111,"line":552},31,[109,554,158],{"emptyLinePlaceholder":157},[109,556,558,560,562,565,567,569,571,573,575,578,580],{"class":111,"line":557},32,[109,559,272],{"class":126},[109,561,275],{"class":122},[109,563,564],{"class":278}," \"全局常量c_g_a地址为： \"",[109,566,282],{"class":122},[109,568,285],{"class":126},[109,570,123],{"class":122},[109,572,290],{"class":126},[109,574,293],{"class":122},[109,576,577],{"class":126},"c_g_a ",[109,579,275],{"class":122},[109,581,301],{"class":126},[109,583,585,587,589,592,594,596,598,600,602,605,607],{"class":111,"line":584},33,[109,586,272],{"class":126},[109,588,275],{"class":122},[109,590,591],{"class":278}," \"全局常量c_g_b地址为： \"",[109,593,282],{"class":122},[109,595,285],{"class":126},[109,597,123],{"class":122},[109,599,290],{"class":126},[109,601,293],{"class":122},[109,603,604],{"class":126},"c_g_b ",[109,606,275],{"class":122},[109,608,301],{"class":126},[109,610,612],{"class":111,"line":611},34,[109,613,158],{"emptyLinePlaceholder":157},[109,615,617,620,622,625,627,629],{"class":111,"line":616},35,[109,618,619],{"class":122},"    const",[109,621,173],{"class":122},[109,623,624],{"class":126}," c_l_a ",[109,626,130],{"class":122},[109,628,134],{"class":133},[109,630,137],{"class":126},[109,632,634,636,638,641,643,645],{"class":111,"line":633},36,[109,635,619],{"class":122},[109,637,173],{"class":122},[109,639,640],{"class":126}," c_l_b ",[109,642,130],{"class":122},[109,644,134],{"class":133},[109,646,137],{"class":126},[109,648,650,652,654,657,659,661,663,665,667,670,672],{"class":111,"line":649},37,[109,651,272],{"class":126},[109,653,275],{"class":122},[109,655,656],{"class":278}," \"局部常量c_l_a地址为： \"",[109,658,282],{"class":122},[109,660,285],{"class":126},[109,662,123],{"class":122},[109,664,290],{"class":126},[109,666,293],{"class":122},[109,668,669],{"class":126},"c_l_a ",[109,671,275],{"class":122},[109,673,301],{"class":126},[109,675,677,679,681,684,686,688,690,692,694,697,699],{"class":111,"line":676},38,[109,678,272],{"class":126},[109,680,275],{"class":122},[109,682,683],{"class":278}," \"局部常量c_l_b地址为： \"",[109,685,282],{"class":122},[109,687,285],{"class":126},[109,689,123],{"class":122},[109,691,290],{"class":126},[109,693,293],{"class":122},[109,695,696],{"class":126},"c_l_b ",[109,698,275],{"class":122},[109,700,301],{"class":126},[109,702,704],{"class":111,"line":703},39,[109,705,158],{"emptyLinePlaceholder":157},[109,707,709,712,715,718],{"class":111,"line":708},40,[109,710,711],{"class":211},"    system",[109,713,714],{"class":126},"(",[109,716,717],{"class":278},"\"pause\"",[109,719,720],{"class":126},");\n",[109,722,724],{"class":111,"line":723},41,[109,725,158],{"emptyLinePlaceholder":157},[109,727,729,732,735],{"class":111,"line":728},42,[109,730,731],{"class":122},"    return",[109,733,734],{"class":133}," 0",[109,736,137],{"class":126},[109,738,740],{"class":111,"line":739},43,[109,741,742],{"class":126},"}\n",[19,744,745],{},"总结：",[27,747,748,751,754,757],{},[30,749,750],{},"c++中程序运行前分为全局区和代码区",[30,752,753],{},"代码区特点是共享和只读",[30,755,756],{},"全局区中存放全局变量、静态变量、常量",[30,758,759],{},"常量区中存放const修饰的全局常量和字符串常量",[51,761,763],{"id":762},"_512程序运行后","5.1.2程序运行后",[765,766,767],"ol",{},[30,768,769],{},"栈区：",[27,771,772,779],{},[30,773,774,775,778],{},"由编译器自动分配释放, 存放",[23,776,777],{},"函数的参数值,局部变量","等",[30,780,781,782,785],{},"注意事项：",[23,783,784],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[99,787,789],{"className":101,"code":788,"language":103,"meta":104,"style":104},"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",[106,790,791,804,809,825,838,842,846,854,859,875,893,910,920,928],{"__ignoreMap":104},[109,792,793,795,798,801],{"class":111,"line":112},[109,794,123],{"class":122},[109,796,797],{"class":122}," *",[109,799,800],{"class":211}," func",[109,802,803],{"class":126},"()\n",[109,805,806],{"class":111,"line":119},[109,807,808],{"class":126},"{\n",[109,810,811,813,815,817,819,822],{"class":111,"line":140},[109,812,232],{"class":122},[109,814,235],{"class":126},[109,816,130],{"class":122},[109,818,134],{"class":133},[109,820,821],{"class":126},";",[109,823,824],{"class":115}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[109,826,827,829,832,835],{"class":111,"line":154},[109,828,731],{"class":122},[109,830,831],{"class":122}," &",[109,833,834],{"class":126},"a;",[109,836,837],{"class":115}," \u002F\u002F放回局部变量的地址\n",[109,839,840],{"class":111,"line":161},[109,841,742],{"class":126},[109,843,844],{"class":111,"line":167},[109,845,158],{"emptyLinePlaceholder":157},[109,847,848,850,852],{"class":111,"line":185},[109,849,123],{"class":122},[109,851,212],{"class":211},[109,853,215],{"class":126},[109,855,856],{"class":111,"line":201},[109,857,858],{"class":115},"    \u002F\u002F接受func的返回值\n",[109,860,861,863,865,868,870,872],{"class":111,"line":206},[109,862,232],{"class":122},[109,864,797],{"class":122},[109,866,867],{"class":126},"p ",[109,869,130],{"class":122},[109,871,800],{"class":211},[109,873,874],{"class":126},"();\n",[109,876,877,879,881,883,885,887,890],{"class":111,"line":218},[109,878,272],{"class":126},[109,880,275],{"class":122},[109,882,797],{"class":122},[109,884,867],{"class":126},[109,886,275],{"class":122},[109,888,889],{"class":126}," endl;",[109,891,892],{"class":115}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[109,894,895,897,899,901,903,905,907],{"class":111,"line":223},[109,896,272],{"class":126},[109,898,275],{"class":122},[109,900,797],{"class":122},[109,902,867],{"class":126},[109,904,275],{"class":122},[109,906,889],{"class":126},[109,908,909],{"class":115}," \u002F\u002F第二次这个数据不再保留\n",[109,911,912,914,916,918],{"class":111,"line":229},[109,913,711],{"class":211},[109,915,714],{"class":126},[109,917,717],{"class":278},[109,919,720],{"class":126},[109,921,922,924,926],{"class":111,"line":244},[109,923,731],{"class":122},[109,925,734],{"class":133},[109,927,137],{"class":126},[109,929,930],{"class":111,"line":258},[109,931,742],{"class":126},[19,933,934],{},"输出结果：",[19,936,937],{},[938,939],"img",{"alt":940,"src":941},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,943,944],{},"总结：不要返回局部变量的地址",[765,946,947],{"start":119},[30,948,949],{},"堆区",[27,951,952,955],{},[30,953,954],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[30,956,957],{},"在c++中主要利用new在堆区开辟内存",[99,959,961],{"className":101,"code":960,"language":103,"meta":104,"style":104},"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",[106,962,963,979,983,988,1011,1019,1023,1031,1035,1040,1054,1069],{"__ignoreMap":104},[109,964,965,967,970,973,976],{"class":111,"line":112},[109,966,123],{"class":122},[109,968,969],{"class":122},"  *",[109,971,972],{"class":211},"func",[109,974,975],{"class":126},"()",[109,977,978],{"class":115},"  \u002F\u002F函数返回指针\n",[109,980,981],{"class":111,"line":119},[109,982,808],{"class":126},[109,984,985],{"class":111,"line":140},[109,986,987],{"class":115},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[109,989,990,993,995,997,999,1002,1004,1006,1009],{"class":111,"line":154},[109,991,992],{"class":122},"   int",[109,994,797],{"class":122},[109,996,19],{"class":126},[109,998,130],{"class":122},[109,1000,1001],{"class":122}," new",[109,1003,173],{"class":122},[109,1005,714],{"class":126},[109,1007,1008],{"class":133},"10",[109,1010,720],{"class":126},[109,1012,1013,1016],{"class":111,"line":161},[109,1014,1015],{"class":122},"   return",[109,1017,1018],{"class":126}," p;\n",[109,1020,1021],{"class":111,"line":167},[109,1022,742],{"class":126},[109,1024,1025,1027,1029],{"class":111,"line":185},[109,1026,123],{"class":122},[109,1028,212],{"class":211},[109,1030,803],{"class":126},[109,1032,1033],{"class":111,"line":201},[109,1034,808],{"class":126},[109,1036,1037],{"class":111,"line":206},[109,1038,1039],{"class":115},"    \u002F\u002F在堆区开辟数据\n",[109,1041,1042,1044,1046,1048,1050,1052],{"class":111,"line":218},[109,1043,232],{"class":122},[109,1045,797],{"class":122},[109,1047,19],{"class":126},[109,1049,130],{"class":122},[109,1051,972],{"class":211},[109,1053,874],{"class":126},[109,1055,1056,1059,1062,1064,1066],{"class":111,"line":223},[109,1057,1058],{"class":126},"    cout",[109,1060,1061],{"class":122},"\u003C\u003C*",[109,1063,19],{"class":126},[109,1065,275],{"class":122},[109,1067,1068],{"class":126},"endl;\n",[109,1070,1071],{"class":111,"line":229},[109,1072,742],{"class":126},[19,1074,1075],{},"图片展示：",[19,1077,1078],{},[938,1079],{"alt":940,"src":1080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,1082,1083],{},"堆区内存由程序员管生死！！！",[765,1085,1086],{"start":140},[30,1087,1088],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,1090,1091],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,1093,1094,1095],{},"​语法：",[106,1096,1097],{}," new 数据类型",[19,1099,1100],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[99,1102,1104],{"className":101,"code":1103,"language":103,"meta":104,"style":104},"\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",[106,1105,1106,1111,1121,1125,1130,1135,1158,1162,1172,1176,1190,1202,1214,1226,1231,1236,1247,1251,1256,1265,1269,1274,1298,1331,1336,1357,1362,1388,1392,1406,1410,1415,1420,1428,1432,1436,1444,1448,1455,1462],{"__ignoreMap":104},[109,1107,1108],{"class":111,"line":112},[109,1109,1110],{"class":115},"\u002F\u002F1.new的基本语法\n",[109,1112,1113,1115,1117,1119],{"class":111,"line":119},[109,1114,123],{"class":122},[109,1116,797],{"class":122},[109,1118,972],{"class":211},[109,1120,803],{"class":126},[109,1122,1123],{"class":111,"line":140},[109,1124,808],{"class":126},[109,1126,1127],{"class":111,"line":154},[109,1128,1129],{"class":115},"    \u002F\u002F在堆区创建整型数据\n",[109,1131,1132],{"class":111,"line":161},[109,1133,1134],{"class":115},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[109,1136,1137,1139,1141,1143,1146,1148,1150,1152,1155],{"class":111,"line":167},[109,1138,232],{"class":122},[109,1140,797],{"class":122},[109,1142,19],{"class":126},[109,1144,1145],{"class":122},"=new",[109,1147,173],{"class":122},[109,1149,714],{"class":126},[109,1151,1008],{"class":133},[109,1153,1154],{"class":126},");",[109,1156,1157],{"class":115},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[109,1159,1160],{"class":111,"line":185},[109,1161,742],{"class":126},[109,1163,1164,1167,1170],{"class":111,"line":201},[109,1165,1166],{"class":122},"void",[109,1168,1169],{"class":211}," test01",[109,1171,803],{"class":126},[109,1173,1174],{"class":111,"line":206},[109,1175,808],{"class":126},[109,1177,1178,1180,1182,1184,1186,1188],{"class":111,"line":218},[109,1179,232],{"class":122},[109,1181,797],{"class":122},[109,1183,19],{"class":126},[109,1185,130],{"class":122},[109,1187,972],{"class":211},[109,1189,874],{"class":126},[109,1191,1192,1194,1196,1198,1200],{"class":111,"line":223},[109,1193,1058],{"class":126},[109,1195,1061],{"class":122},[109,1197,19],{"class":126},[109,1199,275],{"class":122},[109,1201,1068],{"class":126},[109,1203,1204,1206,1208,1210,1212],{"class":111,"line":229},[109,1205,1058],{"class":126},[109,1207,1061],{"class":122},[109,1209,19],{"class":126},[109,1211,275],{"class":122},[109,1213,1068],{"class":126},[109,1215,1216,1218,1220,1222,1224],{"class":111,"line":244},[109,1217,1058],{"class":126},[109,1219,1061],{"class":122},[109,1221,19],{"class":126},[109,1223,275],{"class":122},[109,1225,1068],{"class":126},[109,1227,1228],{"class":111,"line":258},[109,1229,1230],{"class":115},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[109,1232,1233],{"class":111,"line":263},[109,1234,1235],{"class":115},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[109,1237,1238,1241,1244],{"class":111,"line":269},[109,1239,1240],{"class":122},"    delete",[109,1242,1243],{"class":126}," p;",[109,1245,1246],{"class":115},"\u002F\u002F删除这块地址\n",[109,1248,1249],{"class":111,"line":304},[109,1250,742],{"class":126},[109,1252,1253],{"class":111,"line":331},[109,1254,1255],{"class":115},"\u002F\u002F2.在堆区利用new开辟数组\n",[109,1257,1258,1260,1263],{"class":111,"line":336},[109,1259,1166],{"class":122},[109,1261,1262],{"class":211}," test02",[109,1264,803],{"class":126},[109,1266,1267],{"class":111,"line":364},[109,1268,808],{"class":126},[109,1270,1271],{"class":111,"line":391},[109,1272,1273],{"class":115},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[109,1275,1276,1278,1280,1283,1285,1287,1290,1292,1295],{"class":111,"line":396},[109,1277,232],{"class":122},[109,1279,797],{"class":122},[109,1281,1282],{"class":126},"arr",[109,1284,1145],{"class":122},[109,1286,173],{"class":122},[109,1288,1289],{"class":126},"[",[109,1291,1008],{"class":133},[109,1293,1294],{"class":126},"];",[109,1296,1297],{"class":115},"\u002F\u002F10代表数组有10个元素\n",[109,1299,1300,1303,1305,1307,1310,1312,1315,1318,1321,1323,1325,1328],{"class":111,"line":402},[109,1301,1302],{"class":122},"    for",[109,1304,285],{"class":126},[109,1306,123],{"class":122},[109,1308,1309],{"class":126}," i",[109,1311,130],{"class":122},[109,1313,1314],{"class":133},"0",[109,1316,1317],{"class":126},";i",[109,1319,1320],{"class":122},"\u003C",[109,1322,1008],{"class":133},[109,1324,1317],{"class":126},[109,1326,1327],{"class":122},"++",[109,1329,1330],{"class":126},")\n",[109,1332,1333],{"class":111,"line":419},[109,1334,1335],{"class":126},"    {\n",[109,1337,1338,1341,1343,1346,1349,1352,1354],{"class":111,"line":435},[109,1339,1340],{"class":126},"        arr[i]",[109,1342,130],{"class":122},[109,1344,1345],{"class":126},"i",[109,1347,1348],{"class":122},"+",[109,1350,1351],{"class":133},"100",[109,1353,821],{"class":126},[109,1355,1356],{"class":115},"\u002F\u002F给10个元素赋值100～109\n",[109,1358,1359],{"class":111,"line":440},[109,1360,1361],{"class":126},"    }\n",[109,1363,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386],{"class":111,"line":467},[109,1365,1302],{"class":122},[109,1367,285],{"class":126},[109,1369,123],{"class":122},[109,1371,1309],{"class":126},[109,1373,130],{"class":122},[109,1375,1314],{"class":133},[109,1377,1317],{"class":126},[109,1379,1320],{"class":122},[109,1381,1008],{"class":133},[109,1383,1317],{"class":126},[109,1385,1327],{"class":122},[109,1387,1330],{"class":126},[109,1389,1390],{"class":111,"line":494},[109,1391,1335],{"class":126},[109,1393,1394,1397,1399,1402,1404],{"class":111,"line":499},[109,1395,1396],{"class":126},"        cout",[109,1398,275],{"class":122},[109,1400,1401],{"class":126},"arr[i]",[109,1403,275],{"class":122},[109,1405,1068],{"class":126},[109,1407,1408],{"class":111,"line":526},[109,1409,1361],{"class":126},[109,1411,1412],{"class":111,"line":552},[109,1413,1414],{"class":115},"    \u002F\u002F释放堆区数组\n",[109,1416,1417],{"class":111,"line":557},[109,1418,1419],{"class":115},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[109,1421,1422,1425],{"class":111,"line":584},[109,1423,1424],{"class":122},"    delete[]",[109,1426,1427],{"class":126}," arr;\n",[109,1429,1430],{"class":111,"line":611},[109,1431,742],{"class":126},[109,1433,1434],{"class":111,"line":616},[109,1435,158],{"emptyLinePlaceholder":157},[109,1437,1438,1440,1442],{"class":111,"line":633},[109,1439,123],{"class":122},[109,1441,212],{"class":211},[109,1443,803],{"class":126},[109,1445,1446],{"class":111,"line":649},[109,1447,808],{"class":126},[109,1449,1450,1453],{"class":111,"line":676},[109,1451,1452],{"class":211},"    test01",[109,1454,874],{"class":126},[109,1456,1457,1460],{"class":111,"line":703},[109,1458,1459],{"class":211},"    test02",[109,1461,874],{"class":126},[109,1463,1464],{"class":111,"line":708},[109,1465,742],{"class":126},[1467,1468,1469],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .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":104,"searchDepth":119,"depth":119,"links":1471},[1472],{"id":16,"depth":119,"text":17,"children":1473},[1474,1475],{"id":53,"depth":140,"text":54},{"id":762,"depth":140,"text":763},"md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":5,"description":104},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",[1483,6499,7600,9016,11996,13203,14692,15781,24544,24557,25156,25182,25306,25547,25612,25630,25643,25690,25814,25983,26182,26362,26567,26703,26798,26835,26848,27158,27899,28607,28628,29648,31279,31430,31443,31455,31756,51568,51583,51600,51633,54505,77853,93998,94019,94132,94253,95023,95686,96047,96085,96191,96291,96334,96360,96421,98075,98176,98201,98692,99192,100272,100555,101297,101799,101811,103827,105491,106994,108692,110609,112528,114550,118020,118452,118915,119664,122608,122956,122978,123334,126641,126653,127056,127079,127226,127393,127598,127899,128456,129113,131044,132642,133291,134785,136216,137451,139145,140897,143307,143423,144358,144569,145454,146689,146917,146930,148085,150497,152865,156186,158663,160307,162084,164097,167149,169329,171856,174050],{"id":1484,"title":1485,"body":1486,"description":104,"extension":1476,"meta":6494,"navigation":157,"path":6495,"seo":6496,"stem":6497,"__hash__":6498},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1487,"toc":6466},[1488,1491,1495,1498,1502,1513,1517,1521,1524,1527,1530,1533,1536,1559,1563,1566,1569,1572,1575,1624,1628,1646,1648,1662,1665,1673,1676,2529,2536,2552,2556,2639,2643,2649,2734,2738,2776,2780,2843,2847,2851,2857,2868,2872,2877,2881,2886,2890,2895,2899,2903,2908,3155,3160,3298,3303,3553,3556,3564,3568,3573,3673,3676,3972,3981,4081,4084,4087,4090,4093,4353,4358,4496,4499,4677,4680,4807,4810,4962,4966,4971,4974,4985,4993,4996,5103,5107,5111,5116,5166,5171,5176,5200,5205,5257,5260,5265,5440,5445,5727,5732,6129,6133,6138,6195,6200,6208,6211,6351,6354,6463],[10,1489,1485],{"id":1490},"_1基础入门",[14,1492,1494],{"id":1493},"_11注释","1.1注释",[19,1496,1497],{},"\u002F\u002F或者\u002F* *\u002F",[14,1499,1501],{"id":1500},"_12命名","1.2命名",[765,1503,1504,1507,1510],{},[30,1505,1506],{},"字母数字下划线",[30,1508,1509],{},"开头必须是字母或_",[30,1511,1512],{},"不能使用关键词",[14,1514,1516],{"id":1515},"_13数据类型","1.3数据类型",[51,1518,1520],{"id":1519},"_131整形","1.3.1整形",[19,1522,1523],{},"short 短整形 2",[19,1525,1526],{},"int 整形 4",[19,1528,1529],{},"long 长整形 win4 linux32位4 linux64位8",[19,1531,1532],{},"long long 长长整形 8",[19,1534,1535],{},"利用sizeof可以求数据类型占用的内存空间大小",[99,1537,1539],{"className":101,"code":1538,"language":103,"meta":104,"style":104},"sizeof(int)\nsizeof(num)\n",[106,1540,1541,1552],{"__ignoreMap":104},[109,1542,1543,1546,1548,1550],{"class":111,"line":112},[109,1544,1545],{"class":122},"sizeof",[109,1547,714],{"class":126},[109,1549,123],{"class":122},[109,1551,1330],{"class":126},[109,1553,1554,1556],{"class":111,"line":119},[109,1555,1545],{"class":122},[109,1557,1558],{"class":126},"(num)\n",[51,1560,1562],{"id":1561},"_132浮点型","1.3.2浮点型",[19,1564,1565],{},"float 单精度 4节 7位有效数字",[19,1567,1568],{},"double 双精度 8节 15-16有效数字",[19,1570,1571],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1573,1574],{},"注意点：",[99,1576,1578],{"className":101,"code":1577,"language":103,"meta":104,"style":104},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[106,1579,1580,1601],{"__ignoreMap":104},[109,1581,1582,1585,1588,1590,1593,1596,1598],{"class":111,"line":112},[109,1583,1584],{"class":122},"float",[109,1586,1587],{"class":126}," f1",[109,1589,130],{"class":122},[109,1591,1592],{"class":133},"3.14",[109,1594,1595],{"class":122},"f",[109,1597,821],{"class":126},[109,1599,1600],{"class":115}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[109,1602,1603,1605,1608,1610,1613,1616,1619,1621],{"class":111,"line":119},[109,1604,1584],{"class":122},[109,1606,1607],{"class":126}," f2",[109,1609,130],{"class":122},[109,1611,1612],{"class":133},"3",[109,1614,1615],{"class":122},"e",[109,1617,1618],{"class":133},"2",[109,1620,821],{"class":126},[109,1622,1623],{"class":115}," \u002F\u002F科学记数法\n",[51,1625,1627],{"id":1626},"_133字符型","1.3.3字符型",[99,1629,1631],{"className":101,"code":1630,"language":103,"meta":104,"style":104},"char ch='a'\n",[106,1632,1633],{"__ignoreMap":104},[109,1634,1635,1638,1641,1643],{"class":111,"line":112},[109,1636,1637],{"class":122},"char",[109,1639,1640],{"class":126}," ch",[109,1642,130],{"class":122},[109,1644,1645],{"class":278},"'a'\n",[19,1647,1574],{},[765,1649,1650,1653,1656,1659],{},[30,1651,1652],{},"在显示字符型变量时，只能单引号，双引号x",[30,1654,1655],{},"单引号内只能一个字符，不能字符串",[30,1657,1658],{},"c和c++字符型变量只占用一个字符",[30,1660,1661],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1663,1664],{},"ASCII码大致由以下两部分组成：",[765,1666,1667,1670],{},[30,1668,1669],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[30,1671,1672],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1674,1675],{},"ASCII码表格：",[1677,1678,1679,1722],"table",{},[1680,1681,1682],"thead",{},[1683,1684,1685,1692,1697,1701,1706,1710,1714,1718],"tr",{},[1686,1687,1688,1691],"th",{},[23,1689,1690],{},"ASCII","值",[1686,1693,1694],{},[23,1695,1696],{},"控制字符",[1686,1698,1699,1691],{},[23,1700,1690],{},[1686,1702,1703],{},[23,1704,1705],{},"字符",[1686,1707,1708,1691],{},[23,1709,1690],{},[1686,1711,1712],{},[23,1713,1705],{},[1686,1715,1716,1691],{},[23,1717,1690],{},[1686,1719,1720],{},[23,1721,1705],{},[1723,1724,1725,1751,1777,1802,1827,1852,1877,1901,1927,1952,1976,2001,2026,2051,2077,2103,2129,2153,2178,2203,2228,2253,2278,2303,2328,2353,2378,2404,2428,2452,2477,2503],"tbody",{},[1683,1726,1727,1730,1733,1736,1739,1742,1745,1748],{},[1728,1729,1314],"td",{},[1728,1731,1732],{},"NUT",[1728,1734,1735],{},"32",[1728,1737,1738],{},"(space)",[1728,1740,1741],{},"64",[1728,1743,1744],{},"@",[1728,1746,1747],{},"96",[1728,1749,1750],{},"、",[1683,1752,1753,1756,1759,1762,1765,1768,1771,1774],{},[1728,1754,1755],{},"1",[1728,1757,1758],{},"SOH",[1728,1760,1761],{},"33",[1728,1763,1764],{},"!",[1728,1766,1767],{},"65",[1728,1769,1770],{},"A",[1728,1772,1773],{},"97",[1728,1775,1776],{},"a",[1683,1778,1779,1781,1784,1787,1790,1793,1796,1799],{},[1728,1780,1618],{},[1728,1782,1783],{},"STX",[1728,1785,1786],{},"34",[1728,1788,1789],{},"\"",[1728,1791,1792],{},"66",[1728,1794,1795],{},"B",[1728,1797,1798],{},"98",[1728,1800,1801],{},"b",[1683,1803,1804,1806,1809,1812,1815,1818,1821,1824],{},[1728,1805,1612],{},[1728,1807,1808],{},"ETX",[1728,1810,1811],{},"35",[1728,1813,1814],{},"#",[1728,1816,1817],{},"67",[1728,1819,1820],{},"C",[1728,1822,1823],{},"99",[1728,1825,1826],{},"c",[1683,1828,1829,1832,1835,1838,1841,1844,1847,1849],{},[1728,1830,1831],{},"4",[1728,1833,1834],{},"EOT",[1728,1836,1837],{},"36",[1728,1839,1840],{},"$",[1728,1842,1843],{},"68",[1728,1845,1846],{},"D",[1728,1848,1351],{},[1728,1850,1851],{},"d",[1683,1853,1854,1857,1860,1863,1866,1869,1872,1875],{},[1728,1855,1856],{},"5",[1728,1858,1859],{},"ENQ",[1728,1861,1862],{},"37",[1728,1864,1865],{},"%",[1728,1867,1868],{},"69",[1728,1870,1871],{},"E",[1728,1873,1874],{},"101",[1728,1876,1615],{},[1683,1878,1879,1882,1885,1888,1890,1893,1896,1899],{},[1728,1880,1881],{},"6",[1728,1883,1884],{},"ACK",[1728,1886,1887],{},"38",[1728,1889,293],{},[1728,1891,1892],{},"70",[1728,1894,1895],{},"F",[1728,1897,1898],{},"102",[1728,1900,1595],{},[1683,1902,1903,1906,1909,1912,1915,1918,1921,1924],{},[1728,1904,1905],{},"7",[1728,1907,1908],{},"BEL",[1728,1910,1911],{},"39",[1728,1913,1914],{},",",[1728,1916,1917],{},"71",[1728,1919,1920],{},"G",[1728,1922,1923],{},"103",[1728,1925,1926],{},"g",[1683,1928,1929,1932,1935,1938,1940,1943,1946,1949],{},[1728,1930,1931],{},"8",[1728,1933,1934],{},"BS",[1728,1936,1937],{},"40",[1728,1939,714],{},[1728,1941,1942],{},"72",[1728,1944,1945],{},"H",[1728,1947,1948],{},"104",[1728,1950,1951],{},"h",[1683,1953,1954,1957,1960,1963,1965,1968,1971,1974],{},[1728,1955,1956],{},"9",[1728,1958,1959],{},"HT",[1728,1961,1962],{},"41",[1728,1964,290],{},[1728,1966,1967],{},"73",[1728,1969,1970],{},"I",[1728,1972,1973],{},"105",[1728,1975,1345],{},[1683,1977,1978,1980,1983,1986,1989,1992,1995,1998],{},[1728,1979,1008],{},[1728,1981,1982],{},"LF",[1728,1984,1985],{},"42",[1728,1987,1988],{},"*",[1728,1990,1991],{},"74",[1728,1993,1994],{},"J",[1728,1996,1997],{},"106",[1728,1999,2000],{},"j",[1683,2002,2003,2006,2009,2012,2014,2017,2020,2023],{},[1728,2004,2005],{},"11",[1728,2007,2008],{},"VT",[1728,2010,2011],{},"43",[1728,2013,1348],{},[1728,2015,2016],{},"75",[1728,2018,2019],{},"K",[1728,2021,2022],{},"107",[1728,2024,2025],{},"k",[1683,2027,2028,2031,2034,2037,2039,2042,2045,2048],{},[1728,2029,2030],{},"12",[1728,2032,2033],{},"FF",[1728,2035,2036],{},"44",[1728,2038,1914],{},[1728,2040,2041],{},"76",[1728,2043,2044],{},"L",[1728,2046,2047],{},"108",[1728,2049,2050],{},"l",[1683,2052,2053,2056,2059,2062,2065,2068,2071,2074],{},[1728,2054,2055],{},"13",[1728,2057,2058],{},"CR",[1728,2060,2061],{},"45",[1728,2063,2064],{},"-",[1728,2066,2067],{},"77",[1728,2069,2070],{},"M",[1728,2072,2073],{},"109",[1728,2075,2076],{},"m",[1683,2078,2079,2082,2085,2088,2091,2094,2097,2100],{},[1728,2080,2081],{},"14",[1728,2083,2084],{},"SO",[1728,2086,2087],{},"46",[1728,2089,2090],{},".",[1728,2092,2093],{},"78",[1728,2095,2096],{},"N",[1728,2098,2099],{},"110",[1728,2101,2102],{},"n",[1683,2104,2105,2108,2111,2114,2117,2120,2123,2126],{},[1728,2106,2107],{},"15",[1728,2109,2110],{},"SI",[1728,2112,2113],{},"47",[1728,2115,2116],{},"\u002F",[1728,2118,2119],{},"79",[1728,2121,2122],{},"O",[1728,2124,2125],{},"111",[1728,2127,2128],{},"o",[1683,2130,2131,2134,2137,2140,2142,2145,2148,2151],{},[1728,2132,2133],{},"16",[1728,2135,2136],{},"DLE",[1728,2138,2139],{},"48",[1728,2141,1314],{},[1728,2143,2144],{},"80",[1728,2146,2147],{},"P",[1728,2149,2150],{},"112",[1728,2152,19],{},[1683,2154,2155,2158,2161,2164,2166,2169,2172,2175],{},[1728,2156,2157],{},"17",[1728,2159,2160],{},"DCI",[1728,2162,2163],{},"49",[1728,2165,1755],{},[1728,2167,2168],{},"81",[1728,2170,2171],{},"Q",[1728,2173,2174],{},"113",[1728,2176,2177],{},"q",[1683,2179,2180,2183,2186,2189,2191,2194,2197,2200],{},[1728,2181,2182],{},"18",[1728,2184,2185],{},"DC2",[1728,2187,2188],{},"50",[1728,2190,1618],{},[1728,2192,2193],{},"82",[1728,2195,2196],{},"R",[1728,2198,2199],{},"114",[1728,2201,2202],{},"r",[1683,2204,2205,2208,2211,2214,2216,2219,2222,2225],{},[1728,2206,2207],{},"19",[1728,2209,2210],{},"DC3",[1728,2212,2213],{},"51",[1728,2215,1612],{},[1728,2217,2218],{},"83",[1728,2220,2221],{},"S",[1728,2223,2224],{},"115",[1728,2226,2227],{},"s",[1683,2229,2230,2233,2236,2239,2241,2244,2247,2250],{},[1728,2231,2232],{},"20",[1728,2234,2235],{},"DC4",[1728,2237,2238],{},"52",[1728,2240,1831],{},[1728,2242,2243],{},"84",[1728,2245,2246],{},"T",[1728,2248,2249],{},"116",[1728,2251,2252],{},"t",[1683,2254,2255,2258,2261,2264,2266,2269,2272,2275],{},[1728,2256,2257],{},"21",[1728,2259,2260],{},"NAK",[1728,2262,2263],{},"53",[1728,2265,1856],{},[1728,2267,2268],{},"85",[1728,2270,2271],{},"U",[1728,2273,2274],{},"117",[1728,2276,2277],{},"u",[1683,2279,2280,2283,2286,2289,2291,2294,2297,2300],{},[1728,2281,2282],{},"22",[1728,2284,2285],{},"SYN",[1728,2287,2288],{},"54",[1728,2290,1881],{},[1728,2292,2293],{},"86",[1728,2295,2296],{},"V",[1728,2298,2299],{},"118",[1728,2301,2302],{},"v",[1683,2304,2305,2308,2311,2314,2316,2319,2322,2325],{},[1728,2306,2307],{},"23",[1728,2309,2310],{},"TB",[1728,2312,2313],{},"55",[1728,2315,1905],{},[1728,2317,2318],{},"87",[1728,2320,2321],{},"W",[1728,2323,2324],{},"119",[1728,2326,2327],{},"w",[1683,2329,2330,2333,2336,2339,2341,2344,2347,2350],{},[1728,2331,2332],{},"24",[1728,2334,2335],{},"CAN",[1728,2337,2338],{},"56",[1728,2340,1931],{},[1728,2342,2343],{},"88",[1728,2345,2346],{},"X",[1728,2348,2349],{},"120",[1728,2351,2352],{},"x",[1683,2354,2355,2358,2361,2364,2366,2369,2372,2375],{},[1728,2356,2357],{},"25",[1728,2359,2360],{},"EM",[1728,2362,2363],{},"57",[1728,2365,1956],{},[1728,2367,2368],{},"89",[1728,2370,2371],{},"Y",[1728,2373,2374],{},"121",[1728,2376,2377],{},"y",[1683,2379,2380,2383,2386,2389,2392,2395,2398,2401],{},[1728,2381,2382],{},"26",[1728,2384,2385],{},"SUB",[1728,2387,2388],{},"58",[1728,2390,2391],{},":",[1728,2393,2394],{},"90",[1728,2396,2397],{},"Z",[1728,2399,2400],{},"122",[1728,2402,2403],{},"z",[1683,2405,2406,2409,2412,2415,2417,2420,2422,2425],{},[1728,2407,2408],{},"27",[1728,2410,2411],{},"ESC",[1728,2413,2414],{},"59",[1728,2416,821],{},[1728,2418,2419],{},"91",[1728,2421,1289],{},[1728,2423,2424],{},"123",[1728,2426,2427],{},"{",[1683,2429,2430,2433,2436,2439,2441,2444,2446,2449],{},[1728,2431,2432],{},"28",[1728,2434,2435],{},"FS",[1728,2437,2438],{},"60",[1728,2440,1320],{},[1728,2442,2443],{},"92",[1728,2445,2116],{},[1728,2447,2448],{},"124",[1728,2450,2451],{},"|",[1683,2453,2454,2457,2460,2463,2465,2468,2471,2474],{},[1728,2455,2456],{},"29",[1728,2458,2459],{},"GS",[1728,2461,2462],{},"61",[1728,2464,130],{},[1728,2466,2467],{},"93",[1728,2469,2470],{},"]",[1728,2472,2473],{},"125",[1728,2475,2476],{},"}",[1683,2478,2479,2482,2485,2488,2491,2494,2497,2500],{},[1728,2480,2481],{},"30",[1728,2483,2484],{},"RS",[1728,2486,2487],{},"62",[1728,2489,2490],{},">",[1728,2492,2493],{},"94",[1728,2495,2496],{},"^",[1728,2498,2499],{},"126",[1728,2501,2502],{},"`",[1683,2504,2505,2508,2511,2514,2517,2520,2523,2526],{},[1728,2506,2507],{},"31",[1728,2509,2510],{},"US",[1728,2512,2513],{},"63",[1728,2515,2516],{},"?",[1728,2518,2519],{},"95",[1728,2521,2522],{},"_",[1728,2524,2525],{},"127",[1728,2527,2528],{},"DEL",[19,2530,2531,2532,2535],{},"ASCII 码大致由以下",[23,2533,2534],{},"两部分组","成：",[27,2537,2538,2545],{},[30,2539,2540,2541,2544],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[23,2542,2543],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[30,2546,2547,2548,2551],{},"ASCII 打印字符：数字 ",[23,2549,2550],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[51,2553,2555],{"id":2554},"_134转义字符","1.3.4转义字符",[99,2557,2559],{"className":101,"code":2558,"language":103,"meta":104,"style":104},"\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",[106,2560,2561,2566,2581,2593,2598,2611,2616],{"__ignoreMap":104},[109,2562,2563],{"class":111,"line":112},[109,2564,2565],{"class":115},"\u002F\u002F换行符\n",[109,2567,2568,2571,2573,2576,2578],{"class":111,"line":119},[109,2569,2570],{"class":126},"cout ",[109,2572,275],{"class":122},[109,2574,2575],{"class":278},"\"hello world\u002Fn\"",[109,2577,821],{"class":126},[109,2579,2580],{"class":115}," \u002F\u002F就等同于如下：\n",[109,2582,2583,2585,2587,2589,2591],{"class":111,"line":140},[109,2584,2570],{"class":126},[109,2586,275],{"class":122},[109,2588,519],{"class":278},[109,2590,275],{"class":122},[109,2592,1068],{"class":126},[109,2594,2595],{"class":111,"line":154},[109,2596,2597],{"class":115},"\u002F\u002F反斜杠\n",[109,2599,2600,2602,2604,2607,2609],{"class":111,"line":161},[109,2601,2570],{"class":126},[109,2603,275],{"class":122},[109,2605,2606],{"class":278},"\"\u002F\u002F\"",[109,2608,275],{"class":122},[109,2610,1068],{"class":126},[109,2612,2613],{"class":111,"line":167},[109,2614,2615],{"class":115},"\u002F\u002F水平制表符\n",[109,2617,2618,2620,2622,2625,2628,2631,2633,2636],{"class":111,"line":185},[109,2619,2570],{"class":126},[109,2621,275],{"class":122},[109,2623,2624],{"class":278},"\"aaaa",[109,2626,2627],{"class":133},"\\t",[109,2629,2630],{"class":278},"helloworld\"",[109,2632,275],{"class":122},[109,2634,2635],{"class":126},"endl;",[109,2637,2638],{"class":115}," \u002F\u002F输出窗口时有对齐效果\n",[51,2640,2642],{"id":2641},"_135字符串型","1.3.5字符串型",[19,2644,2645,2646,2648],{},"char 变量名",[109,2647],{},"=\"字符串值\"",[99,2650,2652],{"className":101,"code":2651,"language":103,"meta":104,"style":104},"\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",[106,2653,2654,2659,2664,2669,2674,2687,2700,2705,2710,2721],{"__ignoreMap":104},[109,2655,2656],{"class":111,"line":112},[109,2657,2658],{"class":115},"\u002F\u002Fc风格字符串\n",[109,2660,2661],{"class":111,"line":119},[109,2662,2663],{"class":115},"\u002F\u002F注意事项：\n",[109,2665,2666],{"class":111,"line":140},[109,2667,2668],{"class":115},"\u002F\u002F1.char字符串名[]\n",[109,2670,2671],{"class":111,"line":154},[109,2672,2673],{"class":115},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[109,2675,2676,2678,2681,2683,2685],{"class":111,"line":161},[109,2677,1637],{"class":122},[109,2679,2680],{"class":126}," str[]",[109,2682,130],{"class":122},[109,2684,519],{"class":278},[109,2686,137],{"class":126},[109,2688,2689,2691,2693,2696,2698],{"class":111,"line":167},[109,2690,2570],{"class":126},[109,2692,275],{"class":122},[109,2694,2695],{"class":126},"str",[109,2697,275],{"class":122},[109,2699,1068],{"class":126},[109,2701,2702],{"class":111,"line":185},[109,2703,2704],{"class":115},"\u002F\u002Fc++风格字符串\n",[109,2706,2707],{"class":111,"line":201},[109,2708,2709],{"class":115},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[109,2711,2712,2715,2717,2719],{"class":111,"line":206},[109,2713,2714],{"class":126},"string str2",[109,2716,130],{"class":122},[109,2718,519],{"class":278},[109,2720,137],{"class":126},[109,2722,2723,2725,2727,2730,2732],{"class":111,"line":218},[109,2724,2570],{"class":126},[109,2726,275],{"class":122},[109,2728,2729],{"class":126},"str2",[109,2731,275],{"class":122},[109,2733,1068],{"class":126},[51,2735,2737],{"id":2736},"_136布尔类型bool","1.3.6布尔类型bool",[99,2739,2741],{"className":101,"code":2740,"language":103,"meta":104,"style":104},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[106,2742,2743,2758],{"__ignoreMap":104},[109,2744,2745,2748,2751,2753,2756],{"class":111,"line":112},[109,2746,2747],{"class":122},"bool",[109,2749,2750],{"class":126}," flag",[109,2752,130],{"class":122},[109,2754,2755],{"class":133},"true",[109,2757,137],{"class":126},[109,2759,2760,2763,2766,2769,2771,2773],{"class":111,"line":119},[109,2761,2762],{"class":126},"cout",[109,2764,2765],{"class":122},"\u003C\u003Csizeof",[109,2767,2768],{"class":126},"(flag)",[109,2770,275],{"class":122},[109,2772,2635],{"class":126},[109,2774,2775],{"class":115}," \u002F\u002F查看布尔占内存空间\n",[14,2777,2779],{"id":2778},"_14键盘输入cin","1.4键盘输入cin",[99,2781,2783],{"className":101,"code":2782,"language":103,"meta":104,"style":104},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[106,2784,2785,2798,2815,2826],{"__ignoreMap":104},[109,2786,2787,2789,2792,2794,2796],{"class":111,"line":112},[109,2788,123],{"class":122},[109,2790,2791],{"class":126}," a",[109,2793,130],{"class":122},[109,2795,1314],{"class":133},[109,2797,137],{"class":126},[109,2799,2800,2802,2804,2807,2809,2811,2813],{"class":111,"line":119},[109,2801,2762],{"class":126},[109,2803,275],{"class":122},[109,2805,2806],{"class":278},"\"请给整型变量a赋值\"",[109,2808,275],{"class":122},[109,2810,1776],{"class":126},[109,2812,275],{"class":122},[109,2814,1068],{"class":126},[109,2816,2817,2820,2823],{"class":111,"line":140},[109,2818,2819],{"class":126},"cin ",[109,2821,2822],{"class":122},">>",[109,2824,2825],{"class":126}," a;\n",[109,2827,2828,2830,2832,2835,2837,2839,2841],{"class":111,"line":154},[109,2829,2570],{"class":126},[109,2831,275],{"class":122},[109,2833,2834],{"class":278}," \"整型变量a=\"",[109,2836,282],{"class":122},[109,2838,1776],{"class":126},[109,2840,275],{"class":122},[109,2842,1068],{"class":126},[14,2844,2846],{"id":2845},"_15运算符","1.5运算符",[51,2848,2850],{"id":2849},"_151算术运算符","1.5.1算术运算符",[19,2852,2853,2856],{},[938,2854],{"alt":104,"src":2855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[765,2858,2859,2862,2865],{},[30,2860,2861],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[30,2863,2864],{},"两个小数不可以做取模运算",[30,2866,2867],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[51,2869,2871],{"id":2870},"_152赋值运算符","1.5.2赋值运算符",[19,2873,2874],{},[938,2875],{"alt":104,"src":2876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[51,2878,2880],{"id":2879},"_153比较运算符","1.5.3比较运算符",[19,2882,2883],{},[938,2884],{"alt":104,"src":2885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[51,2887,2889],{"id":2888},"_154逻辑运算符","1.5.4逻辑运算符",[19,2891,2892],{},[938,2893],{"alt":104,"src":2894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2896,2898],{"id":2897},"_16程序流程结构","1.6程序流程结构",[51,2900,2902],{"id":2901},"_161选择结构","1.6.1选择结构",[765,2904,2905],{},[30,2906,2907],{},"if语句\n单行、多行、多条件if语句",[99,2909,2911],{"className":101,"code":2910,"language":103,"meta":104,"style":104},"\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",[106,2912,2913,2918,2933,2937,2950,2954,2959,2968,2981,2985,2998,3002,3007,3011,3024,3028,3033,3052,3056,3069,3073,3101,3105,3121,3125,3129,3133,3146,3150],{"__ignoreMap":104},[109,2914,2915],{"class":111,"line":112},[109,2916,2917],{"class":115},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[109,2919,2920,2923,2926,2928,2931],{"class":111,"line":119},[109,2921,2922],{"class":122},"if",[109,2924,2925],{"class":126},"(score",[109,2927,2490],{"class":122},[109,2929,2930],{"class":133},"600",[109,2932,1330],{"class":126},[109,2934,2935],{"class":111,"line":140},[109,2936,808],{"class":126},[109,2938,2939,2941,2943,2946,2948],{"class":111,"line":154},[109,2940,1058],{"class":126},[109,2942,275],{"class":122},[109,2944,2945],{"class":278},"'这是单行if语句'",[109,2947,275],{"class":122},[109,2949,1068],{"class":126},[109,2951,2952],{"class":111,"line":161},[109,2953,742],{"class":126},[109,2955,2956],{"class":111,"line":167},[109,2957,2958],{"class":115},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[109,2960,2961,2963,2965],{"class":111,"line":185},[109,2962,2819],{"class":126},[109,2964,2822],{"class":122},[109,2966,2967],{"class":126}," score\n",[109,2969,2970,2972,2974,2977,2979],{"class":111,"line":201},[109,2971,2922],{"class":122},[109,2973,2925],{"class":126},[109,2975,2976],{"class":122},"\u003C=",[109,2978,2930],{"class":133},[109,2980,1330],{"class":126},[109,2982,2983],{"class":111,"line":206},[109,2984,808],{"class":126},[109,2986,2987,2989,2991,2994,2996],{"class":111,"line":218},[109,2988,1058],{"class":126},[109,2990,2822],{"class":122},[109,2992,2993],{"class":278},"\"小于等于600\"",[109,2995,275],{"class":122},[109,2997,1068],{"class":126},[109,2999,3000],{"class":111,"line":223},[109,3001,742],{"class":126},[109,3003,3004],{"class":111,"line":229},[109,3005,3006],{"class":122},"else\n",[109,3008,3009],{"class":111,"line":244},[109,3010,808],{"class":126},[109,3012,3013,3015,3017,3020,3022],{"class":111,"line":258},[109,3014,1058],{"class":126},[109,3016,2822],{"class":122},[109,3018,3019],{"class":278},"\"大于600\"",[109,3021,2822],{"class":122},[109,3023,1068],{"class":126},[109,3025,3026],{"class":111,"line":263},[109,3027,742],{"class":126},[109,3029,3030],{"class":111,"line":269},[109,3031,3032],{"class":115},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[109,3034,3035,3037,3039,3041,3043,3046,3048,3050],{"class":111,"line":304},[109,3036,2922],{"class":122},[109,3038,285],{"class":126},[109,3040,1314],{"class":133},[109,3042,1320],{"class":122},[109,3044,3045],{"class":126},"num",[109,3047,1320],{"class":122},[109,3049,1351],{"class":133},[109,3051,1330],{"class":126},[109,3053,3054],{"class":111,"line":331},[109,3055,808],{"class":126},[109,3057,3058,3060,3062,3065,3067],{"class":111,"line":336},[109,3059,1058],{"class":126},[109,3061,275],{"class":122},[109,3063,3064],{"class":278},"\"小于100\"",[109,3066,275],{"class":122},[109,3068,1068],{"class":126},[109,3070,3071],{"class":111,"line":364},[109,3072,742],{"class":126},[109,3074,3075,3078,3081,3084,3087,3089,3092,3094,3096,3099],{"class":111,"line":391},[109,3076,3077],{"class":122},"else",[109,3079,3080],{"class":122}," if",[109,3082,3083],{"class":126}," (nmu",[109,3085,3086],{"class":122},">=",[109,3088,1351],{"class":133},[109,3090,3091],{"class":122},"&&",[109,3093,3045],{"class":126},[109,3095,1320],{"class":122},[109,3097,3098],{"class":133},"200",[109,3100,1330],{"class":126},[109,3102,3103],{"class":111,"line":396},[109,3104,808],{"class":126},[109,3106,3107,3109,3111,3114,3116,3118],{"class":111,"line":402},[109,3108,1058],{"class":126},[109,3110,275],{"class":122},[109,3112,3113],{"class":278},"\"不小于100且小于200\"",[109,3115,275],{"class":122},[109,3117,2635],{"class":126},[109,3119,3120],{"class":115}," \u002F\u002F可以无限else if,python中是elif：\n",[109,3122,3123],{"class":111,"line":419},[109,3124,742],{"class":126},[109,3126,3127],{"class":111,"line":435},[109,3128,3006],{"class":122},[109,3130,3131],{"class":111,"line":440},[109,3132,808],{"class":126},[109,3134,3135,3137,3139,3142,3144],{"class":111,"line":467},[109,3136,1058],{"class":126},[109,3138,275],{"class":122},[109,3140,3141],{"class":278},"\"不小于200\"",[109,3143,275],{"class":122},[109,3145,1068],{"class":126},[109,3147,3148],{"class":111,"line":494},[109,3149,742],{"class":126},[109,3151,3152],{"class":111,"line":499},[109,3153,3154],{"class":115},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[765,3156,3157],{"start":119},[30,3158,3159],{},"三目运算符",[99,3161,3163],{"className":101,"code":3162,"language":103,"meta":104,"style":104},"\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",[106,3164,3165,3170,3175,3201,3223,3240,3245,3268,3283],{"__ignoreMap":104},[109,3166,3167],{"class":111,"line":112},[109,3168,3169],{"class":115},"\u002F\u002F创建三个变量a,b,c\n",[109,3171,3172],{"class":111,"line":119},[109,3173,3174],{"class":115},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[109,3176,3177,3179,3181,3183,3185,3188,3190,3192,3195,3197,3199],{"class":111,"line":140},[109,3178,123],{"class":122},[109,3180,2791],{"class":126},[109,3182,130],{"class":122},[109,3184,2232],{"class":133},[109,3186,3187],{"class":126},",b",[109,3189,130],{"class":122},[109,3191,1008],{"class":133},[109,3193,3194],{"class":126},",c",[109,3196,130],{"class":122},[109,3198,1314],{"class":133},[109,3200,137],{"class":126},[109,3202,3203,3205,3207,3210,3212,3214,3216,3218,3220],{"class":111,"line":154},[109,3204,1826],{"class":126},[109,3206,130],{"class":122},[109,3208,3209],{"class":126},"(a",[109,3211,2490],{"class":122},[109,3213,1801],{"class":126},[109,3215,2516],{"class":122},[109,3217,1776],{"class":126},[109,3219,2391],{"class":122},[109,3221,3222],{"class":126},"b)\n",[109,3224,3225,3227,3229,3232,3234,3236,3238],{"class":111,"line":161},[109,3226,2762],{"class":126},[109,3228,275],{"class":122},[109,3230,3231],{"class":278},"\"c=\"",[109,3233,275],{"class":122},[109,3235,1826],{"class":126},[109,3237,275],{"class":122},[109,3239,1068],{"class":126},[109,3241,3242],{"class":111,"line":167},[109,3243,3244],{"class":115},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[109,3246,3247,3249,3251,3253,3255,3257,3259,3262,3264,3266],{"class":111,"line":185},[109,3248,3209],{"class":126},[109,3250,2490],{"class":122},[109,3252,1801],{"class":126},[109,3254,2516],{"class":122},[109,3256,1776],{"class":126},[109,3258,2391],{"class":122},[109,3260,3261],{"class":126},"b)",[109,3263,130],{"class":122},[109,3265,1351],{"class":133},[109,3267,137],{"class":126},[109,3269,3270,3272,3274,3276,3278,3280],{"class":111,"line":201},[109,3271,2762],{"class":126},[109,3273,275],{"class":122},[109,3275,1776],{"class":126},[109,3277,275],{"class":122},[109,3279,2635],{"class":126},[109,3281,3282],{"class":115}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[109,3284,3285,3287,3289,3291,3293,3295],{"class":111,"line":206},[109,3286,2762],{"class":126},[109,3288,275],{"class":122},[109,3290,1801],{"class":126},[109,3292,275],{"class":122},[109,3294,2635],{"class":126},[109,3296,3297],{"class":115}," \u002F\u002F10   a>b,b还是原值\n",[765,3299,3300],{"start":140},[30,3301,3302],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[99,3304,3306],{"className":101,"code":3305,"language":103,"meta":104,"style":104},"\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",[106,3307,3308,3313,3321,3334,3342,3346,3359,3372,3382,3390,3394,3418,3439,3461,3482,3504,3525,3545,3549],{"__ignoreMap":104},[109,3309,3310],{"class":111,"line":112},[109,3311,3312],{"class":115},"\u002F\u002F案例-电影打分\n",[109,3314,3315,3318],{"class":111,"line":119},[109,3316,3317],{"class":122},"#include",[109,3319,3320],{"class":278},"\u003Ciostream>\n",[109,3322,3323,3326,3329,3332],{"class":111,"line":140},[109,3324,3325],{"class":122},"using",[109,3327,3328],{"class":122}," namespace",[109,3330,3331],{"class":211}," std",[109,3333,137],{"class":126},[109,3335,3336,3338,3340],{"class":111,"line":154},[109,3337,123],{"class":122},[109,3339,212],{"class":211},[109,3341,803],{"class":126},[109,3343,3344],{"class":111,"line":161},[109,3345,808],{"class":126},[109,3347,3348,3350,3353,3355,3357],{"class":111,"line":167},[109,3349,232],{"class":122},[109,3351,3352],{"class":126}," score",[109,3354,130],{"class":122},[109,3356,1314],{"class":133},[109,3358,137],{"class":126},[109,3360,3361,3363,3365,3368,3370],{"class":111,"line":185},[109,3362,1058],{"class":126},[109,3364,275],{"class":122},[109,3366,3367],{"class":278},"\"电影打分：\"",[109,3369,275],{"class":122},[109,3371,1068],{"class":126},[109,3373,3374,3377,3379],{"class":111,"line":201},[109,3375,3376],{"class":126},"    cin",[109,3378,2822],{"class":122},[109,3380,3381],{"class":126},"score;\n",[109,3383,3384,3387],{"class":111,"line":206},[109,3385,3386],{"class":122},"    switch",[109,3388,3389],{"class":126},"(score)\n",[109,3391,3392],{"class":111,"line":218},[109,3393,1335],{"class":126},[109,3395,3396,3399,3401,3404,3406,3409,3411,3413,3416],{"class":111,"line":223},[109,3397,3398],{"class":122},"        case",[109,3400,134],{"class":133},[109,3402,3403],{"class":126},":cout",[109,3405,275],{"class":122},[109,3407,3408],{"class":278},"\"经典\"",[109,3410,275],{"class":122},[109,3412,2635],{"class":126},[109,3414,3415],{"class":122},"break",[109,3417,137],{"class":126},[109,3419,3420,3422,3425,3427,3429,3431,3433,3435,3437],{"class":111,"line":229},[109,3421,3398],{"class":122},[109,3423,3424],{"class":133}," 9",[109,3426,3403],{"class":126},[109,3428,275],{"class":122},[109,3430,3408],{"class":278},[109,3432,275],{"class":122},[109,3434,2635],{"class":126},[109,3436,3415],{"class":122},[109,3438,137],{"class":126},[109,3440,3441,3443,3446,3448,3450,3453,3455,3457,3459],{"class":111,"line":244},[109,3442,3398],{"class":122},[109,3444,3445],{"class":133}," 8",[109,3447,3403],{"class":126},[109,3449,275],{"class":122},[109,3451,3452],{"class":278},"\"非常好\"",[109,3454,275],{"class":122},[109,3456,2635],{"class":126},[109,3458,3415],{"class":122},[109,3460,137],{"class":126},[109,3462,3463,3465,3468,3470,3472,3474,3476,3478,3480],{"class":111,"line":258},[109,3464,3398],{"class":122},[109,3466,3467],{"class":133}," 7",[109,3469,3403],{"class":126},[109,3471,275],{"class":122},[109,3473,3452],{"class":278},[109,3475,275],{"class":122},[109,3477,2635],{"class":126},[109,3479,3415],{"class":122},[109,3481,137],{"class":126},[109,3483,3484,3486,3489,3491,3493,3496,3498,3500,3502],{"class":111,"line":263},[109,3485,3398],{"class":122},[109,3487,3488],{"class":133}," 6",[109,3490,3403],{"class":126},[109,3492,275],{"class":122},[109,3494,3495],{"class":278},"\"一般\"",[109,3497,275],{"class":122},[109,3499,2635],{"class":126},[109,3501,3415],{"class":122},[109,3503,137],{"class":126},[109,3505,3506,3508,3511,3513,3515,3517,3519,3521,3523],{"class":111,"line":269},[109,3507,3398],{"class":122},[109,3509,3510],{"class":133}," 5",[109,3512,3403],{"class":126},[109,3514,275],{"class":122},[109,3516,3495],{"class":278},[109,3518,275],{"class":122},[109,3520,2635],{"class":126},[109,3522,3415],{"class":122},[109,3524,137],{"class":126},[109,3526,3527,3530,3532,3534,3537,3539,3541,3543],{"class":111,"line":304},[109,3528,3529],{"class":122},"        default",[109,3531,3403],{"class":126},[109,3533,275],{"class":122},[109,3535,3536],{"class":278},"\"烂片\"",[109,3538,275],{"class":122},[109,3540,2635],{"class":126},[109,3542,3415],{"class":122},[109,3544,137],{"class":126},[109,3546,3547],{"class":111,"line":331},[109,3548,1361],{"class":126},[109,3550,3551],{"class":111,"line":336},[109,3552,742],{"class":126},[19,3554,3555],{},"if和switch区别：",[27,3557,3558,3561],{},[30,3559,3560],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[30,3562,3563],{},"switch优点：结构清晰，执行效率高",[51,3565,3567],{"id":3566},"_162循环结构","1.6.2循环结构",[765,3569,3570],{},[30,3571,3572],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[99,3574,3576],{"className":101,"code":3575,"language":103,"meta":104,"style":104},"\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",[106,3577,3578,3583,3591,3595,3608,3622,3626,3646,3655,3659,3669],{"__ignoreMap":104},[109,3579,3580],{"class":111,"line":112},[109,3581,3582],{"class":115},"\u002F\u002F打印0-9数字\n",[109,3584,3585,3587,3589],{"class":111,"line":119},[109,3586,123],{"class":122},[109,3588,212],{"class":211},[109,3590,803],{"class":126},[109,3592,3593],{"class":111,"line":140},[109,3594,808],{"class":126},[109,3596,3597,3599,3602,3604,3606],{"class":111,"line":154},[109,3598,232],{"class":122},[109,3600,3601],{"class":126}," num",[109,3603,130],{"class":122},[109,3605,1314],{"class":133},[109,3607,137],{"class":126},[109,3609,3610,3613,3616,3618,3620],{"class":111,"line":161},[109,3611,3612],{"class":122},"    while",[109,3614,3615],{"class":126},"(num",[109,3617,1320],{"class":122},[109,3619,1008],{"class":133},[109,3621,1330],{"class":126},[109,3623,3624],{"class":111,"line":167},[109,3625,1335],{"class":126},[109,3627,3628,3631,3634,3636,3638,3640,3643],{"class":111,"line":185},[109,3629,3630],{"class":211},"       std",[109,3632,3633],{"class":126},"::cout",[109,3635,275],{"class":122},[109,3637,3045],{"class":126},[109,3639,275],{"class":122},[109,3641,3642],{"class":211},"std",[109,3644,3645],{"class":126},"::endl;\n",[109,3647,3648,3651,3653],{"class":111,"line":201},[109,3649,3650],{"class":126},"        num",[109,3652,1327],{"class":122},[109,3654,137],{"class":126},[109,3656,3657],{"class":111,"line":206},[109,3658,1361],{"class":126},[109,3660,3661,3663,3665,3667],{"class":111,"line":218},[109,3662,711],{"class":211},[109,3664,714],{"class":126},[109,3666,717],{"class":278},[109,3668,1330],{"class":126},[109,3670,3671],{"class":111,"line":223},[109,3672,742],{"class":126},[19,3674,3675],{},"注意：写好循环条件，避免死循环情况",[99,3677,3679],{"className":101,"code":3678,"language":103,"meta":104,"style":104},"\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",[106,3680,3681,3686,3693,3700,3710,3718,3722,3727,3753,3757,3762,3770,3796,3801,3806,3819,3829,3833,3843,3848,3861,3866,3880,3885,3900,3904,3917,3921,3926,3930,3943,3950,3954,3959,3964,3968],{"__ignoreMap":104},[109,3682,3683],{"class":111,"line":112},[109,3684,3685],{"class":115},"\u002F\u002F循环结构-猜数字\n",[109,3687,3688,3690],{"class":111,"line":119},[109,3689,3317],{"class":122},[109,3691,3692],{"class":278}," \u003Ciostream>\n",[109,3694,3695,3697],{"class":111,"line":140},[109,3696,3317],{"class":122},[109,3698,3699],{"class":278}," \u003Cctime>\n",[109,3701,3702,3704,3706,3708],{"class":111,"line":154},[109,3703,3325],{"class":122},[109,3705,3328],{"class":122},[109,3707,3331],{"class":211},[109,3709,137],{"class":126},[109,3711,3712,3714,3716],{"class":111,"line":161},[109,3713,123],{"class":122},[109,3715,212],{"class":211},[109,3717,803],{"class":126},[109,3719,3720],{"class":111,"line":167},[109,3721,808],{"class":126},[109,3723,3724],{"class":111,"line":185},[109,3725,3726],{"class":115},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[109,3728,3729,3732,3735,3738,3740,3742,3745,3747,3750],{"class":111,"line":201},[109,3730,3731],{"class":211},"    srand",[109,3733,3734],{"class":126},"((",[109,3736,3737],{"class":122},"unsigned",[109,3739,173],{"class":122},[109,3741,290],{"class":126},[109,3743,3744],{"class":211},"time",[109,3746,714],{"class":126},[109,3748,3749],{"class":133},"NULL",[109,3751,3752],{"class":126},"));\n",[109,3754,3755],{"class":111,"line":206},[109,3756,158],{"emptyLinePlaceholder":157},[109,3758,3759],{"class":111,"line":218},[109,3760,3761],{"class":115},"    \u002F\u002F1.系统生成随机数\n",[109,3763,3764,3767],{"class":111,"line":223},[109,3765,3766],{"class":115},"    \u002F\u002Frand()%100",[109,3768,3769],{"class":115}," \u002F\u002F生成0-99的随机数\n",[109,3771,3772,3774,3776,3778,3781,3783,3785,3787,3789,3791,3793],{"class":111,"line":229},[109,3773,232],{"class":122},[109,3775,3601],{"class":126},[109,3777,130],{"class":122},[109,3779,3780],{"class":211},"rand",[109,3782,975],{"class":126},[109,3784,1865],{"class":122},[109,3786,1351],{"class":133},[109,3788,1348],{"class":122},[109,3790,1755],{"class":133},[109,3792,821],{"class":126},[109,3794,3795],{"class":115}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[109,3797,3798],{"class":111,"line":244},[109,3799,3800],{"class":115},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[109,3802,3803],{"class":111,"line":258},[109,3804,3805],{"class":115},"    \u002F\u002F2.玩家猜测\n",[109,3807,3808,3810,3813,3815,3817],{"class":111,"line":263},[109,3809,232],{"class":122},[109,3811,3812],{"class":126}," val",[109,3814,130],{"class":122},[109,3816,1314],{"class":133},[109,3818,137],{"class":126},[109,3820,3821,3823,3825,3827],{"class":111,"line":269},[109,3822,3612],{"class":122},[109,3824,285],{"class":126},[109,3826,1755],{"class":133},[109,3828,1330],{"class":126},[109,3830,3831],{"class":111,"line":304},[109,3832,1335],{"class":126},[109,3834,3835,3838,3840],{"class":111,"line":331},[109,3836,3837],{"class":126},"        cin",[109,3839,2822],{"class":122},[109,3841,3842],{"class":126},"val;\n",[109,3844,3845],{"class":111,"line":336},[109,3846,3847],{"class":115},"        \u002F\u002F3.判断玩家猜测\n",[109,3849,3850,3853,3856,3858],{"class":111,"line":364},[109,3851,3852],{"class":122},"        if",[109,3854,3855],{"class":126},"(val",[109,3857,1320],{"class":122},[109,3859,3860],{"class":126},"num) \n",[109,3862,3863],{"class":111,"line":391},[109,3864,3865],{"class":126},"        {\n",[109,3867,3868,3871,3873,3876,3878],{"class":111,"line":396},[109,3869,3870],{"class":126},"            cout",[109,3872,275],{"class":122},[109,3874,3875],{"class":278},"\"猜小了！\"",[109,3877,275],{"class":122},[109,3879,1068],{"class":126},[109,3881,3882],{"class":111,"line":402},[109,3883,3884],{"class":126},"        }\n",[109,3886,3887,3890,3892,3895,3897],{"class":111,"line":419},[109,3888,3889],{"class":122},"        else",[109,3891,3080],{"class":122},[109,3893,3894],{"class":126}," (val",[109,3896,2490],{"class":122},[109,3898,3899],{"class":126},"num)\n",[109,3901,3902],{"class":111,"line":435},[109,3903,3865],{"class":126},[109,3905,3906,3908,3910,3913,3915],{"class":111,"line":440},[109,3907,3870],{"class":126},[109,3909,275],{"class":122},[109,3911,3912],{"class":278},"\"猜大了！\"",[109,3914,275],{"class":122},[109,3916,1068],{"class":126},[109,3918,3919],{"class":111,"line":467},[109,3920,3884],{"class":126},[109,3922,3923],{"class":111,"line":494},[109,3924,3925],{"class":122},"        else\n",[109,3927,3928],{"class":111,"line":499},[109,3929,3865],{"class":126},[109,3931,3932,3934,3936,3939,3941],{"class":111,"line":526},[109,3933,3870],{"class":126},[109,3935,275],{"class":122},[109,3937,3938],{"class":278},"\"猜对了！\"",[109,3940,275],{"class":122},[109,3942,1068],{"class":126},[109,3944,3945,3948],{"class":111,"line":552},[109,3946,3947],{"class":122},"            break",[109,3949,137],{"class":126},[109,3951,3952],{"class":111,"line":557},[109,3953,3884],{"class":126},[109,3955,3956],{"class":111,"line":584},[109,3957,3958],{"class":115},"        \u002F\u002F猜对 退出游戏\n",[109,3960,3961],{"class":111,"line":611},[109,3962,3963],{"class":115},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[109,3965,3966],{"class":111,"line":616},[109,3967,1361],{"class":126},[109,3969,3970],{"class":111,"line":633},[109,3971,742],{"class":126},[765,3973,3974],{"start":119},[30,3975,3976,3977,3980],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[23,3978,3979],{},"do...while会先执行一次循环语句","，在判断循环语句",[99,3982,3984],{"className":101,"code":3983,"language":103,"meta":104,"style":104},"\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",[106,3985,3986,3991,3999,4003,4015,4023,4027,4044,4051,4055,4067,4077],{"__ignoreMap":104},[109,3987,3988],{"class":111,"line":112},[109,3989,3990],{"class":115},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[109,3992,3993,3995,3997],{"class":111,"line":119},[109,3994,123],{"class":122},[109,3996,212],{"class":211},[109,3998,803],{"class":126},[109,4000,4001],{"class":111,"line":140},[109,4002,808],{"class":126},[109,4004,4005,4007,4009,4011,4013],{"class":111,"line":154},[109,4006,232],{"class":122},[109,4008,3601],{"class":126},[109,4010,130],{"class":122},[109,4012,1314],{"class":133},[109,4014,137],{"class":126},[109,4016,4017,4020],{"class":111,"line":161},[109,4018,4019],{"class":122},"    do",[109,4021,4022],{"class":126}," \n",[109,4024,4025],{"class":111,"line":167},[109,4026,1335],{"class":126},[109,4028,4029,4032,4034,4036,4038,4040,4042],{"class":111,"line":185},[109,4030,4031],{"class":211},"        std",[109,4033,3633],{"class":126},[109,4035,275],{"class":122},[109,4037,3045],{"class":126},[109,4039,275],{"class":122},[109,4041,3642],{"class":211},[109,4043,3645],{"class":126},[109,4045,4046,4048],{"class":111,"line":201},[109,4047,3650],{"class":126},[109,4049,4050],{"class":122},"++\n",[109,4052,4053],{"class":111,"line":206},[109,4054,1361],{"class":126},[109,4056,4057,4059,4061,4063,4065],{"class":111,"line":218},[109,4058,3612],{"class":122},[109,4060,3615],{"class":126},[109,4062,1320],{"class":122},[109,4064,1008],{"class":133},[109,4066,720],{"class":126},[109,4068,4069,4071,4073,4075],{"class":111,"line":223},[109,4070,711],{"class":211},[109,4072,714],{"class":126},[109,4074,717],{"class":278},[109,4076,720],{"class":126},[109,4078,4079],{"class":111,"line":229},[109,4080,742],{"class":126},[19,4082,4083],{},"案例-水仙花数",[19,4085,4086],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4088,4089],{},"例如：1^3+5^3+3^3=153",[19,4091,4092],{},"请用do...while语句，求出所有3位数的水仙花数",[99,4094,4096],{"className":101,"code":4095,"language":103,"meta":104,"style":104},"#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",[106,4097,4098,4104,4114,4122,4126,4131,4143,4149,4153,4158,4174,4190,4206,4221,4240,4255,4303,4307,4319,4323,4331,4335,4349],{"__ignoreMap":104},[109,4099,4100,4102],{"class":111,"line":112},[109,4101,3317],{"class":122},[109,4103,3692],{"class":278},[109,4105,4106,4108,4110,4112],{"class":111,"line":119},[109,4107,3325],{"class":122},[109,4109,3328],{"class":122},[109,4111,3331],{"class":211},[109,4113,137],{"class":126},[109,4115,4116,4118,4120],{"class":111,"line":140},[109,4117,123],{"class":122},[109,4119,212],{"class":211},[109,4121,803],{"class":126},[109,4123,4124],{"class":111,"line":154},[109,4125,808],{"class":126},[109,4127,4128],{"class":111,"line":161},[109,4129,4130],{"class":115},"    \u002F\u002F1.先打印所有三位数字\n",[109,4132,4133,4135,4137,4139,4141],{"class":111,"line":167},[109,4134,232],{"class":122},[109,4136,3601],{"class":126},[109,4138,130],{"class":122},[109,4140,1351],{"class":133},[109,4142,137],{"class":126},[109,4144,4145,4147],{"class":111,"line":185},[109,4146,4019],{"class":122},[109,4148,4022],{"class":126},[109,4150,4151],{"class":111,"line":201},[109,4152,1335],{"class":126},[109,4154,4155],{"class":111,"line":206},[109,4156,4157],{"class":115},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[109,4159,4160,4163,4165,4167,4169,4171],{"class":111,"line":218},[109,4161,4162],{"class":122},"        int",[109,4164,2791],{"class":126},[109,4166,130],{"class":122},[109,4168,1314],{"class":133},[109,4170,821],{"class":126},[109,4172,4173],{"class":115}," \u002F\u002F个位\n",[109,4175,4176,4178,4181,4183,4185,4187],{"class":111,"line":223},[109,4177,4162],{"class":122},[109,4179,4180],{"class":126}," b",[109,4182,130],{"class":122},[109,4184,1314],{"class":133},[109,4186,821],{"class":126},[109,4188,4189],{"class":115}," \u002F\u002F十位\n",[109,4191,4192,4194,4197,4199,4201,4203],{"class":111,"line":229},[109,4193,4162],{"class":122},[109,4195,4196],{"class":126}," c",[109,4198,130],{"class":122},[109,4200,1314],{"class":133},[109,4202,821],{"class":126},[109,4204,4205],{"class":115}," \u002F\u002F百位\n",[109,4207,4208,4211,4213,4215,4217,4219],{"class":111,"line":244},[109,4209,4210],{"class":126},"        a",[109,4212,130],{"class":122},[109,4214,3045],{"class":126},[109,4216,1865],{"class":122},[109,4218,1008],{"class":133},[109,4220,137],{"class":126},[109,4222,4223,4226,4228,4230,4232,4234,4236,4238],{"class":111,"line":258},[109,4224,4225],{"class":126},"        b",[109,4227,130],{"class":122},[109,4229,3045],{"class":126},[109,4231,2116],{"class":122},[109,4233,1008],{"class":133},[109,4235,1865],{"class":122},[109,4237,1008],{"class":133},[109,4239,137],{"class":126},[109,4241,4242,4245,4247,4249,4251,4253],{"class":111,"line":263},[109,4243,4244],{"class":126},"        c",[109,4246,130],{"class":122},[109,4248,3045],{"class":126},[109,4250,2116],{"class":122},[109,4252,1351],{"class":133},[109,4254,137],{"class":126},[109,4256,4257,4259,4261,4263,4265,4267,4269,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4294,4297,4300],{"class":111,"line":269},[109,4258,3852],{"class":122},[109,4260,3209],{"class":126},[109,4262,1988],{"class":122},[109,4264,1776],{"class":126},[109,4266,1988],{"class":122},[109,4268,1776],{"class":126},[109,4270,1348],{"class":122},[109,4272,1801],{"class":126},[109,4274,1988],{"class":122},[109,4276,1801],{"class":126},[109,4278,1988],{"class":122},[109,4280,1801],{"class":126},[109,4282,1348],{"class":122},[109,4284,1826],{"class":126},[109,4286,1988],{"class":122},[109,4288,1826],{"class":126},[109,4290,1988],{"class":122},[109,4292,4293],{"class":126},"c ",[109,4295,4296],{"class":122},"==",[109,4298,4299],{"class":126}," num)",[109,4301,4302],{"class":115}," \u002F\u002F如果是水仙花数，才打印\n",[109,4304,4305],{"class":111,"line":304},[109,4306,3865],{"class":126},[109,4308,4309,4311,4313,4315,4317],{"class":111,"line":331},[109,4310,3870],{"class":126},[109,4312,275],{"class":122},[109,4314,3045],{"class":126},[109,4316,275],{"class":122},[109,4318,1068],{"class":126},[109,4320,4321],{"class":111,"line":336},[109,4322,3884],{"class":126},[109,4324,4325,4327,4329],{"class":111,"line":364},[109,4326,3650],{"class":126},[109,4328,1327],{"class":122},[109,4330,137],{"class":126},[109,4332,4333],{"class":111,"line":391},[109,4334,1361],{"class":126},[109,4336,4337,4339,4342,4344,4347],{"class":111,"line":396},[109,4338,3612],{"class":122},[109,4340,4341],{"class":126}," (num ",[109,4343,1320],{"class":122},[109,4345,4346],{"class":133}," 1000",[109,4348,720],{"class":126},[109,4350,4351],{"class":111,"line":402},[109,4352,742],{"class":126},[765,4354,4355],{"start":140},[30,4356,4357],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[99,4359,4361],{"className":101,"code":4360,"language":103,"meta":104,"style":104},"\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",[106,4362,4363,4368,4395,4399,4411,4415,4420,4431,4438,4442,4456,4460,4467,4471,4483,4492],{"__ignoreMap":104},[109,4364,4365],{"class":111,"line":112},[109,4366,4367],{"class":115},"\u002F\u002F从数字0-9打印\n",[109,4369,4370,4373,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393],{"class":111,"line":119},[109,4371,4372],{"class":122},"for",[109,4374,714],{"class":126},[109,4376,123],{"class":122},[109,4378,1309],{"class":126},[109,4380,130],{"class":122},[109,4382,1314],{"class":133},[109,4384,1317],{"class":126},[109,4386,1320],{"class":122},[109,4388,1008],{"class":133},[109,4390,1317],{"class":126},[109,4392,1327],{"class":122},[109,4394,1330],{"class":126},[109,4396,4397],{"class":111,"line":140},[109,4398,808],{"class":126},[109,4400,4401,4403,4405,4407,4409],{"class":111,"line":154},[109,4402,1058],{"class":126},[109,4404,275],{"class":122},[109,4406,1345],{"class":126},[109,4408,275],{"class":122},[109,4410,1068],{"class":126},[109,4412,4413],{"class":111,"line":161},[109,4414,742],{"class":126},[109,4416,4417],{"class":111,"line":167},[109,4418,4419],{"class":115},"\u002F\u002F上式可以进行拆分\n",[109,4421,4422,4424,4426,4428],{"class":111,"line":185},[109,4423,123],{"class":122},[109,4425,1309],{"class":126},[109,4427,130],{"class":122},[109,4429,4430],{"class":133},"0\n",[109,4432,4433,4435],{"class":111,"line":201},[109,4434,4372],{"class":122},[109,4436,4437],{"class":126},"(;;;)\n",[109,4439,4440],{"class":111,"line":206},[109,4441,808],{"class":126},[109,4443,4444,4447,4450,4452,4454],{"class":111,"line":218},[109,4445,4446],{"class":122},"    if",[109,4448,4449],{"class":126},"(i",[109,4451,3086],{"class":122},[109,4453,1008],{"class":133},[109,4455,1330],{"class":126},[109,4457,4458],{"class":111,"line":223},[109,4459,1335],{"class":126},[109,4461,4462,4465],{"class":111,"line":229},[109,4463,4464],{"class":122},"        break",[109,4466,137],{"class":126},[109,4468,4469],{"class":111,"line":244},[109,4470,1361],{"class":126},[109,4472,4473,4475,4477,4479,4481],{"class":111,"line":258},[109,4474,1058],{"class":126},[109,4476,275],{"class":122},[109,4478,1345],{"class":126},[109,4480,275],{"class":122},[109,4482,1068],{"class":126},[109,4484,4485,4488,4490],{"class":111,"line":263},[109,4486,4487],{"class":126},"    i",[109,4489,1327],{"class":122},[109,4491,137],{"class":126},[109,4493,4494],{"class":111,"line":269},[109,4495,742],{"class":126},[19,4497,4498],{},"小练习",[99,4500,4502],{"className":101,"code":4501,"language":103,"meta":104,"style":104},"#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",[106,4503,4504,4510,4520,4528,4532,4537,4542,4569,4573,4578,4583,4624,4628,4641,4645,4649,4653,4665,4669,4673],{"__ignoreMap":104},[109,4505,4506,4508],{"class":111,"line":112},[109,4507,3317],{"class":122},[109,4509,3320],{"class":278},[109,4511,4512,4514,4516,4518],{"class":111,"line":119},[109,4513,3325],{"class":122},[109,4515,3328],{"class":122},[109,4517,3331],{"class":211},[109,4519,137],{"class":126},[109,4521,4522,4524,4526],{"class":111,"line":140},[109,4523,123],{"class":122},[109,4525,212],{"class":211},[109,4527,803],{"class":126},[109,4529,4530],{"class":111,"line":154},[109,4531,808],{"class":126},[109,4533,4534],{"class":111,"line":161},[109,4535,4536],{"class":115},"    \u002F\u002F敲桌子案例\n",[109,4538,4539],{"class":111,"line":167},[109,4540,4541],{"class":115},"    \u002F\u002F1.先输出1-100的数字\n",[109,4543,4544,4546,4548,4550,4552,4554,4556,4559,4561,4563,4565,4567],{"class":111,"line":185},[109,4545,1302],{"class":122},[109,4547,714],{"class":126},[109,4549,123],{"class":122},[109,4551,1309],{"class":126},[109,4553,130],{"class":122},[109,4555,1755],{"class":133},[109,4557,4558],{"class":126},"; i",[109,4560,2976],{"class":122},[109,4562,1351],{"class":133},[109,4564,4558],{"class":126},[109,4566,1327],{"class":122},[109,4568,1330],{"class":126},[109,4570,4571],{"class":111,"line":201},[109,4572,1335],{"class":126},[109,4574,4575],{"class":111,"line":206},[109,4576,4577],{"class":115},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[109,4579,4580],{"class":111,"line":218},[109,4581,4582],{"class":115},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[109,4584,4585,4587,4589,4591,4593,4595,4597,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620,4622],{"class":111,"line":223},[109,4586,3852],{"class":122},[109,4588,4449],{"class":126},[109,4590,1865],{"class":122},[109,4592,1905],{"class":133},[109,4594,4296],{"class":122},[109,4596,1314],{"class":133},[109,4598,4599],{"class":122}," ||",[109,4601,1309],{"class":126},[109,4603,1865],{"class":122},[109,4605,1008],{"class":133},[109,4607,4296],{"class":122},[109,4609,1905],{"class":133},[109,4611,4599],{"class":122},[109,4613,1309],{"class":126},[109,4615,2116],{"class":122},[109,4617,1008],{"class":133},[109,4619,4296],{"class":122},[109,4621,1905],{"class":133},[109,4623,1330],{"class":126},[109,4625,4626],{"class":111,"line":229},[109,4627,3865],{"class":126},[109,4629,4630,4632,4634,4637,4639],{"class":111,"line":244},[109,4631,3870],{"class":126},[109,4633,275],{"class":122},[109,4635,4636],{"class":278},"\"敲桌子\"",[109,4638,275],{"class":122},[109,4640,1068],{"class":126},[109,4642,4643],{"class":111,"line":258},[109,4644,3884],{"class":126},[109,4646,4647],{"class":111,"line":263},[109,4648,3925],{"class":122},[109,4650,4651],{"class":111,"line":269},[109,4652,3865],{"class":126},[109,4654,4655,4657,4659,4661,4663],{"class":111,"line":304},[109,4656,3870],{"class":126},[109,4658,275],{"class":122},[109,4660,1345],{"class":126},[109,4662,275],{"class":122},[109,4664,1068],{"class":126},[109,4666,4667],{"class":111,"line":331},[109,4668,3884],{"class":126},[109,4670,4671],{"class":111,"line":336},[109,4672,1361],{"class":126},[109,4674,4675],{"class":111,"line":364},[109,4676,742],{"class":126},[19,4678,4679],{},"嵌套实现星图",[99,4681,4683],{"className":101,"code":4682,"language":103,"meta":104,"style":104},"#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",[106,4684,4685,4691,4701,4709,4713,4739,4743,4772,4776,4787,4791,4799,4803],{"__ignoreMap":104},[109,4686,4687,4689],{"class":111,"line":112},[109,4688,3317],{"class":122},[109,4690,3320],{"class":278},[109,4692,4693,4695,4697,4699],{"class":111,"line":119},[109,4694,3325],{"class":122},[109,4696,3328],{"class":122},[109,4698,3331],{"class":211},[109,4700,137],{"class":126},[109,4702,4703,4705,4707],{"class":111,"line":140},[109,4704,123],{"class":122},[109,4706,212],{"class":211},[109,4708,803],{"class":126},[109,4710,4711],{"class":111,"line":154},[109,4712,808],{"class":126},[109,4714,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737],{"class":111,"line":161},[109,4716,1302],{"class":122},[109,4718,285],{"class":126},[109,4720,123],{"class":122},[109,4722,1309],{"class":126},[109,4724,130],{"class":122},[109,4726,1314],{"class":133},[109,4728,1317],{"class":126},[109,4730,1320],{"class":122},[109,4732,1008],{"class":133},[109,4734,1317],{"class":126},[109,4736,1327],{"class":122},[109,4738,1330],{"class":126},[109,4740,4741],{"class":111,"line":167},[109,4742,1335],{"class":126},[109,4744,4745,4748,4750,4752,4755,4757,4759,4762,4764,4766,4768,4770],{"class":111,"line":185},[109,4746,4747],{"class":122},"        for",[109,4749,285],{"class":126},[109,4751,123],{"class":122},[109,4753,4754],{"class":126}," j",[109,4756,130],{"class":122},[109,4758,1314],{"class":133},[109,4760,4761],{"class":126},";j",[109,4763,1320],{"class":122},[109,4765,1008],{"class":133},[109,4767,4761],{"class":126},[109,4769,1327],{"class":122},[109,4771,1330],{"class":126},[109,4773,4774],{"class":111,"line":201},[109,4775,3865],{"class":126},[109,4777,4778,4780,4782,4785],{"class":111,"line":206},[109,4779,3870],{"class":126},[109,4781,275],{"class":122},[109,4783,4784],{"class":278},"\"*\"",[109,4786,137],{"class":126},[109,4788,4789],{"class":111,"line":218},[109,4790,3884],{"class":126},[109,4792,4793,4795,4797],{"class":111,"line":223},[109,4794,1396],{"class":126},[109,4796,275],{"class":122},[109,4798,1068],{"class":126},[109,4800,4801],{"class":111,"line":229},[109,4802,1361],{"class":126},[109,4804,4805],{"class":111,"line":244},[109,4806,742],{"class":126},[19,4808,4809],{},"乘法口诀表",[99,4811,4813],{"className":101,"code":4812,"language":103,"meta":104,"style":104},"#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",[106,4814,4815,4821,4831,4839,4843,4869,4873,4898,4902,4942,4946,4954,4958],{"__ignoreMap":104},[109,4816,4817,4819],{"class":111,"line":112},[109,4818,3317],{"class":122},[109,4820,3692],{"class":278},[109,4822,4823,4825,4827,4829],{"class":111,"line":119},[109,4824,3325],{"class":122},[109,4826,3328],{"class":122},[109,4828,3331],{"class":211},[109,4830,137],{"class":126},[109,4832,4833,4835,4837],{"class":111,"line":140},[109,4834,123],{"class":122},[109,4836,212],{"class":211},[109,4838,803],{"class":126},[109,4840,4841],{"class":111,"line":154},[109,4842,808],{"class":126},[109,4844,4845,4847,4849,4851,4853,4855,4857,4859,4861,4863,4865,4867],{"class":111,"line":161},[109,4846,1302],{"class":122},[109,4848,714],{"class":126},[109,4850,123],{"class":122},[109,4852,1309],{"class":126},[109,4854,130],{"class":122},[109,4856,1755],{"class":133},[109,4858,1317],{"class":126},[109,4860,1320],{"class":122},[109,4862,1008],{"class":133},[109,4864,1317],{"class":126},[109,4866,1327],{"class":122},[109,4868,1330],{"class":126},[109,4870,4871],{"class":111,"line":167},[109,4872,1335],{"class":126},[109,4874,4875,4877,4879,4881,4883,4885,4887,4889,4891,4894,4896],{"class":111,"line":185},[109,4876,4747],{"class":122},[109,4878,714],{"class":126},[109,4880,123],{"class":122},[109,4882,4754],{"class":126},[109,4884,130],{"class":122},[109,4886,1755],{"class":133},[109,4888,4761],{"class":126},[109,4890,2976],{"class":122},[109,4892,4893],{"class":126},"i;j",[109,4895,1327],{"class":122},[109,4897,1330],{"class":126},[109,4899,4900],{"class":111,"line":201},[109,4901,3865],{"class":126},[109,4903,4904,4906,4908,4910,4912,4914,4916,4918,4920,4923,4925,4927,4929,4931,4933,4936,4938,4940],{"class":111,"line":206},[109,4905,3870],{"class":126},[109,4907,275],{"class":122},[109,4909,2000],{"class":126},[109,4911,275],{"class":122},[109,4913,4784],{"class":278},[109,4915,275],{"class":122},[109,4917,1345],{"class":126},[109,4919,275],{"class":122},[109,4921,4922],{"class":278},"\"=\"",[109,4924,275],{"class":122},[109,4926,1345],{"class":126},[109,4928,1988],{"class":122},[109,4930,2000],{"class":126},[109,4932,275],{"class":122},[109,4934,4935],{"class":278},"'",[109,4937,2627],{"class":133},[109,4939,4935],{"class":278},[109,4941,137],{"class":126},[109,4943,4944],{"class":111,"line":218},[109,4945,3884],{"class":126},[109,4947,4948,4950,4952],{"class":111,"line":223},[109,4949,1396],{"class":126},[109,4951,275],{"class":122},[109,4953,1068],{"class":126},[109,4955,4956],{"class":111,"line":229},[109,4957,1361],{"class":126},[109,4959,4960],{"class":111,"line":244},[109,4961,742],{"class":126},[51,4963,4965],{"id":4964},"_163跳出语句","1.6.3跳出语句",[765,4967,4968],{},[30,4969,4970],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4972,4973],{},"break使用时机：",[27,4975,4976,4979,4982],{},[30,4977,4978],{},"出现在switch条件语句中，作用是终止case并跳出switch",[30,4980,4981],{},"出现在循环结构中，作用是跳出当前的循环结构",[30,4983,4984],{},"出现在嵌套循环中，跳出最近的内层循环语句",[765,4986,4987,4990],{"start":119},[30,4988,4989],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[30,4991,4992],{},"goto语句\n语法：goto 标记;",[19,4994,4995],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[99,4997,4999],{"className":101,"code":4998,"language":103,"meta":104,"style":104},"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",[106,5000,5001,5009,5013,5026,5036,5049,5062,5075,5083,5099],{"__ignoreMap":104},[109,5002,5003,5005,5007],{"class":111,"line":112},[109,5004,123],{"class":122},[109,5006,212],{"class":211},[109,5008,803],{"class":126},[109,5010,5011],{"class":111,"line":119},[109,5012,808],{"class":126},[109,5014,5015,5017,5019,5022,5024],{"class":111,"line":140},[109,5016,1058],{"class":126},[109,5018,275],{"class":122},[109,5020,5021],{"class":278},"\"1\"",[109,5023,275],{"class":122},[109,5025,1068],{"class":126},[109,5027,5028,5031,5034],{"class":111,"line":154},[109,5029,5030],{"class":122},"    goto",[109,5032,5033],{"class":211}," FLAG",[109,5035,137],{"class":126},[109,5037,5038,5040,5042,5045,5047],{"class":111,"line":161},[109,5039,1058],{"class":126},[109,5041,275],{"class":122},[109,5043,5044],{"class":278},"\"2\"",[109,5046,275],{"class":122},[109,5048,1068],{"class":126},[109,5050,5051,5053,5055,5058,5060],{"class":111,"line":167},[109,5052,1058],{"class":126},[109,5054,275],{"class":122},[109,5056,5057],{"class":278},"\"3\"",[109,5059,275],{"class":122},[109,5061,1068],{"class":126},[109,5063,5064,5066,5068,5071,5073],{"class":111,"line":185},[109,5065,1058],{"class":126},[109,5067,275],{"class":122},[109,5069,5070],{"class":278},"\"4\"",[109,5072,275],{"class":122},[109,5074,1068],{"class":126},[109,5076,5077,5080],{"class":111,"line":201},[109,5078,5079],{"class":211},"    FLAG",[109,5081,5082],{"class":126},":\n",[109,5084,5085,5087,5089,5092,5094,5096],{"class":111,"line":206},[109,5086,1058],{"class":126},[109,5088,275],{"class":122},[109,5090,5091],{"class":278},"\"5\"",[109,5093,275],{"class":122},[109,5095,2635],{"class":126},[109,5097,5098],{"class":115},"\u002F\u002F跳过了2,3,4,直接到5\n",[109,5100,5101],{"class":111,"line":218},[109,5102,742],{"class":126},[14,5104,5106],{"id":5105},"_17数组","1.7数组",[51,5108,5110],{"id":5109},"_171一维数组","1.7.1一维数组",[765,5112,5113],{},[30,5114,5115],{},"一维数组定义方式",[1677,5117,5118,5128],{},[1680,5119,5120],{},[1683,5121,5122,5125],{},[1686,5123,5124],{},"方式",[1686,5126,5127],{},"注意事项",[1723,5129,5130,5144,5154],{},[1683,5131,5132,5138],{},[1728,5133,5134,5135,821],{},"数据类型 数组名",[109,5136,5137],{},"数组长度",[1728,5139,5140,5141,5143],{},"这种方式是先定义再arr",[109,5142,1345],{},"赋值",[1683,5145,5146,5151],{},[1728,5147,5134,5148,5150],{},[109,5149,5137],{},"={值1,值2....};",[1728,5152,5153],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1683,5155,5156,5160],{},[1728,5157,5134,5158,5150],{},[109,5159],{},[1728,5161,5162,5163,5165],{},"int arr",[109,5164],{},";这是不正确的，按照这样的方式定义必须有初始长度",[765,5167,5168],{"start":119},[30,5169,5170],{},"一维数组数组名\n用途：",[27,5172,5173],{},[30,5174,5175],{},"1.可以统计整个数组在内存中的长度：",[99,5177,5179],{"className":101,"code":5178,"language":103,"meta":104,"style":104},"sizeof(arr);\nsizeof(arr[0]);\n",[106,5180,5181,5188],{"__ignoreMap":104},[109,5182,5183,5185],{"class":111,"line":112},[109,5184,1545],{"class":122},[109,5186,5187],{"class":126},"(arr);\n",[109,5189,5190,5192,5195,5197],{"class":111,"line":119},[109,5191,1545],{"class":122},[109,5193,5194],{"class":126},"(arr[",[109,5196,1314],{"class":133},[109,5198,5199],{"class":126},"]);\n",[27,5201,5202],{},[30,5203,5204],{},"2.可以获取数组在内存中的首地址:",[99,5206,5208],{"className":101,"code":5207,"language":103,"meta":104,"style":104},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[106,5209,5210,5215,5227,5232],{"__ignoreMap":104},[109,5211,5212],{"class":111,"line":112},[109,5213,5214],{"class":115},"\u002F\u002F查看16进制的首地址\n",[109,5216,5217,5219,5221,5223,5225],{"class":111,"line":119},[109,5218,2762],{"class":126},[109,5220,275],{"class":122},[109,5222,1282],{"class":126},[109,5224,275],{"class":122},[109,5226,1068],{"class":126},[109,5228,5229],{"class":111,"line":140},[109,5230,5231],{"class":115},"\u002F\u002F看10进制数\n",[109,5233,5234,5236,5238,5240,5242,5244,5246,5249,5251,5253,5255],{"class":111,"line":154},[109,5235,2762],{"class":126},[109,5237,275],{"class":122},[109,5239,714],{"class":126},[109,5241,123],{"class":122},[109,5243,290],{"class":126},[109,5245,293],{"class":122},[109,5247,5248],{"class":126},"arr[",[109,5250,1314],{"class":133},[109,5252,2470],{"class":126},[109,5254,275],{"class":122},[109,5256,1068],{"class":126},[19,5258,5259],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[27,5261,5262],{},[30,5263,5264],{},"1️⃣五只小猪称体重",[99,5266,5268],{"className":101,"code":5267,"language":103,"meta":104,"style":104},"#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",[106,5269,5270,5276,5286,5294,5298,5338,5351,5377,5381,5393,5397,5407,5411,5415,5428,5436],{"__ignoreMap":104},[109,5271,5272,5274],{"class":111,"line":112},[109,5273,3317],{"class":122},[109,5275,3320],{"class":278},[109,5277,5278,5280,5282,5284],{"class":111,"line":119},[109,5279,3325],{"class":122},[109,5281,3328],{"class":122},[109,5283,3331],{"class":211},[109,5285,137],{"class":126},[109,5287,5288,5290,5292],{"class":111,"line":140},[109,5289,123],{"class":122},[109,5291,212],{"class":211},[109,5293,803],{"class":126},[109,5295,5296],{"class":111,"line":154},[109,5297,808],{"class":126},[109,5299,5300,5302,5305,5307,5309,5311,5313,5316,5318,5321,5323,5325,5327,5330,5332,5335],{"class":111,"line":161},[109,5301,232],{"class":122},[109,5303,5304],{"class":126}," arr[",[109,5306,1856],{"class":133},[109,5308,2470],{"class":126},[109,5310,130],{"class":122},[109,5312,2427],{"class":126},[109,5314,5315],{"class":133},"300",[109,5317,1914],{"class":126},[109,5319,5320],{"class":133},"350",[109,5322,1914],{"class":126},[109,5324,3098],{"class":133},[109,5326,1914],{"class":126},[109,5328,5329],{"class":133},"400",[109,5331,1914],{"class":126},[109,5333,5334],{"class":133},"250",[109,5336,5337],{"class":126},"};\n",[109,5339,5340,5342,5345,5347,5349],{"class":111,"line":167},[109,5341,232],{"class":122},[109,5343,5344],{"class":126}," tmp",[109,5346,130],{"class":122},[109,5348,1314],{"class":133},[109,5350,137],{"class":126},[109,5352,5353,5355,5357,5359,5361,5363,5365,5367,5369,5371,5373,5375],{"class":111,"line":185},[109,5354,1302],{"class":122},[109,5356,285],{"class":126},[109,5358,123],{"class":122},[109,5360,1309],{"class":126},[109,5362,130],{"class":122},[109,5364,1314],{"class":133},[109,5366,1317],{"class":126},[109,5368,1320],{"class":122},[109,5370,1856],{"class":133},[109,5372,1317],{"class":126},[109,5374,1327],{"class":122},[109,5376,1330],{"class":126},[109,5378,5379],{"class":111,"line":201},[109,5380,1335],{"class":126},[109,5382,5383,5385,5388,5390],{"class":111,"line":206},[109,5384,3852],{"class":122},[109,5386,5387],{"class":126},"(tmp",[109,5389,1320],{"class":122},[109,5391,5392],{"class":126},"arr[i])\n",[109,5394,5395],{"class":111,"line":218},[109,5396,3865],{"class":126},[109,5398,5399,5402,5404],{"class":111,"line":223},[109,5400,5401],{"class":126},"            tmp",[109,5403,130],{"class":122},[109,5405,5406],{"class":126},"arr[i];\n",[109,5408,5409],{"class":111,"line":229},[109,5410,3884],{"class":126},[109,5412,5413],{"class":111,"line":244},[109,5414,1361],{"class":126},[109,5416,5417,5419,5421,5424,5426],{"class":111,"line":258},[109,5418,1058],{"class":126},[109,5420,275],{"class":122},[109,5422,5423],{"class":126},"tmp",[109,5425,275],{"class":122},[109,5427,1068],{"class":126},[109,5429,5430,5432,5434],{"class":111,"line":263},[109,5431,731],{"class":122},[109,5433,734],{"class":133},[109,5435,137],{"class":126},[109,5437,5438],{"class":111,"line":269},[109,5439,742],{"class":126},[27,5441,5442],{},[30,5443,5444],{},"2️⃣数组元素逆置",[99,5446,5448],{"className":101,"code":5447,"language":103,"meta":104,"style":104},"\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",[106,5449,5450,5455,5461,5471,5479,5483,5517,5533,5565,5578,5583,5588,5600,5610,5620,5625,5634,5644,5649,5654,5681,5685,5700,5704,5715,5723],{"__ignoreMap":104},[109,5451,5452],{"class":111,"line":112},[109,5453,5454],{"class":115},"\u002F\u002F元素逆置\n",[109,5456,5457,5459],{"class":111,"line":119},[109,5458,3317],{"class":122},[109,5460,3320],{"class":278},[109,5462,5463,5465,5467,5469],{"class":111,"line":140},[109,5464,3325],{"class":122},[109,5466,3328],{"class":122},[109,5468,3331],{"class":211},[109,5470,137],{"class":126},[109,5472,5473,5475,5477],{"class":111,"line":154},[109,5474,123],{"class":122},[109,5476,212],{"class":211},[109,5478,803],{"class":126},[109,5480,5481],{"class":111,"line":161},[109,5482,808],{"class":126},[109,5484,5485,5487,5489,5491,5493,5495,5497,5499,5501,5503,5505,5507,5509,5511,5513,5515],{"class":111,"line":167},[109,5486,992],{"class":122},[109,5488,5304],{"class":126},[109,5490,1856],{"class":133},[109,5492,2470],{"class":126},[109,5494,130],{"class":122},[109,5496,2427],{"class":126},[109,5498,1755],{"class":133},[109,5500,1914],{"class":126},[109,5502,1618],{"class":133},[109,5504,1914],{"class":126},[109,5506,1612],{"class":133},[109,5508,1914],{"class":126},[109,5510,1831],{"class":133},[109,5512,1914],{"class":126},[109,5514,1856],{"class":133},[109,5516,5337],{"class":126},[109,5518,5519,5521,5524,5526,5528,5530],{"class":111,"line":185},[109,5520,992],{"class":122},[109,5522,5523],{"class":126}," start",[109,5525,130],{"class":122},[109,5527,1314],{"class":133},[109,5529,821],{"class":126},[109,5531,5532],{"class":115},"\u002F\u002F起始下标\n",[109,5534,5535,5537,5540,5543,5546,5549,5551,5553,5556,5558,5560,5562],{"class":111,"line":201},[109,5536,992],{"class":122},[109,5538,5539],{"class":126}," end",[109,5541,5542],{"class":122},"=sizeof",[109,5544,5545],{"class":126},"(arr)",[109,5547,5548],{"class":122},"\u002Fsizeof",[109,5550,5194],{"class":126},[109,5552,1314],{"class":133},[109,5554,5555],{"class":126},"])",[109,5557,2064],{"class":122},[109,5559,1755],{"class":133},[109,5561,821],{"class":126},[109,5563,5564],{"class":115},"\u002F\u002F结束下标\n",[109,5566,5567,5570,5573,5575],{"class":111,"line":206},[109,5568,5569],{"class":122},"   while",[109,5571,5572],{"class":126}," (start",[109,5574,1320],{"class":122},[109,5576,5577],{"class":126},"end)\n",[109,5579,5580],{"class":111,"line":218},[109,5581,5582],{"class":126},"   {\n",[109,5584,5585],{"class":111,"line":223},[109,5586,5587],{"class":115},"    \u002F\u002F实现元素互换代码\n",[109,5589,5590,5592,5595,5597],{"class":111,"line":229},[109,5591,232],{"class":122},[109,5593,5594],{"class":126}," temp",[109,5596,130],{"class":122},[109,5598,5599],{"class":126},"arr[start];\n",[109,5601,5602,5605,5607],{"class":111,"line":244},[109,5603,5604],{"class":126},"    arr[start]",[109,5606,130],{"class":122},[109,5608,5609],{"class":126},"arr[end];\n",[109,5611,5612,5615,5617],{"class":111,"line":258},[109,5613,5614],{"class":126},"    arr[end]",[109,5616,130],{"class":122},[109,5618,5619],{"class":126},"temp;\n",[109,5621,5622],{"class":111,"line":263},[109,5623,5624],{"class":115},"    \u002F\u002F下标更新\n",[109,5626,5627,5630,5632],{"class":111,"line":269},[109,5628,5629],{"class":126},"    start",[109,5631,1327],{"class":122},[109,5633,137],{"class":126},[109,5635,5636,5639,5642],{"class":111,"line":304},[109,5637,5638],{"class":126},"    end",[109,5640,5641],{"class":122},"--",[109,5643,137],{"class":126},[109,5645,5646],{"class":111,"line":331},[109,5647,5648],{"class":126},"   }\n",[109,5650,5651],{"class":111,"line":336},[109,5652,5653],{"class":115},"   \u002F\u002F输出逆置后的数组\n",[109,5655,5656,5659,5661,5663,5665,5667,5669,5671,5673,5675,5677,5679],{"class":111,"line":364},[109,5657,5658],{"class":122},"   for",[109,5660,285],{"class":126},[109,5662,123],{"class":122},[109,5664,1309],{"class":126},[109,5666,130],{"class":122},[109,5668,1314],{"class":133},[109,5670,1317],{"class":126},[109,5672,1320],{"class":122},[109,5674,1856],{"class":133},[109,5676,1317],{"class":126},[109,5678,1327],{"class":122},[109,5680,1330],{"class":126},[109,5682,5683],{"class":111,"line":391},[109,5684,5582],{"class":126},[109,5686,5687,5689,5691,5693,5695,5698],{"class":111,"line":396},[109,5688,1058],{"class":126},[109,5690,275],{"class":122},[109,5692,1401],{"class":126},[109,5694,275],{"class":122},[109,5696,5697],{"class":278},"\" \"",[109,5699,137],{"class":126},[109,5701,5702],{"class":111,"line":402},[109,5703,5648],{"class":126},[109,5705,5706,5709,5711,5713],{"class":111,"line":419},[109,5707,5708],{"class":211},"   system",[109,5710,714],{"class":126},[109,5712,717],{"class":278},[109,5714,720],{"class":126},[109,5716,5717,5719,5721],{"class":111,"line":435},[109,5718,1015],{"class":122},[109,5720,734],{"class":133},[109,5722,137],{"class":126},[109,5724,5725],{"class":111,"line":440},[109,5726,742],{"class":126},[27,5728,5729],{},[30,5730,5731],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[99,5733,5735],{"className":101,"code":5734,"language":103,"meta":104,"style":104},"\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",[106,5736,5737,5742,5748,5758,5766,5770,5822,5835,5861,5865,5879,5883,5888,5893,5923,5927,5932,5966,5970,5975,5995,6000,6012,6028,6043,6048,6052,6056,6069,6095,6099,6113,6117,6125],{"__ignoreMap":104},[109,5738,5739],{"class":111,"line":112},[109,5740,5741],{"class":115},"\u002F\u002F冒泡排序,升序\n",[109,5743,5744,5746],{"class":111,"line":119},[109,5745,3317],{"class":122},[109,5747,3320],{"class":278},[109,5749,5750,5752,5754,5756],{"class":111,"line":140},[109,5751,3325],{"class":122},[109,5753,3328],{"class":122},[109,5755,3331],{"class":211},[109,5757,137],{"class":126},[109,5759,5760,5762,5764],{"class":111,"line":154},[109,5761,123],{"class":122},[109,5763,212],{"class":211},[109,5765,803],{"class":126},[109,5767,5768],{"class":111,"line":161},[109,5769,808],{"class":126},[109,5771,5772,5774,5776,5778,5781,5783,5786,5788,5790,5792,5794,5796,5798,5800,5802,5804,5806,5808,5810,5812,5814,5816,5818,5820],{"class":111,"line":167},[109,5773,232],{"class":122},[109,5775,5304],{"class":126},[109,5777,1956],{"class":133},[109,5779,5780],{"class":126},"] ",[109,5782,130],{"class":122},[109,5784,5785],{"class":126}," {",[109,5787,1831],{"class":133},[109,5789,1914],{"class":126},[109,5791,1618],{"class":133},[109,5793,1914],{"class":126},[109,5795,1931],{"class":133},[109,5797,1914],{"class":126},[109,5799,1314],{"class":133},[109,5801,1914],{"class":126},[109,5803,1856],{"class":133},[109,5805,1914],{"class":126},[109,5807,1905],{"class":133},[109,5809,1914],{"class":126},[109,5811,1755],{"class":133},[109,5813,1914],{"class":126},[109,5815,1612],{"class":133},[109,5817,1914],{"class":126},[109,5819,1956],{"class":133},[109,5821,5337],{"class":126},[109,5823,5824,5826,5828,5831,5833],{"class":111,"line":185},[109,5825,1058],{"class":126},[109,5827,275],{"class":122},[109,5829,5830],{"class":278},"\"排序前：\"",[109,5832,275],{"class":122},[109,5834,1068],{"class":126},[109,5836,5837,5839,5841,5843,5845,5847,5849,5851,5853,5855,5857,5859],{"class":111,"line":201},[109,5838,1302],{"class":122},[109,5840,285],{"class":126},[109,5842,123],{"class":122},[109,5844,1309],{"class":126},[109,5846,130],{"class":122},[109,5848,1314],{"class":133},[109,5850,1317],{"class":126},[109,5852,1320],{"class":122},[109,5854,1956],{"class":133},[109,5856,1317],{"class":126},[109,5858,1327],{"class":122},[109,5860,1330],{"class":126},[109,5862,5863],{"class":111,"line":206},[109,5864,1335],{"class":126},[109,5866,5867,5869,5871,5873,5875,5877],{"class":111,"line":218},[109,5868,1396],{"class":126},[109,5870,275],{"class":122},[109,5872,1401],{"class":126},[109,5874,275],{"class":122},[109,5876,5697],{"class":278},[109,5878,137],{"class":126},[109,5880,5881],{"class":111,"line":223},[109,5882,1361],{"class":126},[109,5884,5885],{"class":111,"line":229},[109,5886,5887],{"class":115},"    \u002F\u002F开始冒泡排序\n",[109,5889,5890],{"class":111,"line":244},[109,5891,5892],{"class":115},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[109,5894,5895,5897,5899,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919,5921],{"class":111,"line":258},[109,5896,1302],{"class":122},[109,5898,285],{"class":126},[109,5900,123],{"class":122},[109,5902,1309],{"class":126},[109,5904,130],{"class":122},[109,5906,1314],{"class":133},[109,5908,1317],{"class":126},[109,5910,1320],{"class":122},[109,5912,1956],{"class":133},[109,5914,2064],{"class":122},[109,5916,1755],{"class":133},[109,5918,1317],{"class":126},[109,5920,1327],{"class":122},[109,5922,1330],{"class":126},[109,5924,5925],{"class":111,"line":263},[109,5926,1335],{"class":126},[109,5928,5929],{"class":111,"line":269},[109,5930,5931],{"class":115},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[109,5933,5934,5936,5938,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964],{"class":111,"line":304},[109,5935,4747],{"class":122},[109,5937,285],{"class":126},[109,5939,123],{"class":122},[109,5941,4754],{"class":126},[109,5943,130],{"class":122},[109,5945,1314],{"class":133},[109,5947,4761],{"class":126},[109,5949,1320],{"class":122},[109,5951,1956],{"class":133},[109,5953,2064],{"class":122},[109,5955,1345],{"class":126},[109,5957,2064],{"class":122},[109,5959,1755],{"class":133},[109,5961,4761],{"class":126},[109,5963,1327],{"class":122},[109,5965,1330],{"class":126},[109,5967,5968],{"class":111,"line":331},[109,5969,3865],{"class":126},[109,5971,5972],{"class":111,"line":336},[109,5973,5974],{"class":115},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[109,5976,5977,5980,5983,5985,5988,5990,5992],{"class":111,"line":364},[109,5978,5979],{"class":122},"            if",[109,5981,5982],{"class":126},"(arr[j]",[109,5984,2490],{"class":122},[109,5986,5987],{"class":126},"arr[j",[109,5989,1348],{"class":122},[109,5991,1755],{"class":133},[109,5993,5994],{"class":126},"])\n",[109,5996,5997],{"class":111,"line":391},[109,5998,5999],{"class":126},"            {\n",[109,6001,6002,6005,6007,6009],{"class":111,"line":396},[109,6003,6004],{"class":122},"                int",[109,6006,5594],{"class":126},[109,6008,130],{"class":122},[109,6010,6011],{"class":126},"arr[j];\n",[109,6013,6014,6017,6019,6021,6023,6025],{"class":111,"line":402},[109,6015,6016],{"class":126},"                arr[j]",[109,6018,130],{"class":122},[109,6020,5987],{"class":126},[109,6022,1348],{"class":122},[109,6024,1755],{"class":133},[109,6026,6027],{"class":126},"];\n",[109,6029,6030,6033,6035,6037,6039,6041],{"class":111,"line":419},[109,6031,6032],{"class":126},"                arr[j",[109,6034,1348],{"class":122},[109,6036,1755],{"class":133},[109,6038,2470],{"class":126},[109,6040,130],{"class":122},[109,6042,5619],{"class":126},[109,6044,6045],{"class":111,"line":435},[109,6046,6047],{"class":126},"            }\n",[109,6049,6050],{"class":111,"line":440},[109,6051,3884],{"class":126},[109,6053,6054],{"class":111,"line":467},[109,6055,1361],{"class":126},[109,6057,6058,6060,6062,6065,6067],{"class":111,"line":494},[109,6059,1058],{"class":126},[109,6061,275],{"class":122},[109,6063,6064],{"class":278},"\"排序后：\"",[109,6066,275],{"class":122},[109,6068,1068],{"class":126},[109,6070,6071,6073,6075,6077,6079,6081,6083,6085,6087,6089,6091,6093],{"class":111,"line":499},[109,6072,1302],{"class":122},[109,6074,285],{"class":126},[109,6076,123],{"class":122},[109,6078,1309],{"class":126},[109,6080,130],{"class":122},[109,6082,1314],{"class":133},[109,6084,1317],{"class":126},[109,6086,1320],{"class":122},[109,6088,1956],{"class":133},[109,6090,1317],{"class":126},[109,6092,1327],{"class":122},[109,6094,1330],{"class":126},[109,6096,6097],{"class":111,"line":526},[109,6098,1335],{"class":126},[109,6100,6101,6103,6105,6107,6109,6111],{"class":111,"line":552},[109,6102,1396],{"class":126},[109,6104,275],{"class":122},[109,6106,1401],{"class":126},[109,6108,275],{"class":122},[109,6110,5697],{"class":278},[109,6112,137],{"class":126},[109,6114,6115],{"class":111,"line":557},[109,6116,1361],{"class":126},[109,6118,6119,6121,6123],{"class":111,"line":584},[109,6120,731],{"class":122},[109,6122,734],{"class":133},[109,6124,137],{"class":126},[109,6126,6127],{"class":111,"line":611},[109,6128,742],{"class":126},[51,6130,6132],{"id":6131},"_172二维数组","1.7.2二维数组",[765,6134,6135],{},[30,6136,6137],{},"二维数组的四种定义方式",[1677,6139,6140,6149],{},[1680,6141,6142],{},[1683,6143,6144,6147],{},[1686,6145,6146],{},"序号",[1686,6148,5124],{},[1723,6150,6151,6161,6170,6179,6188],{},[1683,6152,6153,6155],{},[1728,6154,1755],{},[1728,6156,6157,6158,821],{},"数据类型 数组名[行数]",[109,6159,6160],{},"列数",[1683,6162,6163,6165],{},[1728,6164,1618],{},[1728,6166,6157,6167,6169],{},[109,6168,6160],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1683,6171,6172,6174],{},[1728,6173,1612],{},[1728,6175,6157,6176,6178],{},[109,6177,6160],{},"={数据1,数据2,数据3...}",[1683,6180,6181,6183],{},[1728,6182,1831],{},[1728,6184,6185,6186,6178],{},"数据类型 数组名[]",[109,6187,6160],{},[1683,6189,6190,6193],{},[1728,6191,6192],{},"注意：不能只省略列数",[1728,6194],{},[765,6196,6197],{"start":119},[30,6198,6199],{},"二维数组数组名",[27,6201,6202,6205],{},[30,6203,6204],{},"1.查看二维数组所占内存空间",[30,6206,6207],{},"2.获取二维数组首地址",[19,6209,6210],{},"已知二维数组，求二维数组的行数与列数",[99,6212,6214],{"className":101,"code":6213,"language":103,"meta":104,"style":104},"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",[106,6215,6216,6224,6228,6246,6250,6268,6284,6289,6314,6347],{"__ignoreMap":104},[109,6217,6218,6220,6222],{"class":111,"line":112},[109,6219,123],{"class":122},[109,6221,212],{"class":211},[109,6223,803],{"class":126},[109,6225,6226],{"class":111,"line":119},[109,6227,808],{"class":126},[109,6229,6230,6232,6234,6236,6239,6241,6243],{"class":111,"line":140},[109,6231,232],{"class":122},[109,6233,5304],{"class":126},[109,6235,1618],{"class":133},[109,6237,6238],{"class":126},"][",[109,6240,1612],{"class":133},[109,6242,2470],{"class":126},[109,6244,6245],{"class":122},"=\n",[109,6247,6248],{"class":111,"line":154},[109,6249,1335],{"class":126},[109,6251,6252,6255,6257,6259,6261,6263,6265],{"class":111,"line":161},[109,6253,6254],{"class":126},"        {",[109,6256,1755],{"class":133},[109,6258,1914],{"class":126},[109,6260,1618],{"class":133},[109,6262,1914],{"class":126},[109,6264,1612],{"class":133},[109,6266,6267],{"class":126},"},\n",[109,6269,6270,6272,6274,6276,6278,6280,6282],{"class":111,"line":167},[109,6271,6254],{"class":126},[109,6273,1831],{"class":133},[109,6275,1914],{"class":126},[109,6277,1856],{"class":133},[109,6279,1914],{"class":126},[109,6281,1881],{"class":133},[109,6283,742],{"class":126},[109,6285,6286],{"class":111,"line":185},[109,6287,6288],{"class":126},"    };\n",[109,6290,6291,6293,6295,6298,6300,6302,6304,6306,6308,6310,6312],{"class":111,"line":201},[109,6292,1058],{"class":126},[109,6294,275],{"class":122},[109,6296,6297],{"class":278},"\"二维数组的行数\"",[109,6299,2765],{"class":122},[109,6301,5545],{"class":126},[109,6303,5548],{"class":122},[109,6305,5194],{"class":126},[109,6307,1314],{"class":133},[109,6309,5555],{"class":126},[109,6311,275],{"class":122},[109,6313,1068],{"class":126},[109,6315,6316,6318,6320,6323,6325,6327,6329,6331,6333,6335,6337,6339,6341,6343,6345],{"class":111,"line":206},[109,6317,1058],{"class":126},[109,6319,275],{"class":122},[109,6321,6322],{"class":278},"\"二维数组的列数\"",[109,6324,2765],{"class":122},[109,6326,5194],{"class":126},[109,6328,1314],{"class":133},[109,6330,5555],{"class":126},[109,6332,5548],{"class":122},[109,6334,5194],{"class":126},[109,6336,1314],{"class":133},[109,6338,6238],{"class":126},[109,6340,1314],{"class":133},[109,6342,5555],{"class":126},[109,6344,275],{"class":122},[109,6346,1068],{"class":126},[109,6348,6349],{"class":111,"line":218},[109,6350,742],{"class":126},[19,6352,6353],{},"查看二维数组首地址",[99,6355,6357],{"className":101,"code":6356,"language":103,"meta":104,"style":104},"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",[106,6358,6359,6376,6402,6427],{"__ignoreMap":104},[109,6360,6361,6363,6365,6368,6370,6372,6374],{"class":111,"line":112},[109,6362,2762],{"class":126},[109,6364,275],{"class":122},[109,6366,6367],{"class":278},"\"二维数组首地址：\"",[109,6369,275],{"class":122},[109,6371,1282],{"class":126},[109,6373,275],{"class":122},[109,6375,1068],{"class":126},[109,6377,6378,6380,6382,6385,6387,6389,6391,6394,6396,6398,6400],{"class":111,"line":119},[109,6379,2762],{"class":126},[109,6381,275],{"class":122},[109,6383,6384],{"class":278},"\"二维数组第一行的首地址：\"",[109,6386,275],{"class":122},[109,6388,714],{"class":126},[109,6390,123],{"class":122},[109,6392,6393],{"class":126},")arr[",[109,6395,1314],{"class":133},[109,6397,2470],{"class":126},[109,6399,275],{"class":122},[109,6401,1068],{"class":126},[109,6403,6404,6406,6408,6411,6413,6415,6417,6419,6421,6423,6425],{"class":111,"line":140},[109,6405,2762],{"class":126},[109,6407,275],{"class":122},[109,6409,6410],{"class":278},"\"二维数组第二行的首地址：\"",[109,6412,275],{"class":122},[109,6414,714],{"class":126},[109,6416,123],{"class":122},[109,6418,6393],{"class":126},[109,6420,1755],{"class":133},[109,6422,2470],{"class":126},[109,6424,275],{"class":122},[109,6426,1068],{"class":126},[109,6428,6429,6431,6433,6436,6438,6440,6442,6444,6446,6448,6450,6452,6454,6456,6458,6460],{"class":111,"line":154},[109,6430,2762],{"class":126},[109,6432,275],{"class":122},[109,6434,6435],{"class":278},"\"二维数组第一个元素的首地址:\"",[109,6437,275],{"class":122},[109,6439,714],{"class":126},[109,6441,123],{"class":122},[109,6443,290],{"class":126},[109,6445,293],{"class":122},[109,6447,5248],{"class":126},[109,6449,1314],{"class":133},[109,6451,6238],{"class":126},[109,6453,1314],{"class":133},[109,6455,2470],{"class":126},[109,6457,275],{"class":122},[109,6459,2635],{"class":126},[109,6461,6462],{"class":115},"\u002F\u002F对于数，要加取址符\n",[1467,6464,6465],{},"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":104,"searchDepth":119,"depth":119,"links":6467},[6468,6469,6470,6478,6479,6485,6490],{"id":1493,"depth":119,"text":1494},{"id":1500,"depth":119,"text":1501},{"id":1515,"depth":119,"text":1516,"children":6471},[6472,6473,6474,6475,6476,6477],{"id":1519,"depth":140,"text":1520},{"id":1561,"depth":140,"text":1562},{"id":1626,"depth":140,"text":1627},{"id":2554,"depth":140,"text":2555},{"id":2641,"depth":140,"text":2642},{"id":2736,"depth":140,"text":2737},{"id":2778,"depth":119,"text":2779},{"id":2845,"depth":119,"text":2846,"children":6480},[6481,6482,6483,6484],{"id":2849,"depth":140,"text":2850},{"id":2870,"depth":140,"text":2871},{"id":2879,"depth":140,"text":2880},{"id":2888,"depth":140,"text":2889},{"id":2897,"depth":119,"text":2898,"children":6486},[6487,6488,6489],{"id":2901,"depth":140,"text":2902},{"id":3566,"depth":140,"text":3567},{"id":4964,"depth":140,"text":4965},{"id":5105,"depth":119,"text":5106,"children":6491},[6492,6493],{"id":5109,"depth":140,"text":5110},{"id":6131,"depth":140,"text":6132},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1485,"description":104},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6500,"title":6501,"body":6502,"description":104,"extension":1476,"meta":7595,"navigation":157,"path":7596,"seo":7597,"stem":7598,"__hash__":7599},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6503,"toc":7587},[6504,6507,6511,6519,6527,6530,6596,6600,6603,6679,6683,6686,6689,6692,6904,6908,6913,6974,6979,7044,7049,7140,7143,7248,7252,7255,7261,7404,7408,7411,7425,7428,7473,7476,7584],[10,6505,6501],{"id":6506},"_2函数",[14,6508,6510],{"id":6509},"_21函数概述","2.1函数概述",[765,6512,6513,6516],{},[30,6514,6515],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[30,6517,6518],{},"语法：",[99,6520,6525],{"className":6521,"code":6523,"language":6524,"meta":104},[6522],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[106,6526,6523],{"__ignoreMap":104},[19,6528,6529],{},"小案例",[99,6531,6533],{"className":101,"code":6532,"language":103,"meta":104,"style":104},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[106,6534,6535,6540,6564,6568,6585,6592],{"__ignoreMap":104},[109,6536,6537],{"class":111,"line":112},[109,6538,6539],{"class":115},"\u002F\u002Fnum1,num2形参\n",[109,6541,6542,6544,6547,6549,6551,6555,6557,6559,6562],{"class":111,"line":119},[109,6543,123],{"class":122},[109,6545,6546],{"class":211}," add",[109,6548,714],{"class":126},[109,6550,123],{"class":122},[109,6552,6554],{"class":6553},"s4XuR"," num1",[109,6556,1914],{"class":126},[109,6558,123],{"class":122},[109,6560,6561],{"class":6553}," num2",[109,6563,1330],{"class":126},[109,6565,6566],{"class":111,"line":140},[109,6567,808],{"class":126},[109,6569,6570,6572,6575,6577,6580,6582],{"class":111,"line":154},[109,6571,232],{"class":122},[109,6573,6574],{"class":126}," sum",[109,6576,130],{"class":122},[109,6578,6579],{"class":126},"num1",[109,6581,1348],{"class":122},[109,6583,6584],{"class":126},"num2;\n",[109,6586,6587,6589],{"class":111,"line":161},[109,6588,731],{"class":122},[109,6590,6591],{"class":126}," sum;\n",[109,6593,6594],{"class":111,"line":167},[109,6595,742],{"class":126},[14,6597,6599],{"id":6598},"_22函数调用","2.2函数调用",[19,6601,6602],{},"调用刚刚写的求和函数",[99,6604,6606],{"className":101,"code":6605,"language":103,"meta":104,"style":104},"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",[106,6607,6608,6616,6620,6625,6637,6649,6658,6663,6675],{"__ignoreMap":104},[109,6609,6610,6612,6614],{"class":111,"line":112},[109,6611,123],{"class":122},[109,6613,212],{"class":211},[109,6615,803],{"class":126},[109,6617,6618],{"class":111,"line":119},[109,6619,808],{"class":126},[109,6621,6622],{"class":111,"line":140},[109,6623,6624],{"class":115},"    \u002F\u002Fa,b实参\n",[109,6626,6627,6629,6631,6633,6635],{"class":111,"line":154},[109,6628,232],{"class":122},[109,6630,2791],{"class":126},[109,6632,130],{"class":122},[109,6634,1314],{"class":133},[109,6636,137],{"class":126},[109,6638,6639,6641,6643,6645,6647],{"class":111,"line":161},[109,6640,232],{"class":122},[109,6642,4180],{"class":126},[109,6644,130],{"class":122},[109,6646,1314],{"class":133},[109,6648,137],{"class":126},[109,6650,6651,6653,6655],{"class":111,"line":167},[109,6652,3376],{"class":126},[109,6654,2822],{"class":122},[109,6656,6657],{"class":126},"a,b;\n",[109,6659,6660],{"class":111,"line":185},[109,6661,6662],{"class":115},"    \u002F\u002F调用函数时，实参值传给了形参\n",[109,6664,6665,6667,6669,6672],{"class":111,"line":201},[109,6666,1058],{"class":126},[109,6668,275],{"class":122},[109,6670,6671],{"class":211},"add",[109,6673,6674],{"class":126},"(a,b);\n",[109,6676,6677],{"class":111,"line":206},[109,6678,742],{"class":126},[14,6680,6682],{"id":6681},"_23值传递","2.3值传递",[19,6684,6685],{},"值传递就是函数调用时实参将数值传给形参",[19,6687,6688],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6690,6691],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[99,6693,6695],{"className":101,"code":6694,"language":103,"meta":104,"style":104},"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",[106,6696,6697,6718,6722,6735,6752,6770,6781,6790,6799,6812,6828,6844,6853,6857,6865,6869,6881,6893,6900],{"__ignoreMap":104},[109,6698,6699,6701,6704,6706,6708,6710,6712,6714,6716],{"class":111,"line":112},[109,6700,1166],{"class":122},[109,6702,6703],{"class":211}," swap",[109,6705,714],{"class":126},[109,6707,123],{"class":122},[109,6709,6554],{"class":6553},[109,6711,1914],{"class":126},[109,6713,123],{"class":122},[109,6715,6561],{"class":6553},[109,6717,1330],{"class":126},[109,6719,6720],{"class":111,"line":119},[109,6721,808],{"class":126},[109,6723,6724,6726,6728,6731,6733],{"class":111,"line":140},[109,6725,1058],{"class":126},[109,6727,275],{"class":122},[109,6729,6730],{"class":278},"\"交换前：\"",[109,6732,275],{"class":122},[109,6734,1068],{"class":126},[109,6736,6737,6739,6741,6744,6746,6748,6750],{"class":111,"line":154},[109,6738,1058],{"class":126},[109,6740,275],{"class":122},[109,6742,6743],{"class":278},"\"num1=\"",[109,6745,275],{"class":122},[109,6747,6579],{"class":126},[109,6749,275],{"class":122},[109,6751,1068],{"class":126},[109,6753,6754,6756,6758,6761,6763,6766,6768],{"class":111,"line":161},[109,6755,1058],{"class":126},[109,6757,275],{"class":122},[109,6759,6760],{"class":278},"\"num2=\"",[109,6762,275],{"class":122},[109,6764,6765],{"class":126},"num2",[109,6767,275],{"class":122},[109,6769,1068],{"class":126},[109,6771,6772,6774,6776,6778],{"class":111,"line":167},[109,6773,232],{"class":122},[109,6775,5594],{"class":126},[109,6777,130],{"class":122},[109,6779,6780],{"class":126},"num1;\n",[109,6782,6783,6786,6788],{"class":111,"line":185},[109,6784,6785],{"class":126},"    num1",[109,6787,130],{"class":122},[109,6789,6584],{"class":126},[109,6791,6792,6795,6797],{"class":111,"line":201},[109,6793,6794],{"class":126},"    num2",[109,6796,130],{"class":122},[109,6798,5619],{"class":126},[109,6800,6801,6803,6805,6808,6810],{"class":111,"line":206},[109,6802,1058],{"class":126},[109,6804,275],{"class":122},[109,6806,6807],{"class":278},"\"交换后：\"",[109,6809,275],{"class":122},[109,6811,1068],{"class":126},[109,6813,6814,6816,6818,6820,6822,6824,6826],{"class":111,"line":218},[109,6815,1058],{"class":126},[109,6817,275],{"class":122},[109,6819,6743],{"class":278},[109,6821,275],{"class":122},[109,6823,6579],{"class":126},[109,6825,275],{"class":122},[109,6827,1068],{"class":126},[109,6829,6830,6832,6834,6836,6838,6840,6842],{"class":111,"line":223},[109,6831,1058],{"class":126},[109,6833,275],{"class":122},[109,6835,6760],{"class":278},[109,6837,275],{"class":122},[109,6839,6765],{"class":126},[109,6841,275],{"class":122},[109,6843,1068],{"class":126},[109,6845,6846,6848,6850],{"class":111,"line":229},[109,6847,731],{"class":122},[109,6849,821],{"class":126},[109,6851,6852],{"class":115},"\u002F\u002F或者不写\n",[109,6854,6855],{"class":111,"line":244},[109,6856,742],{"class":126},[109,6858,6859,6861,6863],{"class":111,"line":258},[109,6860,123],{"class":122},[109,6862,212],{"class":211},[109,6864,803],{"class":126},[109,6866,6867],{"class":111,"line":263},[109,6868,808],{"class":126},[109,6870,6871,6873,6875,6877,6879],{"class":111,"line":269},[109,6872,232],{"class":122},[109,6874,2791],{"class":126},[109,6876,130],{"class":122},[109,6878,1008],{"class":133},[109,6880,137],{"class":126},[109,6882,6883,6885,6887,6889,6891],{"class":111,"line":304},[109,6884,232],{"class":122},[109,6886,4180],{"class":126},[109,6888,130],{"class":122},[109,6890,2232],{"class":133},[109,6892,137],{"class":126},[109,6894,6895,6898],{"class":111,"line":331},[109,6896,6897],{"class":211},"    swap",[109,6899,6674],{"class":126},[109,6901,6902],{"class":111,"line":336},[109,6903,742],{"class":126},[14,6905,6907],{"id":6906},"_24函数的常见形式","2.4函数的常见形式",[765,6909,6910],{},[30,6911,6912],{},"无参无返",[99,6914,6916],{"className":101,"code":6915,"language":103,"meta":104,"style":104},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[106,6917,6918,6926,6930,6943,6947,6955,6959,6964,6970],{"__ignoreMap":104},[109,6919,6920,6922,6924],{"class":111,"line":112},[109,6921,1166],{"class":122},[109,6923,1169],{"class":211},[109,6925,803],{"class":126},[109,6927,6928],{"class":111,"line":119},[109,6929,808],{"class":126},[109,6931,6932,6934,6936,6939,6941],{"class":111,"line":140},[109,6933,1058],{"class":126},[109,6935,275],{"class":122},[109,6937,6938],{"class":278},"\"你好\"",[109,6940,275],{"class":122},[109,6942,1068],{"class":126},[109,6944,6945],{"class":111,"line":154},[109,6946,742],{"class":126},[109,6948,6949,6951,6953],{"class":111,"line":161},[109,6950,123],{"class":122},[109,6952,212],{"class":211},[109,6954,803],{"class":126},[109,6956,6957],{"class":111,"line":167},[109,6958,808],{"class":126},[109,6960,6961],{"class":111,"line":185},[109,6962,6963],{"class":115},"    \u002F\u002F函数调用\n",[109,6965,6966,6968],{"class":111,"line":201},[109,6967,1452],{"class":211},[109,6969,874],{"class":126},[109,6971,6972],{"class":111,"line":206},[109,6973,742],{"class":126},[765,6975,6976],{"start":119},[30,6977,6978],{},"有参无返",[99,6980,6982],{"className":101,"code":6981,"language":103,"meta":104,"style":104},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[106,6983,6984,6998,7002,7014,7018,7026,7030,7040],{"__ignoreMap":104},[109,6985,6986,6988,6990,6992,6994,6996],{"class":111,"line":112},[109,6987,1166],{"class":122},[109,6989,1262],{"class":211},[109,6991,714],{"class":126},[109,6993,123],{"class":122},[109,6995,2791],{"class":6553},[109,6997,1330],{"class":126},[109,6999,7000],{"class":111,"line":119},[109,7001,808],{"class":126},[109,7003,7004,7006,7008,7010,7012],{"class":111,"line":140},[109,7005,1058],{"class":126},[109,7007,275],{"class":122},[109,7009,6938],{"class":278},[109,7011,275],{"class":122},[109,7013,1068],{"class":126},[109,7015,7016],{"class":111,"line":154},[109,7017,742],{"class":126},[109,7019,7020,7022,7024],{"class":111,"line":161},[109,7021,123],{"class":122},[109,7023,212],{"class":211},[109,7025,803],{"class":126},[109,7027,7028],{"class":111,"line":167},[109,7029,808],{"class":126},[109,7031,7032,7034,7036,7038],{"class":111,"line":185},[109,7033,1459],{"class":211},[109,7035,714],{"class":126},[109,7037,1351],{"class":133},[109,7039,720],{"class":126},[109,7041,7042],{"class":111,"line":201},[109,7043,742],{"class":126},[765,7045,7046],{"start":140},[30,7047,7048],{},"无参有返",[99,7050,7052],{"className":101,"code":7051,"language":103,"meta":104,"style":104},"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",[106,7053,7054,7063,7067,7079,7088,7092,7100,7104,7117,7136],{"__ignoreMap":104},[109,7055,7056,7058,7061],{"class":111,"line":112},[109,7057,123],{"class":122},[109,7059,7060],{"class":211}," test03",[109,7062,803],{"class":126},[109,7064,7065],{"class":111,"line":119},[109,7066,808],{"class":126},[109,7068,7069,7071,7073,7075,7077],{"class":111,"line":140},[109,7070,1058],{"class":126},[109,7072,275],{"class":122},[109,7074,6938],{"class":278},[109,7076,275],{"class":122},[109,7078,1068],{"class":126},[109,7080,7081,7083,7086],{"class":111,"line":154},[109,7082,731],{"class":122},[109,7084,7085],{"class":133}," 100",[109,7087,137],{"class":126},[109,7089,7090],{"class":111,"line":161},[109,7091,742],{"class":126},[109,7093,7094,7096,7098],{"class":111,"line":167},[109,7095,123],{"class":122},[109,7097,212],{"class":211},[109,7099,803],{"class":126},[109,7101,7102],{"class":111,"line":185},[109,7103,808],{"class":126},[109,7105,7106,7108,7110,7112,7115],{"class":111,"line":201},[109,7107,232],{"class":122},[109,7109,6554],{"class":126},[109,7111,130],{"class":122},[109,7113,7114],{"class":211},"test03",[109,7116,874],{"class":126},[109,7118,7119,7121,7123,7125,7127,7129,7131,7133],{"class":111,"line":206},[109,7120,1058],{"class":126},[109,7122,275],{"class":122},[109,7124,6743],{"class":278},[109,7126,275],{"class":122},[109,7128,6579],{"class":126},[109,7130,275],{"class":122},[109,7132,2635],{"class":126},[109,7134,7135],{"class":115}," \u002F\u002F100\n",[109,7137,7138],{"class":111,"line":218},[109,7139,742],{"class":126},[19,7141,7142],{},"4.有参有返",[99,7144,7146],{"className":101,"code":7145,"language":103,"meta":104,"style":104},"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",[106,7147,7148,7163,7167,7180,7186,7190,7199,7203,7215,7229,7244],{"__ignoreMap":104},[109,7149,7150,7152,7155,7157,7159,7161],{"class":111,"line":112},[109,7151,123],{"class":122},[109,7153,7154],{"class":211}," test04",[109,7156,714],{"class":126},[109,7158,123],{"class":122},[109,7160,2791],{"class":6553},[109,7162,1330],{"class":126},[109,7164,7165],{"class":111,"line":119},[109,7166,808],{"class":126},[109,7168,7169,7171,7173,7176,7178],{"class":111,"line":140},[109,7170,1058],{"class":126},[109,7172,275],{"class":122},[109,7174,7175],{"class":278},"\"hello\"",[109,7177,275],{"class":122},[109,7179,1068],{"class":126},[109,7181,7182,7184],{"class":111,"line":154},[109,7183,731],{"class":122},[109,7185,2825],{"class":126},[109,7187,7188],{"class":111,"line":161},[109,7189,742],{"class":126},[109,7191,7192,7194,7197],{"class":111,"line":167},[109,7193,123],{"class":122},[109,7195,7196],{"class":211}," mian",[109,7198,803],{"class":126},[109,7200,7201],{"class":111,"line":185},[109,7202,808],{"class":126},[109,7204,7205,7207,7209,7211,7213],{"class":111,"line":201},[109,7206,232],{"class":122},[109,7208,4180],{"class":126},[109,7210,130],{"class":122},[109,7212,1755],{"class":133},[109,7214,137],{"class":126},[109,7216,7217,7219,7221,7223,7226],{"class":111,"line":206},[109,7218,232],{"class":122},[109,7220,4196],{"class":126},[109,7222,130],{"class":122},[109,7224,7225],{"class":211},"test04",[109,7227,7228],{"class":126},"(b);\n",[109,7230,7231,7233,7235,7237,7239,7241],{"class":111,"line":218},[109,7232,1058],{"class":126},[109,7234,275],{"class":122},[109,7236,1826],{"class":126},[109,7238,275],{"class":122},[109,7240,2635],{"class":126},[109,7242,7243],{"class":115}," \u002F\u002F1\n",[109,7245,7246],{"class":111,"line":223},[109,7247,742],{"class":126},[14,7249,7251],{"id":7250},"_25函数的声明","2.5函数的声明",[19,7253,7254],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7256,7257,7258],{},"函数的",[23,7259,7260],{},"声明可以多次，但是函数的定义只能有一次",[99,7262,7264],{"className":101,"code":7263,"language":103,"meta":104,"style":104},"\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",[106,7265,7266,7271,7276,7300,7309,7313,7325,7337,7353,7357,7377,7381,7400],{"__ignoreMap":104},[109,7267,7268],{"class":111,"line":112},[109,7269,7270],{"class":115},"\u002F\u002F函数声明\n",[109,7272,7273],{"class":111,"line":119},[109,7274,7275],{"class":115},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[109,7277,7278,7280,7283,7285,7287,7289,7291,7293,7295,7297],{"class":111,"line":140},[109,7279,123],{"class":122},[109,7281,7282],{"class":211}," max",[109,7284,714],{"class":126},[109,7286,123],{"class":122},[109,7288,2791],{"class":6553},[109,7290,1914],{"class":126},[109,7292,123],{"class":122},[109,7294,4180],{"class":6553},[109,7296,1154],{"class":126},[109,7298,7299],{"class":115},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[109,7301,7302,7304,7306],{"class":111,"line":154},[109,7303,123],{"class":122},[109,7305,212],{"class":211},[109,7307,7308],{"class":126},"() \n",[109,7310,7311],{"class":111,"line":161},[109,7312,808],{"class":126},[109,7314,7315,7317,7319,7321,7323],{"class":111,"line":167},[109,7316,232],{"class":122},[109,7318,2791],{"class":126},[109,7320,130],{"class":122},[109,7322,1008],{"class":133},[109,7324,137],{"class":126},[109,7326,7327,7329,7331,7333,7335],{"class":111,"line":185},[109,7328,232],{"class":122},[109,7330,4180],{"class":126},[109,7332,130],{"class":122},[109,7334,2232],{"class":133},[109,7336,137],{"class":126},[109,7338,7339,7341,7343,7346,7349,7351],{"class":111,"line":201},[109,7340,1058],{"class":126},[109,7342,275],{"class":122},[109,7344,7345],{"class":211},"max",[109,7347,7348],{"class":126},"(a,b)",[109,7350,275],{"class":122},[109,7352,1068],{"class":126},[109,7354,7355],{"class":111,"line":206},[109,7356,742],{"class":126},[109,7358,7359,7361,7363,7365,7367,7369,7371,7373,7375],{"class":111,"line":218},[109,7360,123],{"class":122},[109,7362,7282],{"class":211},[109,7364,714],{"class":126},[109,7366,123],{"class":122},[109,7368,2791],{"class":6553},[109,7370,1914],{"class":126},[109,7372,123],{"class":122},[109,7374,4180],{"class":6553},[109,7376,1330],{"class":126},[109,7378,7379],{"class":111,"line":223},[109,7380,808],{"class":126},[109,7382,7383,7385,7387,7389,7391,7393,7395,7397],{"class":111,"line":229},[109,7384,731],{"class":122},[109,7386,2791],{"class":126},[109,7388,2490],{"class":122},[109,7390,1801],{"class":126},[109,7392,2516],{"class":122},[109,7394,1776],{"class":126},[109,7396,2391],{"class":122},[109,7398,7399],{"class":126},"b;\n",[109,7401,7402],{"class":111,"line":244},[109,7403,742],{"class":126},[14,7405,7407],{"id":7406},"_26函数的分文件编写","2.6函数的分文件编写",[19,7409,7410],{},"4个步骤：",[27,7412,7413,7416,7419,7422],{},[30,7414,7415],{},"1.创建后缀名为.h的头文件",[30,7417,7418],{},"2.创建后缀名为.cpp的源文件",[30,7420,7421],{},"3.在头文件中写函数的定义",[30,7423,7424],{},"4.在源文件中写函数的定义\n示例：",[19,7426,7427],{},"头文件：swap.h",[99,7429,7431],{"className":101,"code":7430,"language":103,"meta":104,"style":104},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[106,7432,7433,7439,7449,7453],{"__ignoreMap":104},[109,7434,7435,7437],{"class":111,"line":112},[109,7436,3317],{"class":122},[109,7438,3320],{"class":278},[109,7440,7441,7443,7445,7447],{"class":111,"line":119},[109,7442,3325],{"class":122},[109,7444,3328],{"class":122},[109,7446,3331],{"class":211},[109,7448,137],{"class":126},[109,7450,7451],{"class":111,"line":140},[109,7452,7270],{"class":115},[109,7454,7455,7457,7459,7461,7463,7465,7467,7469,7471],{"class":111,"line":154},[109,7456,1166],{"class":122},[109,7458,6703],{"class":211},[109,7460,714],{"class":126},[109,7462,123],{"class":122},[109,7464,2791],{"class":6553},[109,7466,1914],{"class":126},[109,7468,123],{"class":122},[109,7470,4180],{"class":6553},[109,7472,720],{"class":126},[19,7474,7475],{},"源文件：swap.cpp",[99,7477,7479],{"className":101,"code":7478,"language":103,"meta":104,"style":104},"#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",[106,7480,7481,7488,7493,7513,7517,7528,7537,7546,7563,7580],{"__ignoreMap":104},[109,7482,7483,7485],{"class":111,"line":112},[109,7484,3317],{"class":122},[109,7486,7487],{"class":278}," \"swap.h\"\n",[109,7489,7490],{"class":111,"line":119},[109,7491,7492],{"class":115},"\u002F\u002F函数的定义\n",[109,7494,7495,7497,7499,7501,7503,7505,7507,7509,7511],{"class":111,"line":140},[109,7496,1166],{"class":122},[109,7498,6703],{"class":211},[109,7500,714],{"class":126},[109,7502,123],{"class":122},[109,7504,2791],{"class":6553},[109,7506,1914],{"class":126},[109,7508,123],{"class":122},[109,7510,4180],{"class":6553},[109,7512,1330],{"class":126},[109,7514,7515],{"class":111,"line":154},[109,7516,808],{"class":126},[109,7518,7519,7521,7523,7525],{"class":111,"line":161},[109,7520,232],{"class":122},[109,7522,5594],{"class":126},[109,7524,130],{"class":122},[109,7526,7527],{"class":126},"a;\n",[109,7529,7530,7533,7535],{"class":111,"line":167},[109,7531,7532],{"class":126},"    a",[109,7534,130],{"class":122},[109,7536,7399],{"class":126},[109,7538,7539,7542,7544],{"class":111,"line":185},[109,7540,7541],{"class":126},"    b",[109,7543,130],{"class":122},[109,7545,5619],{"class":126},[109,7547,7548,7550,7552,7555,7557,7559,7561],{"class":111,"line":201},[109,7549,1058],{"class":126},[109,7551,275],{"class":122},[109,7553,7554],{"class":278},"\"a=\"",[109,7556,275],{"class":122},[109,7558,1776],{"class":126},[109,7560,275],{"class":122},[109,7562,1068],{"class":126},[109,7564,7565,7567,7569,7572,7574,7576,7578],{"class":111,"line":206},[109,7566,1058],{"class":126},[109,7568,275],{"class":122},[109,7570,7571],{"class":278},"\"b=\"",[109,7573,275],{"class":122},[109,7575,1801],{"class":126},[109,7577,275],{"class":122},[109,7579,1068],{"class":126},[109,7581,7582],{"class":111,"line":218},[109,7583,742],{"class":126},[1467,7585,7586],{},"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":104,"searchDepth":119,"depth":119,"links":7588},[7589,7590,7591,7592,7593,7594],{"id":6509,"depth":119,"text":6510},{"id":6598,"depth":119,"text":6599},{"id":6681,"depth":119,"text":6682},{"id":6906,"depth":119,"text":6907},{"id":7250,"depth":119,"text":7251},{"id":7406,"depth":119,"text":7407},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6501,"description":104},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7601,"title":7602,"body":7603,"description":7610,"extension":1476,"meta":9011,"navigation":157,"path":9012,"seo":9013,"stem":9014,"__hash__":9015},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7604,"toc":9001},[7605,7608,7611,7615,7776,7780,7783,7786,7789,7792,7930,7934,7937,7940,7943,8008,8012,8017,8084,8087,8091,8094,8105,8110,8129,8132,8137,8156,8159,8163,8182,8185,8189,8424,8428,8431,8434,8437,8599,8602,8606,8609,8615,8998],[10,7606,7602],{"id":7607},"_3指针",[19,7609,7610],{},"通过指针保存一个地址，指针就是个地址",[14,7612,7614],{"id":7613},"_31定义指针","3.1定义指针",[99,7616,7618],{"className":101,"code":7617,"language":103,"meta":104,"style":104},"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",[106,7619,7620,7628,7632,7637,7649,7654,7662,7672,7690,7710,7714,7719,7724,7729,7743,7758,7772],{"__ignoreMap":104},[109,7621,7622,7624,7626],{"class":111,"line":112},[109,7623,123],{"class":122},[109,7625,212],{"class":211},[109,7627,803],{"class":126},[109,7629,7630],{"class":111,"line":119},[109,7631,808],{"class":126},[109,7633,7634],{"class":111,"line":140},[109,7635,7636],{"class":115},"    \u002F\u002F1.定义指针\n",[109,7638,7639,7641,7643,7645,7647],{"class":111,"line":154},[109,7640,232],{"class":122},[109,7642,2791],{"class":126},[109,7644,130],{"class":122},[109,7646,1008],{"class":133},[109,7648,137],{"class":126},[109,7650,7651],{"class":111,"line":161},[109,7652,7653],{"class":115},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[109,7655,7656,7659],{"class":111,"line":167},[109,7657,7658],{"class":122},"    int*",[109,7660,7661],{"class":126},"p;\n",[109,7663,7664,7667,7670],{"class":111,"line":185},[109,7665,7666],{"class":126},"    p",[109,7668,7669],{"class":122},"=&",[109,7671,7527],{"class":126},[109,7673,7674,7676,7678,7681,7684,7686,7688],{"class":111,"line":201},[109,7675,1058],{"class":126},[109,7677,275],{"class":122},[109,7679,7680],{"class":278},"\"a的地址为：\"",[109,7682,7683],{"class":122},"\u003C\u003C&",[109,7685,1776],{"class":126},[109,7687,275],{"class":122},[109,7689,1068],{"class":126},[109,7691,7692,7694,7696,7699,7701,7703,7705,7707],{"class":111,"line":206},[109,7693,1058],{"class":126},[109,7695,275],{"class":122},[109,7697,7698],{"class":278},"\"指针p为：\"",[109,7700,275],{"class":122},[109,7702,19],{"class":126},[109,7704,275],{"class":122},[109,7706,2635],{"class":126},[109,7708,7709],{"class":115},"\u002F\u002F指针p表示的就是a的地址\n",[109,7711,7712],{"class":111,"line":218},[109,7713,158],{"emptyLinePlaceholder":157},[109,7715,7716],{"class":111,"line":223},[109,7717,7718],{"class":115},"    \u002F\u002F2.使用指针\n",[109,7720,7721],{"class":111,"line":229},[109,7722,7723],{"class":115},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[109,7725,7726],{"class":111,"line":244},[109,7727,7728],{"class":115},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[109,7730,7731,7734,7736,7738,7741],{"class":111,"line":258},[109,7732,7733],{"class":122},"    *",[109,7735,19],{"class":126},[109,7737,130],{"class":122},[109,7739,7740],{"class":133},"1000",[109,7742,137],{"class":126},[109,7744,7745,7747,7749,7751,7753,7755],{"class":111,"line":263},[109,7746,1058],{"class":126},[109,7748,1061],{"class":122},[109,7750,19],{"class":126},[109,7752,275],{"class":122},[109,7754,2635],{"class":126},[109,7756,7757],{"class":115},"\u002F\u002F1000\n",[109,7759,7760,7762,7764,7766,7768,7770],{"class":111,"line":269},[109,7761,1058],{"class":126},[109,7763,275],{"class":122},[109,7765,1776],{"class":126},[109,7767,275],{"class":122},[109,7769,2635],{"class":126},[109,7771,7757],{"class":115},[109,7773,7774],{"class":111,"line":304},[109,7775,742],{"class":126},[14,7777,7779],{"id":7778},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7781,7782],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7784,7785],{},"在32位操作系统下：占用4个字节空间",[19,7787,7788],{},"在64位操作系统下：占用8个字节空间",[19,7790,7791],{},"上方是不管啥数据类型的",[99,7793,7795],{"className":101,"code":7794,"language":103,"meta":104,"style":104},"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",[106,7796,7797,7805,7809,7814,7826,7831,7836,7841,7853,7874,7900,7926],{"__ignoreMap":104},[109,7798,7799,7801,7803],{"class":111,"line":112},[109,7800,123],{"class":122},[109,7802,212],{"class":211},[109,7804,803],{"class":126},[109,7806,7807],{"class":111,"line":119},[109,7808,808],{"class":126},[109,7810,7811],{"class":111,"line":140},[109,7812,7813],{"class":115},"    \u002F\u002F指针所占内存空间\n",[109,7815,7816,7818,7820,7822,7824],{"class":111,"line":154},[109,7817,232],{"class":122},[109,7819,2791],{"class":126},[109,7821,130],{"class":122},[109,7823,1008],{"class":133},[109,7825,137],{"class":126},[109,7827,7828],{"class":111,"line":161},[109,7829,7830],{"class":115},"    \u002F\u002Fint *p;\n",[109,7832,7833],{"class":111,"line":167},[109,7834,7835],{"class":115},"    \u002F\u002Fp=&a;\n",[109,7837,7838],{"class":111,"line":185},[109,7839,7840],{"class":115},"    \u002F\u002F上述可以写为以下：\n",[109,7842,7843,7845,7847,7849,7851],{"class":111,"line":201},[109,7844,232],{"class":122},[109,7846,797],{"class":122},[109,7848,19],{"class":126},[109,7850,7669],{"class":122},[109,7852,7527],{"class":126},[109,7854,7855,7857,7859,7862,7864,7867,7869,7871],{"class":111,"line":206},[109,7856,272],{"class":126},[109,7858,275],{"class":122},[109,7860,7861],{"class":278},"\"sizeof(int *)\"",[109,7863,2765],{"class":122},[109,7865,7866],{"class":126},"(p)",[109,7868,275],{"class":122},[109,7870,2635],{"class":126},[109,7872,7873],{"class":115},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[109,7875,7876,7878,7880,7882,7884,7886,7888,7890,7892,7894,7897],{"class":111,"line":218},[109,7877,272],{"class":126},[109,7879,275],{"class":122},[109,7881,7861],{"class":278},[109,7883,2765],{"class":122},[109,7885,714],{"class":126},[109,7887,123],{"class":122},[109,7889,797],{"class":122},[109,7891,290],{"class":126},[109,7893,275],{"class":122},[109,7895,7896],{"class":126},"endl",[109,7898,7899],{"class":115},"  \u002F\u002F4字节(32位的话)\n",[109,7901,7902,7904,7906,7909,7911,7913,7915,7917,7919,7921,7923],{"class":111,"line":223},[109,7903,272],{"class":126},[109,7905,275],{"class":122},[109,7907,7908],{"class":278},"\"sizeof(char *)\"",[109,7910,2765],{"class":122},[109,7912,714],{"class":126},[109,7914,1637],{"class":122},[109,7916,797],{"class":122},[109,7918,290],{"class":126},[109,7920,275],{"class":122},[109,7922,2635],{"class":126},[109,7924,7925],{"class":115}," \u002F\u002F4字节(32位的话)\n",[109,7927,7928],{"class":111,"line":229},[109,7929,742],{"class":126},[14,7931,7933],{"id":7932},"_33空指针","3.3空指针",[19,7935,7936],{},"空指针：指针变量指向内存中编号为0的空间",[19,7938,7939],{},"用途：初始化指针变量",[19,7941,7942],{},"注意：空指针指向的内存是不可以访问的",[99,7944,7946],{"className":101,"code":7945,"language":103,"meta":104,"style":104},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[106,7947,7948,7956,7960,7965,7979,7984,7999,8004],{"__ignoreMap":104},[109,7949,7950,7952,7954],{"class":111,"line":112},[109,7951,123],{"class":122},[109,7953,212],{"class":211},[109,7955,803],{"class":126},[109,7957,7958],{"class":111,"line":119},[109,7959,808],{"class":126},[109,7961,7962],{"class":111,"line":140},[109,7963,7964],{"class":115},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[109,7966,7967,7969,7971,7973,7975,7977],{"class":111,"line":154},[109,7968,232],{"class":122},[109,7970,797],{"class":122},[109,7972,19],{"class":126},[109,7974,130],{"class":122},[109,7976,3749],{"class":133},[109,7978,137],{"class":126},[109,7980,7981],{"class":111,"line":161},[109,7982,7983],{"class":115},"    \u002F\u002F2.空指针不能进行访问\n",[109,7985,7986,7988,7990,7992,7994,7996],{"class":111,"line":167},[109,7987,7733],{"class":122},[109,7989,19],{"class":126},[109,7991,130],{"class":122},[109,7993,1351],{"class":133},[109,7995,821],{"class":126},[109,7997,7998],{"class":115},"\u002F\u002F直接报错，压根不能访问\n",[109,8000,8001],{"class":111,"line":185},[109,8002,8003],{"class":115},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[109,8005,8006],{"class":111,"line":201},[109,8007,742],{"class":126},[14,8009,8011],{"id":8010},"_34野指针","3.4野指针",[19,8013,8014],{},[23,8015,8016],{},"指针变量指向非法的内存空间",[99,8018,8020],{"className":101,"code":8019,"language":103,"meta":104,"style":104},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[106,8021,8022,8030,8034,8063,8068,8080],{"__ignoreMap":104},[109,8023,8024,8026,8028],{"class":111,"line":112},[109,8025,123],{"class":122},[109,8027,212],{"class":211},[109,8029,803],{"class":126},[109,8031,8032],{"class":111,"line":119},[109,8033,808],{"class":126},[109,8035,8036,8038,8040,8042,8044,8046,8048,8050,8052,8055,8058,8060],{"class":111,"line":140},[109,8037,232],{"class":122},[109,8039,797],{"class":122},[109,8041,19],{"class":126},[109,8043,130],{"class":122},[109,8045,714],{"class":126},[109,8047,123],{"class":122},[109,8049,797],{"class":122},[109,8051,290],{"class":126},[109,8053,8054],{"class":122},"0x",[109,8056,8057],{"class":133},"1100",[109,8059,821],{"class":126},[109,8061,8062],{"class":115}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[109,8064,8065],{"class":111,"line":154},[109,8066,8067],{"class":115},"    \u002F\u002F访问野指针报错\n",[109,8069,8070,8072,8074,8076,8078],{"class":111,"line":161},[109,8071,1058],{"class":126},[109,8073,1061],{"class":122},[109,8075,19],{"class":126},[109,8077,275],{"class":122},[109,8079,1068],{"class":126},[109,8081,8082],{"class":111,"line":167},[109,8083,742],{"class":126},[19,8085,8086],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8088,8090],{"id":8089},"_35const修饰指针","3.5const修饰指针",[19,8092,8093],{},"三种情况：",[27,8095,8096,8099,8102],{},[30,8097,8098],{},"const修饰指针 常量指针",[30,8100,8101],{},"const修饰常量 指针常量",[30,8103,8104],{},"const即修饰指针，又修饰常量",[765,8106,8107],{},[30,8108,8109],{},"常量指针",[99,8111,8113],{"className":101,"code":8112,"language":103,"meta":104,"style":104},"const int *p=&a;\n",[106,8114,8115],{"__ignoreMap":104},[109,8116,8117,8119,8121,8123,8125,8127],{"class":111,"line":112},[109,8118,170],{"class":122},[109,8120,173],{"class":122},[109,8122,797],{"class":122},[109,8124,19],{"class":126},[109,8126,7669],{"class":122},[109,8128,7527],{"class":126},[19,8130,8131],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[765,8133,8134],{"start":119},[30,8135,8136],{},"指针常量",[99,8138,8140],{"className":101,"code":8139,"language":103,"meta":104,"style":104},"int *const p=&a;\n",[106,8141,8142],{"__ignoreMap":104},[109,8143,8144,8146,8149,8152,8154],{"class":111,"line":112},[109,8145,123],{"class":122},[109,8147,8148],{"class":122}," *const",[109,8150,8151],{"class":126}," p",[109,8153,7669],{"class":122},[109,8155,7527],{"class":126},[19,8157,8158],{},"指针的指向不可以改，指针指向的值可以改",[765,8160,8161],{"start":140},[30,8162,8104],{},[99,8164,8166],{"className":101,"code":8165,"language":103,"meta":104,"style":104},"const int *const p=&a;\n",[106,8167,8168],{"__ignoreMap":104},[109,8169,8170,8172,8174,8176,8178,8180],{"class":111,"line":112},[109,8171,170],{"class":122},[109,8173,173],{"class":122},[109,8175,8148],{"class":122},[109,8177,8151],{"class":126},[109,8179,7669],{"class":122},[109,8181,7527],{"class":126},[19,8183,8184],{},"指针的指向和指针指向的值都不可以改变",[14,8186,8188],{"id":8187},"_36指针和数组","3.6指针和数组",[99,8190,8192],{"className":101,"code":8191,"language":103,"meta":104,"style":104},"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",[106,8193,8194,8202,8206,8211,8265,8286,8302,8318,8329,8346,8351,8365,8391,8395,8407,8416,8420],{"__ignoreMap":104},[109,8195,8196,8198,8200],{"class":111,"line":112},[109,8197,123],{"class":122},[109,8199,212],{"class":211},[109,8201,803],{"class":126},[109,8203,8204],{"class":111,"line":119},[109,8205,808],{"class":126},[109,8207,8208],{"class":111,"line":140},[109,8209,8210],{"class":115},"    \u002F\u002F利用指针访问数组中的元素\n",[109,8212,8213,8215,8217,8219,8221,8223,8225,8227,8229,8231,8233,8235,8237,8239,8241,8243,8245,8247,8249,8251,8253,8255,8257,8259,8261,8263],{"class":111,"line":154},[109,8214,232],{"class":122},[109,8216,5304],{"class":126},[109,8218,1008],{"class":133},[109,8220,2470],{"class":126},[109,8222,130],{"class":122},[109,8224,2427],{"class":126},[109,8226,1755],{"class":133},[109,8228,1914],{"class":126},[109,8230,1618],{"class":133},[109,8232,1914],{"class":126},[109,8234,1612],{"class":133},[109,8236,1914],{"class":126},[109,8238,1831],{"class":133},[109,8240,1914],{"class":126},[109,8242,1856],{"class":133},[109,8244,1914],{"class":126},[109,8246,1881],{"class":133},[109,8248,1914],{"class":126},[109,8250,1905],{"class":133},[109,8252,1914],{"class":126},[109,8254,1931],{"class":133},[109,8256,1914],{"class":126},[109,8258,1956],{"class":133},[109,8260,1914],{"class":126},[109,8262,1008],{"class":133},[109,8264,5337],{"class":126},[109,8266,8267,8269,8271,8274,8276,8278,8280,8282,8284],{"class":111,"line":161},[109,8268,1058],{"class":126},[109,8270,275],{"class":122},[109,8272,8273],{"class":278},"\"数组的第一个元素为：\"",[109,8275,275],{"class":122},[109,8277,5248],{"class":126},[109,8279,1314],{"class":133},[109,8281,2470],{"class":126},[109,8283,275],{"class":122},[109,8285,1068],{"class":126},[109,8287,8288,8290,8292,8294,8296,8299],{"class":111,"line":167},[109,8289,232],{"class":122},[109,8291,797],{"class":122},[109,8293,19],{"class":126},[109,8295,130],{"class":122},[109,8297,8298],{"class":126},"arr;",[109,8300,8301],{"class":115},"\u002F\u002F注意数才要加取地址符号&\n",[109,8303,8304,8306,8308,8310,8312,8314,8316],{"class":111,"line":185},[109,8305,1058],{"class":126},[109,8307,275],{"class":122},[109,8309,8273],{"class":278},[109,8311,1061],{"class":122},[109,8313,19],{"class":126},[109,8315,275],{"class":122},[109,8317,1068],{"class":126},[109,8319,8320,8322,8324,8326],{"class":111,"line":201},[109,8321,7666],{"class":126},[109,8323,1327],{"class":122},[109,8325,821],{"class":126},[109,8327,8328],{"class":115}," \u002F\u002F让指针向后偏移4个字节\n",[109,8330,8331,8333,8335,8338,8340,8342,8344],{"class":111,"line":206},[109,8332,1058],{"class":126},[109,8334,275],{"class":122},[109,8336,8337],{"class":278},"\"数组的第二个元素为：\"",[109,8339,1061],{"class":122},[109,8341,19],{"class":126},[109,8343,275],{"class":122},[109,8345,1068],{"class":126},[109,8347,8348],{"class":111,"line":218},[109,8349,8350],{"class":115},"    \u002F\u002F利用指针遍历数组\n",[109,8352,8353,8355,8357,8360,8362],{"class":111,"line":223},[109,8354,232],{"class":122},[109,8356,797],{"class":122},[109,8358,8359],{"class":126},"p2",[109,8361,130],{"class":122},[109,8363,8364],{"class":126},"arr;\n",[109,8366,8367,8369,8371,8373,8375,8377,8379,8381,8383,8385,8387,8389],{"class":111,"line":229},[109,8368,1302],{"class":122},[109,8370,285],{"class":126},[109,8372,123],{"class":122},[109,8374,1309],{"class":126},[109,8376,130],{"class":122},[109,8378,1314],{"class":133},[109,8380,1317],{"class":126},[109,8382,1320],{"class":122},[109,8384,1008],{"class":133},[109,8386,1317],{"class":126},[109,8388,1327],{"class":122},[109,8390,1330],{"class":126},[109,8392,8393],{"class":111,"line":244},[109,8394,1335],{"class":126},[109,8396,8397,8399,8401,8403,8405],{"class":111,"line":258},[109,8398,1396],{"class":126},[109,8400,1061],{"class":122},[109,8402,8359],{"class":126},[109,8404,275],{"class":122},[109,8406,1068],{"class":126},[109,8408,8409,8412,8414],{"class":111,"line":263},[109,8410,8411],{"class":126},"        p2",[109,8413,1327],{"class":122},[109,8415,137],{"class":126},[109,8417,8418],{"class":111,"line":269},[109,8419,1361],{"class":126},[109,8421,8422],{"class":111,"line":304},[109,8423,742],{"class":126},[14,8425,8427],{"id":8426},"_37指针和函数","3.7指针和函数",[19,8429,8430],{},"利用指针做函数参数，可以修改实参的值",[19,8432,8433],{},"值传递：只改变形参，不改变实参",[19,8435,8436],{},"地址传递：",[99,8438,8440],{"className":101,"code":8439,"language":103,"meta":104,"style":104},"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",[106,8441,8442,8467,8471,8483,8494,8504,8508,8516,8520,8532,8544,8549,8565,8580,8595],{"__ignoreMap":104},[109,8443,8444,8446,8448,8450,8452,8454,8457,8459,8461,8463,8465],{"class":111,"line":112},[109,8445,1166],{"class":122},[109,8447,6703],{"class":211},[109,8449,714],{"class":126},[109,8451,123],{"class":122},[109,8453,797],{"class":122},[109,8455,8456],{"class":6553},"p1",[109,8458,1914],{"class":126},[109,8460,123],{"class":122},[109,8462,797],{"class":122},[109,8464,8359],{"class":6553},[109,8466,1330],{"class":126},[109,8468,8469],{"class":111,"line":119},[109,8470,808],{"class":126},[109,8472,8473,8475,8477,8480],{"class":111,"line":140},[109,8474,232],{"class":122},[109,8476,5594],{"class":126},[109,8478,8479],{"class":122},"=*",[109,8481,8482],{"class":126},"p1;\n",[109,8484,8485,8487,8489,8491],{"class":111,"line":154},[109,8486,7733],{"class":122},[109,8488,8456],{"class":126},[109,8490,8479],{"class":122},[109,8492,8493],{"class":126},"p2;\n",[109,8495,8496,8498,8500,8502],{"class":111,"line":161},[109,8497,7733],{"class":122},[109,8499,8359],{"class":126},[109,8501,130],{"class":122},[109,8503,5619],{"class":126},[109,8505,8506],{"class":111,"line":167},[109,8507,742],{"class":126},[109,8509,8510,8512,8514],{"class":111,"line":185},[109,8511,123],{"class":122},[109,8513,212],{"class":211},[109,8515,803],{"class":126},[109,8517,8518],{"class":111,"line":201},[109,8519,808],{"class":126},[109,8521,8522,8524,8526,8528,8530],{"class":111,"line":206},[109,8523,232],{"class":122},[109,8525,2791],{"class":126},[109,8527,130],{"class":122},[109,8529,1008],{"class":133},[109,8531,137],{"class":126},[109,8533,8534,8536,8538,8540,8542],{"class":111,"line":218},[109,8535,232],{"class":122},[109,8537,4180],{"class":126},[109,8539,130],{"class":122},[109,8541,2232],{"class":133},[109,8543,137],{"class":126},[109,8545,8546],{"class":111,"line":223},[109,8547,8548],{"class":115},"    \u002F\u002F地址传递\n",[109,8550,8551,8553,8555,8557,8560,8562],{"class":111,"line":229},[109,8552,6897],{"class":211},[109,8554,714],{"class":126},[109,8556,293],{"class":122},[109,8558,8559],{"class":126},"a,",[109,8561,293],{"class":122},[109,8563,8564],{"class":126},"b);\n",[109,8566,8567,8569,8571,8573,8575,8577],{"class":111,"line":244},[109,8568,1058],{"class":126},[109,8570,275],{"class":122},[109,8572,1776],{"class":126},[109,8574,275],{"class":122},[109,8576,2635],{"class":126},[109,8578,8579],{"class":115},"\u002F\u002F20\n",[109,8581,8582,8584,8586,8588,8590,8592],{"class":111,"line":258},[109,8583,1058],{"class":126},[109,8585,275],{"class":122},[109,8587,1801],{"class":126},[109,8589,275],{"class":122},[109,8591,2635],{"class":126},[109,8593,8594],{"class":115},"\u002F\u002F10\n",[109,8596,8597],{"class":111,"line":263},[109,8598,742],{"class":126},[19,8600,8601],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8603,8605],{"id":8604},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8607,8608],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8610,8611,8612,8614],{},"例如数组：int arr",[109,8613,1008],{},"={4,3,6,9,1,2,10,8,7,5}",[99,8616,8618],{"className":101,"code":8617,"language":103,"meta":104,"style":104},"#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",[106,8619,8620,8626,8636,8660,8664,8695,8699,8733,8737,8755,8759,8770,8785,8800,8804,8808,8812,8816,8820,8828,8832,8837,8891,8903,8915,8920,8928,8932,8937,8962,8966,8981,8990,8994],{"__ignoreMap":104},[109,8621,8622,8624],{"class":111,"line":112},[109,8623,3317],{"class":122},[109,8625,3320],{"class":278},[109,8627,8628,8630,8632,8634],{"class":111,"line":119},[109,8629,3325],{"class":122},[109,8631,3328],{"class":122},[109,8633,3331],{"class":211},[109,8635,137],{"class":126},[109,8637,8638,8640,8643,8645,8647,8649,8651,8653,8655,8658],{"class":111,"line":140},[109,8639,1166],{"class":122},[109,8641,8642],{"class":211}," bubbleSort",[109,8644,714],{"class":126},[109,8646,123],{"class":122},[109,8648,797],{"class":122},[109,8650,19],{"class":6553},[109,8652,1914],{"class":126},[109,8654,123],{"class":122},[109,8656,8657],{"class":6553}," len",[109,8659,1330],{"class":126},[109,8661,8662],{"class":111,"line":154},[109,8663,808],{"class":126},[109,8665,8666,8668,8670,8672,8674,8676,8678,8680,8682,8685,8687,8689,8691,8693],{"class":111,"line":161},[109,8667,1302],{"class":122},[109,8669,714],{"class":126},[109,8671,123],{"class":122},[109,8673,1309],{"class":126},[109,8675,130],{"class":122},[109,8677,1314],{"class":133},[109,8679,1317],{"class":126},[109,8681,1320],{"class":122},[109,8683,8684],{"class":126},"len",[109,8686,2064],{"class":122},[109,8688,1755],{"class":133},[109,8690,1317],{"class":126},[109,8692,1327],{"class":122},[109,8694,1330],{"class":126},[109,8696,8697],{"class":111,"line":167},[109,8698,1335],{"class":126},[109,8700,8701,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721,8723,8725,8727,8729,8731],{"class":111,"line":185},[109,8702,4747],{"class":122},[109,8704,714],{"class":126},[109,8706,123],{"class":122},[109,8708,4754],{"class":126},[109,8710,130],{"class":122},[109,8712,1314],{"class":133},[109,8714,4761],{"class":126},[109,8716,1320],{"class":122},[109,8718,8684],{"class":126},[109,8720,2064],{"class":122},[109,8722,1345],{"class":126},[109,8724,2064],{"class":122},[109,8726,1755],{"class":133},[109,8728,4761],{"class":126},[109,8730,1327],{"class":122},[109,8732,1330],{"class":126},[109,8734,8735],{"class":111,"line":201},[109,8736,3865],{"class":126},[109,8738,8739,8741,8744,8746,8749,8751,8753],{"class":111,"line":206},[109,8740,5979],{"class":122},[109,8742,8743],{"class":126},"(p[j]",[109,8745,2490],{"class":122},[109,8747,8748],{"class":126},"p[j",[109,8750,1348],{"class":122},[109,8752,1755],{"class":133},[109,8754,5994],{"class":126},[109,8756,8757],{"class":111,"line":218},[109,8758,5999],{"class":126},[109,8760,8761,8763,8765,8767],{"class":111,"line":223},[109,8762,6004],{"class":122},[109,8764,5594],{"class":126},[109,8766,130],{"class":122},[109,8768,8769],{"class":126},"p[j];\n",[109,8771,8772,8775,8777,8779,8781,8783],{"class":111,"line":229},[109,8773,8774],{"class":126},"                p[j]",[109,8776,130],{"class":122},[109,8778,8748],{"class":126},[109,8780,1348],{"class":122},[109,8782,1755],{"class":133},[109,8784,6027],{"class":126},[109,8786,8787,8790,8792,8794,8796,8798],{"class":111,"line":244},[109,8788,8789],{"class":126},"                p[j",[109,8791,1348],{"class":122},[109,8793,1755],{"class":133},[109,8795,2470],{"class":126},[109,8797,130],{"class":122},[109,8799,5619],{"class":126},[109,8801,8802],{"class":111,"line":258},[109,8803,6047],{"class":126},[109,8805,8806],{"class":111,"line":263},[109,8807,3884],{"class":126},[109,8809,8810],{"class":111,"line":269},[109,8811,1361],{"class":126},[109,8813,8814],{"class":111,"line":304},[109,8815,742],{"class":126},[109,8817,8818],{"class":111,"line":331},[109,8819,158],{"emptyLinePlaceholder":157},[109,8821,8822,8824,8826],{"class":111,"line":336},[109,8823,123],{"class":122},[109,8825,212],{"class":211},[109,8827,803],{"class":126},[109,8829,8830],{"class":111,"line":364},[109,8831,808],{"class":126},[109,8833,8834],{"class":111,"line":391},[109,8835,8836],{"class":115},"    \u002F\u002F 1.创建数组\n",[109,8838,8839,8841,8843,8845,8847,8849,8851,8853,8855,8857,8859,8861,8863,8865,8867,8869,8871,8873,8875,8877,8879,8881,8883,8885,8887,8889],{"class":111,"line":396},[109,8840,232],{"class":122},[109,8842,5304],{"class":126},[109,8844,1008],{"class":133},[109,8846,2470],{"class":126},[109,8848,130],{"class":122},[109,8850,2427],{"class":126},[109,8852,1831],{"class":133},[109,8854,1914],{"class":126},[109,8856,1612],{"class":133},[109,8858,1914],{"class":126},[109,8860,1881],{"class":133},[109,8862,1914],{"class":126},[109,8864,1956],{"class":133},[109,8866,1914],{"class":126},[109,8868,1755],{"class":133},[109,8870,1914],{"class":126},[109,8872,1618],{"class":133},[109,8874,1914],{"class":126},[109,8876,1008],{"class":133},[109,8878,1914],{"class":126},[109,8880,1931],{"class":133},[109,8882,1914],{"class":126},[109,8884,1905],{"class":133},[109,8886,1914],{"class":126},[109,8888,1856],{"class":133},[109,8890,5337],{"class":126},[109,8892,8893,8895,8897,8899,8901],{"class":111,"line":402},[109,8894,232],{"class":122},[109,8896,8657],{"class":126},[109,8898,130],{"class":122},[109,8900,1008],{"class":133},[109,8902,137],{"class":126},[109,8904,8905,8907,8909,8911,8913],{"class":111,"line":419},[109,8906,232],{"class":122},[109,8908,797],{"class":122},[109,8910,19],{"class":126},[109,8912,130],{"class":122},[109,8914,8364],{"class":126},[109,8916,8917],{"class":111,"line":435},[109,8918,8919],{"class":115},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[109,8921,8922,8925],{"class":111,"line":440},[109,8923,8924],{"class":211},"    bubbleSort",[109,8926,8927],{"class":126},"(p,len);\n",[109,8929,8930],{"class":111,"line":467},[109,8931,158],{"emptyLinePlaceholder":157},[109,8933,8934],{"class":111,"line":494},[109,8935,8936],{"class":115},"    \u002F\u002F 3.打印排序后的数组\n",[109,8938,8939,8941,8943,8945,8947,8949,8951,8953,8955,8958,8960],{"class":111,"line":499},[109,8940,1302],{"class":122},[109,8942,285],{"class":126},[109,8944,123],{"class":122},[109,8946,1309],{"class":126},[109,8948,130],{"class":122},[109,8950,1314],{"class":133},[109,8952,4558],{"class":126},[109,8954,1320],{"class":122},[109,8956,8957],{"class":126},"len; i",[109,8959,1327],{"class":122},[109,8961,1330],{"class":126},[109,8963,8964],{"class":111,"line":526},[109,8965,1335],{"class":126},[109,8967,8968,8970,8972,8974,8976,8979],{"class":111,"line":552},[109,8969,1396],{"class":126},[109,8971,1061],{"class":122},[109,8973,19],{"class":126},[109,8975,275],{"class":122},[109,8977,8978],{"class":278},"\"\"",[109,8980,137],{"class":126},[109,8982,8983,8986,8988],{"class":111,"line":557},[109,8984,8985],{"class":126},"        p",[109,8987,1327],{"class":122},[109,8989,137],{"class":126},[109,8991,8992],{"class":111,"line":584},[109,8993,1361],{"class":126},[109,8995,8996],{"class":111,"line":611},[109,8997,742],{"class":126},[1467,8999,9000],{},"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":104,"searchDepth":119,"depth":119,"links":9002},[9003,9004,9005,9006,9007,9008,9009,9010],{"id":7613,"depth":119,"text":7614},{"id":7778,"depth":119,"text":7779},{"id":7932,"depth":119,"text":7933},{"id":8010,"depth":119,"text":8011},{"id":8089,"depth":119,"text":8090},{"id":8187,"depth":119,"text":8188},{"id":8426,"depth":119,"text":8427},{"id":8604,"depth":119,"text":8605},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7602,"description":7610},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9017,"title":9018,"body":9019,"description":9026,"extension":1476,"meta":11991,"navigation":157,"path":11992,"seo":11993,"stem":11994,"__hash__":11995},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9020,"toc":11982},[9021,9024,9027,9031,9034,9037,9048,9379,9382,9386,9389,9396,9651,9655,9658,9661,9816,9820,9823,9826,10032,10036,10039,10341,10344,10352,10356,10359,10510,10512,10523,10580,10584,10589,11246,11254,11257,11351,11354,11973,11979],[10,9022,9018],{"id":9023},"_4结构体",[19,9025,9026],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9028,9030],{"id":9029},"_41结构体定义与使用","4.1结构体定义与使用",[19,9032,9033],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9035,9036],{},"通过结构体创建变量的方式：",[27,9038,9039,9042,9045],{},[30,9040,9041],{},"struct 结构体名 变量名",[30,9043,9044],{},"struct 结构体名 变量名={成员1值，成员2值...}",[30,9046,9047],{},"定义结构体时顺便创建变量",[99,9049,9051],{"className":101,"code":9050,"language":103,"meta":104,"style":104},"#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",[106,9052,9053,9059,9069,9076,9081,9089,9093,9098,9102,9107,9112,9117,9124,9129,9136,9140,9147,9151,9155,9159,9163,9167,9171,9177,9181,9187,9195,9203,9207,9212,9217,9228,9233,9245,9256,9267,9272,9295,9299,9304,9330,9334,9339,9350,9362,9374],{"__ignoreMap":104},[109,9054,9055,9057],{"class":111,"line":112},[109,9056,3317],{"class":122},[109,9058,3320],{"class":278},[109,9060,9061,9063,9065,9067],{"class":111,"line":119},[109,9062,3325],{"class":122},[109,9064,3328],{"class":122},[109,9066,3331],{"class":211},[109,9068,137],{"class":126},[109,9070,9071,9073],{"class":111,"line":140},[109,9072,3317],{"class":122},[109,9074,9075],{"class":278},"\u003Cstring>\n",[109,9077,9078],{"class":111,"line":154},[109,9079,9080],{"class":115},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[109,9082,9083,9086],{"class":111,"line":161},[109,9084,9085],{"class":122},"struct",[109,9087,9088],{"class":211}," Student\n",[109,9090,9091],{"class":111,"line":167},[109,9092,808],{"class":126},[109,9094,9095],{"class":111,"line":185},[109,9096,9097],{"class":115},"    \u002F\u002F成员列表\n",[109,9099,9100],{"class":111,"line":201},[109,9101,158],{"emptyLinePlaceholder":157},[109,9103,9104],{"class":111,"line":206},[109,9105,9106],{"class":115},"    \u002F\u002F姓名\n",[109,9108,9109],{"class":111,"line":218},[109,9110,9111],{"class":126},"    string name;\n",[109,9113,9114],{"class":111,"line":223},[109,9115,9116],{"class":115},"    \u002F\u002F年龄\n",[109,9118,9119,9121],{"class":111,"line":229},[109,9120,232],{"class":122},[109,9122,9123],{"class":126}," age;\n",[109,9125,9126],{"class":111,"line":244},[109,9127,9128],{"class":115},"    \u002F\u002F分数\n",[109,9130,9131,9133],{"class":111,"line":258},[109,9132,232],{"class":122},[109,9134,9135],{"class":126}," score;\n",[109,9137,9138],{"class":111,"line":263},[109,9139,5337],{"class":126},[109,9141,9142,9144],{"class":111,"line":269},[109,9143,9085],{"class":122},[109,9145,9146],{"class":211}," School\n",[109,9148,9149],{"class":111,"line":304},[109,9150,808],{"class":126},[109,9152,9153],{"class":111,"line":331},[109,9154,9097],{"class":115},[109,9156,9157],{"class":111,"line":336},[109,9158,158],{"emptyLinePlaceholder":157},[109,9160,9161],{"class":111,"line":364},[109,9162,9106],{"class":115},[109,9164,9165],{"class":111,"line":391},[109,9166,9111],{"class":126},[109,9168,9169],{"class":111,"line":396},[109,9170,9116],{"class":115},[109,9172,9173,9175],{"class":111,"line":402},[109,9174,232],{"class":122},[109,9176,9123],{"class":126},[109,9178,9179],{"class":111,"line":419},[109,9180,9128],{"class":115},[109,9182,9183,9185],{"class":111,"line":435},[109,9184,232],{"class":122},[109,9186,9135],{"class":126},[109,9188,9189,9192],{"class":111,"line":440},[109,9190,9191],{"class":126},"} s3;",[109,9193,9194],{"class":115}," \u002F\u002F创建结构体时就创建了变量\n",[109,9196,9197,9199,9201],{"class":111,"line":467},[109,9198,123],{"class":122},[109,9200,212],{"class":211},[109,9202,803],{"class":126},[109,9204,9205],{"class":111,"line":494},[109,9206,808],{"class":126},[109,9208,9209],{"class":111,"line":499},[109,9210,9211],{"class":115},"    \u002F\u002F2.通过学生类型创建具体学生\n",[109,9213,9214],{"class":111,"line":526},[109,9215,9216],{"class":115},"    \u002F\u002F2.1 struct Student s1;\n",[109,9218,9219,9222,9225],{"class":111,"line":552},[109,9220,9221],{"class":122},"    struct",[109,9223,9224],{"class":211}," Student",[109,9226,9227],{"class":126}," s1;\n",[109,9229,9230],{"class":111,"line":557},[109,9231,9232],{"class":115},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[109,9234,9235,9238,9240,9243],{"class":111,"line":584},[109,9236,9237],{"class":126},"    s1.name",[109,9239,130],{"class":122},[109,9241,9242],{"class":278},"\"张三\"",[109,9244,137],{"class":126},[109,9246,9247,9250,9252,9254],{"class":111,"line":611},[109,9248,9249],{"class":126},"    s1.age",[109,9251,130],{"class":122},[109,9253,2182],{"class":133},[109,9255,137],{"class":126},[109,9257,9258,9261,9263,9265],{"class":111,"line":616},[109,9259,9260],{"class":126},"    s1.score",[109,9262,130],{"class":122},[109,9264,1792],{"class":133},[109,9266,137],{"class":126},[109,9268,9269],{"class":111,"line":633},[109,9270,9271],{"class":115},"    \u002F\u002F输出结果\n",[109,9273,9274,9276,9278,9281,9283,9286,9288,9291,9293],{"class":111,"line":649},[109,9275,1058],{"class":126},[109,9277,275],{"class":122},[109,9279,9280],{"class":126},"s1.name",[109,9282,275],{"class":122},[109,9284,9285],{"class":126},"s1.age",[109,9287,275],{"class":122},[109,9289,9290],{"class":126},"s1.score",[109,9292,275],{"class":122},[109,9294,1068],{"class":126},[109,9296,9297],{"class":111,"line":676},[109,9298,158],{"emptyLinePlaceholder":157},[109,9300,9301],{"class":111,"line":703},[109,9302,9303],{"class":115},"    \u002F\u002F2.2 struct Student s2={...}\n",[109,9305,9306,9308,9310,9313,9315,9317,9320,9322,9324,9326,9328],{"class":111,"line":708},[109,9307,9221],{"class":122},[109,9309,9224],{"class":211},[109,9311,9312],{"class":126}," s2",[109,9314,130],{"class":122},[109,9316,2427],{"class":126},[109,9318,9319],{"class":278},"\"王五\"",[109,9321,1914],{"class":126},[109,9323,2182],{"class":133},[109,9325,1914],{"class":126},[109,9327,1792],{"class":133},[109,9329,5337],{"class":126},[109,9331,9332],{"class":111,"line":723},[109,9333,158],{"emptyLinePlaceholder":157},[109,9335,9336],{"class":111,"line":728},[109,9337,9338],{"class":115},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[109,9340,9341,9344,9346,9348],{"class":111,"line":739},[109,9342,9343],{"class":126},"    s3.name",[109,9345,130],{"class":122},[109,9347,5021],{"class":278},[109,9349,137],{"class":126},[109,9351,9353,9356,9358,9360],{"class":111,"line":9352},44,[109,9354,9355],{"class":126},"    s3.age",[109,9357,130],{"class":122},[109,9359,2182],{"class":133},[109,9361,137],{"class":126},[109,9363,9365,9368,9370,9372],{"class":111,"line":9364},45,[109,9366,9367],{"class":126},"    s3.score",[109,9369,130],{"class":122},[109,9371,2232],{"class":133},[109,9373,137],{"class":126},[109,9375,9377],{"class":111,"line":9376},46,[109,9378,742],{"class":126},[19,9380,9381],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9383,9385],{"id":9384},"_42结构体数组","4.2结构体数组",[19,9387,9388],{},"将自定义的结构体放入到数组中方便维护",[19,9390,9391,9392,9395],{},"语法：struct 结构体名 数组名",[109,9393,9394],{},"元素个数","={ {}，{},...{} };",[99,9397,9399],{"className":101,"code":9398,"language":103,"meta":104,"style":104},"#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",[106,9400,9401,9407,9417,9423,9428,9434,9438,9442,9448,9454,9458,9462,9470,9474,9479,9494,9498,9514,9530,9534,9539,9555,9570,9585,9590,9616,9620,9643,9647],{"__ignoreMap":104},[109,9402,9403,9405],{"class":111,"line":112},[109,9404,3317],{"class":122},[109,9406,3320],{"class":278},[109,9408,9409,9411,9413,9415],{"class":111,"line":119},[109,9410,3325],{"class":122},[109,9412,3328],{"class":122},[109,9414,3331],{"class":211},[109,9416,137],{"class":126},[109,9418,9419,9421],{"class":111,"line":140},[109,9420,3317],{"class":122},[109,9422,9075],{"class":278},[109,9424,9425],{"class":111,"line":154},[109,9426,9427],{"class":115},"\u002F\u002F1.定义结构体\n",[109,9429,9430,9432],{"class":111,"line":161},[109,9431,9085],{"class":122},[109,9433,9088],{"class":211},[109,9435,9436],{"class":111,"line":167},[109,9437,808],{"class":126},[109,9439,9440],{"class":111,"line":185},[109,9441,9111],{"class":126},[109,9443,9444,9446],{"class":111,"line":201},[109,9445,232],{"class":122},[109,9447,9123],{"class":126},[109,9449,9450,9452],{"class":111,"line":206},[109,9451,232],{"class":122},[109,9453,9135],{"class":126},[109,9455,9456],{"class":111,"line":218},[109,9457,158],{"emptyLinePlaceholder":157},[109,9459,9460],{"class":111,"line":223},[109,9461,5337],{"class":126},[109,9463,9464,9466,9468],{"class":111,"line":229},[109,9465,123],{"class":122},[109,9467,212],{"class":211},[109,9469,803],{"class":126},[109,9471,9472],{"class":111,"line":244},[109,9473,808],{"class":126},[109,9475,9476],{"class":111,"line":258},[109,9477,9478],{"class":115},"    \u002F\u002F2.创建结构体数组\n",[109,9480,9481,9483,9485,9488,9490,9492],{"class":111,"line":263},[109,9482,9221],{"class":122},[109,9484,9224],{"class":211},[109,9486,9487],{"class":126}," stuArray[",[109,9489,1618],{"class":133},[109,9491,2470],{"class":126},[109,9493,6245],{"class":122},[109,9495,9496],{"class":111,"line":269},[109,9497,1335],{"class":126},[109,9499,9500,9502,9504,9506,9508,9510,9512],{"class":111,"line":304},[109,9501,6254],{"class":126},[109,9503,9242],{"class":278},[109,9505,1914],{"class":126},[109,9507,2182],{"class":133},[109,9509,1914],{"class":126},[109,9511,1351],{"class":133},[109,9513,6267],{"class":126},[109,9515,9516,9518,9520,9522,9524,9526,9528],{"class":111,"line":331},[109,9517,6254],{"class":126},[109,9519,5021],{"class":278},[109,9521,1914],{"class":126},[109,9523,2107],{"class":133},[109,9525,1914],{"class":126},[109,9527,2107],{"class":133},[109,9529,742],{"class":126},[109,9531,9532],{"class":111,"line":336},[109,9533,1361],{"class":126},[109,9535,9536],{"class":111,"line":364},[109,9537,9538],{"class":115},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[109,9540,9541,9544,9546,9549,9551,9553],{"class":111,"line":391},[109,9542,9543],{"class":126},"    stuArray[",[109,9545,1755],{"class":133},[109,9547,9548],{"class":126},"].name",[109,9550,130],{"class":122},[109,9552,5044],{"class":278},[109,9554,137],{"class":126},[109,9556,9557,9559,9561,9564,9566,9568],{"class":111,"line":396},[109,9558,9543],{"class":126},[109,9560,1755],{"class":133},[109,9562,9563],{"class":126},"].age",[109,9565,130],{"class":122},[109,9567,1618],{"class":133},[109,9569,137],{"class":126},[109,9571,9572,9574,9576,9579,9581,9583],{"class":111,"line":402},[109,9573,9543],{"class":126},[109,9575,1755],{"class":133},[109,9577,9578],{"class":126},"].score",[109,9580,130],{"class":122},[109,9582,1618],{"class":133},[109,9584,137],{"class":126},[109,9586,9587],{"class":111,"line":419},[109,9588,9589],{"class":115},"    \u002F\u002F4.遍历结构体数组\n",[109,9591,9592,9594,9596,9598,9600,9602,9604,9606,9608,9610,9612,9614],{"class":111,"line":435},[109,9593,1302],{"class":122},[109,9595,285],{"class":126},[109,9597,123],{"class":122},[109,9599,1309],{"class":126},[109,9601,130],{"class":122},[109,9603,1314],{"class":133},[109,9605,1317],{"class":126},[109,9607,1320],{"class":122},[109,9609,1618],{"class":133},[109,9611,1317],{"class":126},[109,9613,1327],{"class":122},[109,9615,1330],{"class":126},[109,9617,9618],{"class":111,"line":440},[109,9619,1335],{"class":126},[109,9621,9622,9624,9626,9629,9631,9634,9636,9639,9641],{"class":111,"line":467},[109,9623,1396],{"class":126},[109,9625,275],{"class":122},[109,9627,9628],{"class":126},"stuArray[i].name",[109,9630,275],{"class":122},[109,9632,9633],{"class":126},"stuArray[i].age",[109,9635,275],{"class":122},[109,9637,9638],{"class":126},"stuArray[i].score",[109,9640,275],{"class":122},[109,9642,1068],{"class":126},[109,9644,9645],{"class":111,"line":494},[109,9646,1361],{"class":126},[109,9648,9649],{"class":111,"line":499},[109,9650,742],{"class":126},[14,9652,9654],{"id":9653},"_43结构体指针","4.3结构体指针",[19,9656,9657],{},"作用：通过指针访问结构体中的成员",[19,9659,9660],{},"利用操作符->可以通过结构体指针访问结构体属性",[99,9662,9664],{"className":101,"code":9663,"language":103,"meta":104,"style":104},"#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",[106,9665,9666,9672,9682,9688,9692,9698,9702,9706,9712,9718,9722,9730,9734,9739,9764,9769,9784,9789,9812],{"__ignoreMap":104},[109,9667,9668,9670],{"class":111,"line":112},[109,9669,3317],{"class":122},[109,9671,3320],{"class":278},[109,9673,9674,9676,9678,9680],{"class":111,"line":119},[109,9675,3325],{"class":122},[109,9677,3328],{"class":122},[109,9679,3331],{"class":211},[109,9681,137],{"class":126},[109,9683,9684,9686],{"class":111,"line":140},[109,9685,3317],{"class":122},[109,9687,9075],{"class":278},[109,9689,9690],{"class":111,"line":154},[109,9691,9427],{"class":115},[109,9693,9694,9696],{"class":111,"line":161},[109,9695,9085],{"class":122},[109,9697,9088],{"class":211},[109,9699,9700],{"class":111,"line":167},[109,9701,808],{"class":126},[109,9703,9704],{"class":111,"line":185},[109,9705,9111],{"class":126},[109,9707,9708,9710],{"class":111,"line":201},[109,9709,232],{"class":122},[109,9711,9123],{"class":126},[109,9713,9714,9716],{"class":111,"line":206},[109,9715,232],{"class":122},[109,9717,9135],{"class":126},[109,9719,9720],{"class":111,"line":218},[109,9721,5337],{"class":126},[109,9723,9724,9726,9728],{"class":111,"line":223},[109,9725,123],{"class":122},[109,9727,212],{"class":211},[109,9729,803],{"class":126},[109,9731,9732],{"class":111,"line":229},[109,9733,808],{"class":126},[109,9735,9736],{"class":111,"line":244},[109,9737,9738],{"class":115},"    \u002F\u002F创建学生结构体变量\n",[109,9740,9741,9743,9745,9748,9750,9752,9754,9756,9758,9760,9762],{"class":111,"line":258},[109,9742,9221],{"class":122},[109,9744,9224],{"class":211},[109,9746,9747],{"class":126}," s",[109,9749,130],{"class":122},[109,9751,2427],{"class":126},[109,9753,9242],{"class":278},[109,9755,1914],{"class":126},[109,9757,2182],{"class":133},[109,9759,1914],{"class":126},[109,9761,3098],{"class":133},[109,9763,5337],{"class":126},[109,9765,9766],{"class":111,"line":263},[109,9767,9768],{"class":115},"    \u002F\u002F通过指针指向结构体变量\n",[109,9770,9771,9773,9775,9777,9779,9781],{"class":111,"line":269},[109,9772,9221],{"class":122},[109,9774,9224],{"class":211},[109,9776,797],{"class":122},[109,9778,19],{"class":126},[109,9780,7669],{"class":122},[109,9782,9783],{"class":126},"s\n",[109,9785,9786],{"class":111,"line":304},[109,9787,9788],{"class":115},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[109,9790,9791,9793,9795,9798,9800,9803,9805,9808,9810],{"class":111,"line":331},[109,9792,1058],{"class":126},[109,9794,275],{"class":122},[109,9796,9797],{"class":126},"p->name",[109,9799,275],{"class":122},[109,9801,9802],{"class":126},"p->age",[109,9804,275],{"class":122},[109,9806,9807],{"class":126},"p->score",[109,9809,275],{"class":122},[109,9811,1068],{"class":126},[109,9813,9814],{"class":111,"line":336},[109,9815,742],{"class":126},[14,9817,9819],{"id":9818},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9821,9822],{},"作用：结构体中的成员可以是另一个结构体",[19,9824,9825],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[99,9827,9829],{"className":101,"code":9828,"language":103,"meta":104,"style":104},"#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",[106,9830,9831,9837,9847,9853,9858,9866,9870,9874,9880,9886,9890,9895,9902,9906,9913,9917,9923,9928,9932,9940,9944,9949,9954,9959,9970,9982,9993,10006,10017,10028],{"__ignoreMap":104},[109,9832,9833,9835],{"class":111,"line":112},[109,9834,3317],{"class":122},[109,9836,3320],{"class":278},[109,9838,9839,9841,9843,9845],{"class":111,"line":119},[109,9840,3325],{"class":122},[109,9842,3328],{"class":122},[109,9844,3331],{"class":211},[109,9846,137],{"class":126},[109,9848,9849,9851],{"class":111,"line":140},[109,9850,3317],{"class":122},[109,9852,9075],{"class":278},[109,9854,9855],{"class":111,"line":154},[109,9856,9857],{"class":115},"\u002F\u002F定义学生结构体\n",[109,9859,9860,9862,9864],{"class":111,"line":161},[109,9861,9085],{"class":122},[109,9863,9224],{"class":211},[109,9865,4022],{"class":126},[109,9867,9868],{"class":111,"line":167},[109,9869,808],{"class":126},[109,9871,9872],{"class":111,"line":185},[109,9873,9111],{"class":126},[109,9875,9876,9878],{"class":111,"line":201},[109,9877,232],{"class":122},[109,9879,9123],{"class":126},[109,9881,9882,9884],{"class":111,"line":206},[109,9883,232],{"class":122},[109,9885,9135],{"class":126},[109,9887,9888],{"class":111,"line":218},[109,9889,742],{"class":126},[109,9891,9892],{"class":111,"line":223},[109,9893,9894],{"class":115},"\u002F\u002F定义老师结构体\n",[109,9896,9897,9899],{"class":111,"line":229},[109,9898,9085],{"class":122},[109,9900,9901],{"class":211}," Teacher\n",[109,9903,9904],{"class":111,"line":244},[109,9905,808],{"class":126},[109,9907,9908,9910],{"class":111,"line":258},[109,9909,232],{"class":122},[109,9911,9912],{"class":126}," id;\n",[109,9914,9915],{"class":111,"line":263},[109,9916,9111],{"class":126},[109,9918,9919,9921],{"class":111,"line":269},[109,9920,232],{"class":122},[109,9922,9123],{"class":126},[109,9924,9925],{"class":111,"line":304},[109,9926,9927],{"class":126},"    Student stu;\n",[109,9929,9930],{"class":111,"line":331},[109,9931,742],{"class":126},[109,9933,9934,9936,9938],{"class":111,"line":336},[109,9935,123],{"class":122},[109,9937,212],{"class":211},[109,9939,7308],{"class":126},[109,9941,9942],{"class":111,"line":364},[109,9943,808],{"class":126},[109,9945,9946],{"class":111,"line":391},[109,9947,9948],{"class":115},"    \u002F\u002F结构体嵌套结构体\n",[109,9950,9951],{"class":111,"line":396},[109,9952,9953],{"class":115},"    \u002F\u002F创建老师\n",[109,9955,9956],{"class":111,"line":402},[109,9957,9958],{"class":126},"    Teacher t;\n",[109,9960,9961,9964,9966,9968],{"class":111,"line":419},[109,9962,9963],{"class":126},"    t.id",[109,9965,130],{"class":122},[109,9967,1351],{"class":133},[109,9969,137],{"class":126},[109,9971,9972,9975,9977,9980],{"class":111,"line":435},[109,9973,9974],{"class":126},"    t.name",[109,9976,130],{"class":122},[109,9978,9979],{"class":278},"\"老王\"",[109,9981,137],{"class":126},[109,9983,9984,9987,9989,9991],{"class":111,"line":440},[109,9985,9986],{"class":126},"    t.age",[109,9988,130],{"class":122},[109,9990,2182],{"class":133},[109,9992,137],{"class":126},[109,9994,9995,9998,10000,10003],{"class":111,"line":467},[109,9996,9997],{"class":126},"    t.stu.name",[109,9999,130],{"class":122},[109,10001,10002],{"class":278},"\"小王\"",[109,10004,10005],{"class":126},"；\n",[109,10007,10008,10011,10013,10015],{"class":111,"line":494},[109,10009,10010],{"class":126},"    t.stu.age",[109,10012,130],{"class":122},[109,10014,2232],{"class":133},[109,10016,137],{"class":126},[109,10018,10019,10022,10024,10026],{"class":111,"line":499},[109,10020,10021],{"class":126},"    t.stu.score",[109,10023,130],{"class":122},[109,10025,1881],{"class":133},[109,10027,137],{"class":126},[109,10029,10030],{"class":111,"line":526},[109,10031,742],{"class":126},[14,10033,10035],{"id":10034},"_45结构体做函数参数","4.5结构体做函数参数",[19,10037,10038],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[99,10040,10042],{"className":101,"code":10041,"language":103,"meta":104,"style":104},"#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",[106,10043,10044,10050,10060,10066,10072,10076,10080,10086,10092,10096,10101,10106,10123,10127,10159,10163,10168,10187,10191,10222,10226,10234,10238,10247,10259,10271,10283,10296,10304,10317,10329,10337],{"__ignoreMap":104},[109,10045,10046,10048],{"class":111,"line":112},[109,10047,3317],{"class":122},[109,10049,3320],{"class":278},[109,10051,10052,10054,10056,10058],{"class":111,"line":119},[109,10053,3325],{"class":122},[109,10055,3328],{"class":122},[109,10057,3331],{"class":211},[109,10059,137],{"class":126},[109,10061,10062,10064],{"class":111,"line":140},[109,10063,3317],{"class":122},[109,10065,9075],{"class":278},[109,10067,10068,10070],{"class":111,"line":154},[109,10069,9085],{"class":122},[109,10071,9088],{"class":211},[109,10073,10074],{"class":111,"line":161},[109,10075,808],{"class":126},[109,10077,10078],{"class":111,"line":167},[109,10079,9111],{"class":126},[109,10081,10082,10084],{"class":111,"line":185},[109,10083,232],{"class":122},[109,10085,9123],{"class":126},[109,10087,10088,10090],{"class":111,"line":201},[109,10089,232],{"class":122},[109,10091,9135],{"class":126},[109,10093,10094],{"class":111,"line":206},[109,10095,5337],{"class":126},[109,10097,10098],{"class":111,"line":218},[109,10099,10100],{"class":115},"\u002F\u002F打印学生信息的函数\n",[109,10102,10103],{"class":111,"line":223},[109,10104,10105],{"class":115},"\u002F\u002F值传递\n",[109,10107,10108,10110,10113,10115,10117,10119,10121],{"class":111,"line":229},[109,10109,1166],{"class":122},[109,10111,10112],{"class":211}," printStudent1",[109,10114,714],{"class":126},[109,10116,9085],{"class":122},[109,10118,9224],{"class":211},[109,10120,9747],{"class":6553},[109,10122,1330],{"class":126},[109,10124,10125],{"class":111,"line":244},[109,10126,808],{"class":126},[109,10128,10129,10131,10133,10136,10138,10141,10143,10146,10148,10150,10152,10155,10157],{"class":111,"line":258},[109,10130,272],{"class":126},[109,10132,275],{"class":122},[109,10134,10135],{"class":126}," s.name ",[109,10137,275],{"class":122},[109,10139,10140],{"class":278}," \" \"",[109,10142,282],{"class":122},[109,10144,10145],{"class":126}," s.age ",[109,10147,275],{"class":122},[109,10149,10140],{"class":278},[109,10151,282],{"class":122},[109,10153,10154],{"class":126}," s.score ",[109,10156,275],{"class":122},[109,10158,301],{"class":126},[109,10160,10161],{"class":111,"line":263},[109,10162,742],{"class":126},[109,10164,10165],{"class":111,"line":269},[109,10166,10167],{"class":115},"\u002F\u002F地址传递\n",[109,10169,10170,10172,10175,10177,10179,10181,10183,10185],{"class":111,"line":304},[109,10171,1166],{"class":122},[109,10173,10174],{"class":211}," printStudent2",[109,10176,714],{"class":126},[109,10178,9085],{"class":122},[109,10180,9224],{"class":211},[109,10182,797],{"class":122},[109,10184,2227],{"class":6553},[109,10186,1330],{"class":126},[109,10188,10189],{"class":111,"line":331},[109,10190,808],{"class":126},[109,10192,10193,10195,10197,10200,10202,10204,10206,10209,10211,10213,10215,10218,10220],{"class":111,"line":336},[109,10194,272],{"class":126},[109,10196,275],{"class":122},[109,10198,10199],{"class":126}," s->name ",[109,10201,275],{"class":122},[109,10203,10140],{"class":278},[109,10205,282],{"class":122},[109,10207,10208],{"class":126}," s->age ",[109,10210,275],{"class":122},[109,10212,10140],{"class":278},[109,10214,282],{"class":122},[109,10216,10217],{"class":126}," s->score ",[109,10219,275],{"class":122},[109,10221,301],{"class":126},[109,10223,10224],{"class":111,"line":364},[109,10225,742],{"class":126},[109,10227,10228,10230,10232],{"class":111,"line":391},[109,10229,123],{"class":122},[109,10231,212],{"class":211},[109,10233,803],{"class":126},[109,10235,10236],{"class":111,"line":396},[109,10237,808],{"class":126},[109,10239,10240,10242,10244],{"class":111,"line":402},[109,10241,9221],{"class":122},[109,10243,9224],{"class":211},[109,10245,10246],{"class":126}," s;\n",[109,10248,10249,10252,10254,10257],{"class":111,"line":419},[109,10250,10251],{"class":126},"    s.name ",[109,10253,130],{"class":122},[109,10255,10256],{"class":278}," \"张三\"",[109,10258,137],{"class":126},[109,10260,10261,10264,10266,10269],{"class":111,"line":435},[109,10262,10263],{"class":126},"    s.age ",[109,10265,130],{"class":122},[109,10267,10268],{"class":133}," 20",[109,10270,137],{"class":126},[109,10272,10273,10276,10278,10281],{"class":111,"line":440},[109,10274,10275],{"class":126},"    s.score ",[109,10277,130],{"class":122},[109,10279,10280],{"class":133}," 85",[109,10282,137],{"class":126},[109,10284,10285,10287,10289,10292,10294],{"class":111,"line":467},[109,10286,1058],{"class":126},[109,10288,275],{"class":122},[109,10290,10291],{"class":278},"\"值传递:\"",[109,10293,275],{"class":122},[109,10295,1068],{"class":126},[109,10297,10298,10301],{"class":111,"line":494},[109,10299,10300],{"class":211},"    printStudent1",[109,10302,10303],{"class":126},"(s);\n",[109,10305,10306,10308,10310,10313,10315],{"class":111,"line":499},[109,10307,1058],{"class":126},[109,10309,275],{"class":122},[109,10311,10312],{"class":278},"\"地址传递:\"",[109,10314,275],{"class":122},[109,10316,1068],{"class":126},[109,10318,10319,10322,10324,10326],{"class":111,"line":526},[109,10320,10321],{"class":211},"    printStudent2",[109,10323,714],{"class":126},[109,10325,293],{"class":122},[109,10327,10328],{"class":126},"s); \n",[109,10330,10331,10333,10335],{"class":111,"line":552},[109,10332,731],{"class":122},[109,10334,734],{"class":133},[109,10336,137],{"class":126},[109,10338,10339],{"class":111,"line":557},[109,10340,742],{"class":126},[19,10342,10343],{},"注意：",[27,10345,10346,10349],{},[30,10347,10348],{},"1.先定义结构体，不要在函数中写结构体的定义",[30,10350,10351],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10353,10355],{"id":10354},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10357,10358],{},"用const防止误操作",[99,10360,10362],{"className":101,"code":10361,"language":103,"meta":104,"style":104},"#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",[106,10363,10364,10370,10380,10386,10391,10395,10399,10405,10411,10415,10431,10435,10458,10462,10470,10474,10495,10502,10506],{"__ignoreMap":104},[109,10365,10366,10368],{"class":111,"line":112},[109,10367,3317],{"class":122},[109,10369,3320],{"class":278},[109,10371,10372,10374,10376,10378],{"class":111,"line":119},[109,10373,3325],{"class":122},[109,10375,3328],{"class":122},[109,10377,3331],{"class":211},[109,10379,137],{"class":126},[109,10381,10382,10384],{"class":111,"line":140},[109,10383,3317],{"class":122},[109,10385,9075],{"class":278},[109,10387,10388],{"class":111,"line":154},[109,10389,10390],{"class":126},"sctuct Student\n",[109,10392,10393],{"class":111,"line":161},[109,10394,808],{"class":126},[109,10396,10397],{"class":111,"line":167},[109,10398,9111],{"class":126},[109,10400,10401,10403],{"class":111,"line":185},[109,10402,232],{"class":122},[109,10404,9123],{"class":126},[109,10406,10407,10409],{"class":111,"line":201},[109,10408,232],{"class":122},[109,10410,9135],{"class":126},[109,10412,10413],{"class":111,"line":206},[109,10414,5337],{"class":126},[109,10416,10417,10419,10422,10424,10427,10429],{"class":111,"line":218},[109,10418,1166],{"class":122},[109,10420,10421],{"class":211}," printStudents",[109,10423,714],{"class":126},[109,10425,10426],{"class":211},"student",[109,10428,9747],{"class":6553},[109,10430,1330],{"class":126},[109,10432,10433],{"class":111,"line":223},[109,10434,808],{"class":126},[109,10436,10437,10439,10441,10444,10446,10449,10451,10454,10456],{"class":111,"line":229},[109,10438,1058],{"class":126},[109,10440,275],{"class":122},[109,10442,10443],{"class":126},"s.name",[109,10445,275],{"class":122},[109,10447,10448],{"class":126},"s.age",[109,10450,275],{"class":122},[109,10452,10453],{"class":126},"s.score",[109,10455,275],{"class":122},[109,10457,1068],{"class":126},[109,10459,10460],{"class":111,"line":244},[109,10461,742],{"class":126},[109,10463,10464,10466,10468],{"class":111,"line":258},[109,10465,123],{"class":122},[109,10467,212],{"class":211},[109,10469,7308],{"class":126},[109,10471,10472],{"class":111,"line":263},[109,10473,808],{"class":126},[109,10475,10476,10479,10481,10483,10485,10487,10489,10491,10493],{"class":111,"line":269},[109,10477,10478],{"class":126},"    Student s",[109,10480,130],{"class":122},[109,10482,2427],{"class":126},[109,10484,9242],{"class":278},[109,10486,1914],{"class":126},[109,10488,2182],{"class":133},[109,10490,1914],{"class":126},[109,10492,2182],{"class":133},[109,10494,5337],{"class":126},[109,10496,10497,10500],{"class":111,"line":304},[109,10498,10499],{"class":211},"    printStudent",[109,10501,10303],{"class":126},[109,10503,10504],{"class":111,"line":331},[109,10505,158],{"emptyLinePlaceholder":157},[109,10507,10508],{"class":111,"line":336},[109,10509,742],{"class":126},[19,10511,10343],{},[27,10513,10514,10517,10520],{},[30,10515,10516],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[30,10518,10519],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[30,10521,10522],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[99,10524,10526],{"className":101,"code":10525,"language":103,"meta":104,"style":104},"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",[106,10527,10528,10547,10551,10556,10576],{"__ignoreMap":104},[109,10529,10530,10532,10534,10536,10538,10541,10543,10545],{"class":111,"line":112},[109,10531,1166],{"class":122},[109,10533,10421],{"class":211},[109,10535,714],{"class":126},[109,10537,170],{"class":122},[109,10539,10540],{"class":211}," student",[109,10542,797],{"class":122},[109,10544,2227],{"class":6553},[109,10546,1330],{"class":126},[109,10548,10549],{"class":111,"line":119},[109,10550,808],{"class":126},[109,10552,10553],{"class":111,"line":140},[109,10554,10555],{"class":115},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[109,10557,10558,10560,10562,10564,10566,10568,10570,10572,10574],{"class":111,"line":154},[109,10559,1058],{"class":126},[109,10561,275],{"class":122},[109,10563,10443],{"class":126},[109,10565,275],{"class":122},[109,10567,10448],{"class":126},[109,10569,275],{"class":122},[109,10571,10453],{"class":126},[109,10573,275],{"class":122},[109,10575,1068],{"class":126},[109,10577,10578],{"class":111,"line":161},[109,10579,742],{"class":126},[14,10581,10583],{"id":10582},"_47案例","4.7案例",[765,10585,10586],{},[30,10587,10588],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[99,10590,10592],{"className":101,"code":10591,"language":103,"meta":104,"style":104},"#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",[106,10593,10594,10600,10610,10616,10623,10627,10633,10637,10642,10648,10654,10658,10662,10668,10672,10677,10682,10695,10699,10704,10730,10734,10746,10773,10777,10789,10799,10803,10808,10837,10841,10853,10862,10889,10900,10910,10914,10918,10922,10927,10951,10955,10979,10983,11002,11028,11032,11057,11080,11104,11109,11114,11119,11128,11133,11139,11160,11166,11180,11186,11213,11222,11228,11236,11241],{"__ignoreMap":104},[109,10595,10596,10598],{"class":111,"line":112},[109,10597,3317],{"class":122},[109,10599,3320],{"class":278},[109,10601,10602,10604,10606,10608],{"class":111,"line":119},[109,10603,3325],{"class":122},[109,10605,3328],{"class":122},[109,10607,3331],{"class":211},[109,10609,137],{"class":126},[109,10611,10612,10614],{"class":111,"line":140},[109,10613,3317],{"class":122},[109,10615,9075],{"class":278},[109,10617,10618,10620],{"class":111,"line":154},[109,10619,3317],{"class":122},[109,10621,10622],{"class":278},"\u003Cctime>\n",[109,10624,10625],{"class":111,"line":161},[109,10626,9857],{"class":115},[109,10628,10629,10631],{"class":111,"line":167},[109,10630,9085],{"class":122},[109,10632,9088],{"class":211},[109,10634,10635],{"class":111,"line":185},[109,10636,808],{"class":126},[109,10638,10639],{"class":111,"line":201},[109,10640,10641],{"class":126},"    string sName;\n",[109,10643,10644,10646],{"class":111,"line":206},[109,10645,232],{"class":122},[109,10647,9123],{"class":126},[109,10649,10650,10652],{"class":111,"line":218},[109,10651,232],{"class":122},[109,10653,9135],{"class":126},[109,10655,10656],{"class":111,"line":223},[109,10657,5337],{"class":126},[109,10659,10660],{"class":111,"line":229},[109,10661,9894],{"class":115},[109,10663,10664,10666],{"class":111,"line":244},[109,10665,9085],{"class":122},[109,10667,9901],{"class":211},[109,10669,10670],{"class":111,"line":258},[109,10671,808],{"class":126},[109,10673,10674],{"class":111,"line":263},[109,10675,10676],{"class":126},"    string tName;\n",[109,10678,10679],{"class":111,"line":269},[109,10680,10681],{"class":115},"    \u002F\u002F学生数组\n",[109,10683,10684,10686,10688,10691,10693],{"class":111,"line":304},[109,10685,9221],{"class":122},[109,10687,9224],{"class":211},[109,10689,10690],{"class":126}," sArray[",[109,10692,1856],{"class":133},[109,10694,6027],{"class":126},[109,10696,10697],{"class":111,"line":331},[109,10698,5337],{"class":126},[109,10700,10701],{"class":111,"line":336},[109,10702,10703],{"class":115},"\u002F\u002F给老师和学生赋值的函数\n",[109,10705,10706,10708,10711,10713,10715,10718,10721,10724,10726,10728],{"class":111,"line":364},[109,10707,1166],{"class":122},[109,10709,10710],{"class":211}," allocateSpace",[109,10712,714],{"class":126},[109,10714,9085],{"class":122},[109,10716,10717],{"class":211}," Teacher",[109,10719,10720],{"class":6553}," tArray",[109,10722,10723],{"class":126},"[],",[109,10725,123],{"class":122},[109,10727,8657],{"class":6553},[109,10729,1330],{"class":126},[109,10731,10732],{"class":111,"line":391},[109,10733,808],{"class":126},[109,10735,10736,10739,10741,10744],{"class":111,"line":396},[109,10737,10738],{"class":126},"    string nameSeed",[109,10740,130],{"class":122},[109,10742,10743],{"class":278},"\"ABCDE\"",[109,10745,137],{"class":126},[109,10747,10748,10750,10752,10754,10757,10759,10761,10764,10766,10769,10771],{"class":111,"line":402},[109,10749,1302],{"class":122},[109,10751,285],{"class":126},[109,10753,123],{"class":122},[109,10755,10756],{"class":126}," i ",[109,10758,130],{"class":122},[109,10760,734],{"class":133},[109,10762,10763],{"class":126},"; i ",[109,10765,1320],{"class":122},[109,10767,10768],{"class":126}," len; i",[109,10770,1327],{"class":122},[109,10772,1330],{"class":126},[109,10774,10775],{"class":111,"line":419},[109,10776,1335],{"class":126},[109,10778,10779,10782,10784,10787],{"class":111,"line":435},[109,10780,10781],{"class":126},"        tArray[i].tName ",[109,10783,130],{"class":122},[109,10785,10786],{"class":278}," \"Teacher_\"",[109,10788,137],{"class":126},[109,10790,10791,10793,10796],{"class":111,"line":440},[109,10792,10781],{"class":126},[109,10794,10795],{"class":122},"+=",[109,10797,10798],{"class":126},"nameSeed[i];\n",[109,10800,10801],{"class":111,"line":467},[109,10802,158],{"emptyLinePlaceholder":157},[109,10804,10805],{"class":111,"line":494},[109,10806,10807],{"class":115},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[109,10809,10810,10812,10814,10816,10819,10821,10823,10826,10828,10830,10833,10835],{"class":111,"line":499},[109,10811,4747],{"class":122},[109,10813,285],{"class":126},[109,10815,123],{"class":122},[109,10817,10818],{"class":126}," j ",[109,10820,130],{"class":122},[109,10822,734],{"class":133},[109,10824,10825],{"class":126},"; j ",[109,10827,1320],{"class":122},[109,10829,3510],{"class":133},[109,10831,10832],{"class":126},"; j",[109,10834,1327],{"class":122},[109,10836,1330],{"class":126},[109,10838,10839],{"class":111,"line":526},[109,10840,3865],{"class":126},[109,10842,10843,10846,10848,10851],{"class":111,"line":552},[109,10844,10845],{"class":126},"            tArray[i].sArray[j].sName ",[109,10847,130],{"class":122},[109,10849,10850],{"class":278}," \"Student_\"",[109,10852,137],{"class":126},[109,10854,10855,10857,10859],{"class":111,"line":557},[109,10856,10845],{"class":126},[109,10858,10795],{"class":122},[109,10860,10861],{"class":126}," nameSeed[j];\n",[109,10863,10864,10867,10870,10872,10874,10876,10878,10880,10882,10884,10886],{"class":111,"line":584},[109,10865,10866],{"class":122},"            int",[109,10868,10869],{"class":126}," random",[109,10871,130],{"class":122},[109,10873,3780],{"class":211},[109,10875,975],{"class":126},[109,10877,1865],{"class":122},[109,10879,2438],{"class":133},[109,10881,1348],{"class":122},[109,10883,1937],{"class":133},[109,10885,821],{"class":126},[109,10887,10888],{"class":115},"\u002F\u002F40~99\n",[109,10890,10891,10894,10896,10898],{"class":111,"line":611},[109,10892,10893],{"class":126},"            tArray[i].sArray[j].age ",[109,10895,130],{"class":122},[109,10897,10268],{"class":133},[109,10899,137],{"class":126},[109,10901,10902,10905,10907],{"class":111,"line":616},[109,10903,10904],{"class":126},"            tArray[i].sArray[j].score ",[109,10906,130],{"class":122},[109,10908,10909],{"class":126}," random;\n",[109,10911,10912],{"class":111,"line":633},[109,10913,3884],{"class":126},[109,10915,10916],{"class":111,"line":649},[109,10917,1361],{"class":126},[109,10919,10920],{"class":111,"line":676},[109,10921,742],{"class":126},[109,10923,10924],{"class":111,"line":703},[109,10925,10926],{"class":115},"\u002F\u002F打印所有信息的函数\n",[109,10928,10929,10931,10934,10936,10938,10940,10942,10945,10947,10949],{"class":111,"line":708},[109,10930,1166],{"class":122},[109,10932,10933],{"class":211}," printInfo",[109,10935,714],{"class":126},[109,10937,9085],{"class":122},[109,10939,10717],{"class":211},[109,10941,10720],{"class":6553},[109,10943,10944],{"class":126},"[], ",[109,10946,123],{"class":122},[109,10948,8657],{"class":6553},[109,10950,1330],{"class":126},[109,10952,10953],{"class":111,"line":723},[109,10954,808],{"class":126},[109,10956,10957,10959,10961,10963,10965,10967,10969,10971,10973,10975,10977],{"class":111,"line":728},[109,10958,1302],{"class":122},[109,10960,285],{"class":126},[109,10962,123],{"class":122},[109,10964,10756],{"class":126},[109,10966,130],{"class":122},[109,10968,734],{"class":133},[109,10970,10763],{"class":126},[109,10972,1320],{"class":122},[109,10974,10768],{"class":126},[109,10976,1327],{"class":122},[109,10978,1330],{"class":126},[109,10980,10981],{"class":111,"line":739},[109,10982,1335],{"class":126},[109,10984,10985,10988,10990,10993,10995,10998,11000],{"class":111,"line":9352},[109,10986,10987],{"class":126},"        cout ",[109,10989,275],{"class":122},[109,10991,10992],{"class":278}," \"Teacher: \"",[109,10994,282],{"class":122},[109,10996,10997],{"class":126}," tArray[i].tName ",[109,10999,275],{"class":122},[109,11001,301],{"class":126},[109,11003,11004,11006,11008,11010,11012,11014,11016,11018,11020,11022,11024,11026],{"class":111,"line":9364},[109,11005,4747],{"class":122},[109,11007,285],{"class":126},[109,11009,123],{"class":122},[109,11011,10818],{"class":126},[109,11013,130],{"class":122},[109,11015,734],{"class":133},[109,11017,10825],{"class":126},[109,11019,1320],{"class":122},[109,11021,3510],{"class":133},[109,11023,10832],{"class":126},[109,11025,1327],{"class":122},[109,11027,1330],{"class":126},[109,11029,11030],{"class":111,"line":9376},[109,11031,3865],{"class":126},[109,11033,11035,11038,11040,11043,11045,11048,11050,11053,11055],{"class":111,"line":11034},47,[109,11036,11037],{"class":126},"            cout ",[109,11039,275],{"class":122},[109,11041,11042],{"class":278}," \"",[109,11044,2627],{"class":133},[109,11046,11047],{"class":278},"Student: \"",[109,11049,282],{"class":122},[109,11051,11052],{"class":126}," tArray[i].sArray[j].sName",[109,11054,275],{"class":122},[109,11056,1068],{"class":126},[109,11058,11060,11062,11064,11066,11068,11071,11073,11076,11078],{"class":111,"line":11059},48,[109,11061,11037],{"class":126},[109,11063,275],{"class":122},[109,11065,11042],{"class":278},[109,11067,2627],{"class":133},[109,11069,11070],{"class":278},"Age: \"",[109,11072,282],{"class":122},[109,11074,11075],{"class":126}," tArray[i].sArray[j].age ",[109,11077,275],{"class":122},[109,11079,301],{"class":126},[109,11081,11083,11085,11087,11089,11091,11094,11096,11099,11101],{"class":111,"line":11082},49,[109,11084,11037],{"class":126},[109,11086,275],{"class":122},[109,11088,11042],{"class":278},[109,11090,2627],{"class":133},[109,11092,11093],{"class":278},"Score: \"",[109,11095,282],{"class":122},[109,11097,11098],{"class":126}," tArray[i].sArray[j].score ",[109,11100,275],{"class":122},[109,11102,11103],{"class":126}," endl;   \n",[109,11105,11107],{"class":111,"line":11106},50,[109,11108,3884],{"class":126},[109,11110,11112],{"class":111,"line":11111},51,[109,11113,1361],{"class":126},[109,11115,11117],{"class":111,"line":11116},52,[109,11118,742],{"class":126},[109,11120,11122,11124,11126],{"class":111,"line":11121},53,[109,11123,123],{"class":122},[109,11125,212],{"class":211},[109,11127,803],{"class":126},[109,11129,11131],{"class":111,"line":11130},54,[109,11132,808],{"class":126},[109,11134,11136],{"class":111,"line":11135},55,[109,11137,11138],{"class":115},"    \u002F\u002F随机数种子\n",[109,11140,11142,11144,11146,11148,11150,11152,11154,11156,11158],{"class":111,"line":11141},56,[109,11143,3731],{"class":211},[109,11145,3734],{"class":126},[109,11147,3737],{"class":122},[109,11149,173],{"class":122},[109,11151,290],{"class":126},[109,11153,3744],{"class":211},[109,11155,714],{"class":126},[109,11157,3749],{"class":133},[109,11159,3752],{"class":126},[109,11161,11163],{"class":111,"line":11162},57,[109,11164,11165],{"class":115},"    \u002F\u002F1.创建3名老师的数组\n",[109,11167,11169,11171,11173,11176,11178],{"class":111,"line":11168},58,[109,11170,9221],{"class":122},[109,11172,10717],{"class":211},[109,11174,11175],{"class":126}," tArray[",[109,11177,1612],{"class":133},[109,11179,6027],{"class":126},[109,11181,11183],{"class":111,"line":11182},59,[109,11184,11185],{"class":115},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[109,11187,11189,11191,11194,11196,11199,11202,11204,11206,11209,11211],{"class":111,"line":11188},60,[109,11190,232],{"class":122},[109,11192,11193],{"class":126}," len ",[109,11195,130],{"class":122},[109,11197,11198],{"class":122}," sizeof",[109,11200,11201],{"class":126},"(tArray) ",[109,11203,2116],{"class":122},[109,11205,11198],{"class":122},[109,11207,11208],{"class":126},"(tArray[",[109,11210,1314],{"class":133},[109,11212,5199],{"class":126},[109,11214,11216,11219],{"class":111,"line":11215},61,[109,11217,11218],{"class":211},"    allocateSpace",[109,11220,11221],{"class":126},"(tArray, len);\n",[109,11223,11225],{"class":111,"line":11224},62,[109,11226,11227],{"class":115},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[109,11229,11231,11234],{"class":111,"line":11230},63,[109,11232,11233],{"class":211},"    printInfo",[109,11235,11221],{"class":126},[109,11237,11239],{"class":111,"line":11238},64,[109,11240,158],{"emptyLinePlaceholder":157},[109,11242,11244],{"class":111,"line":11243},65,[109,11245,742],{"class":126},[765,11247,11248],{"start":119},[30,11249,11250,11253],{},[23,11251,11252],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11255,11256],{},"五名英雄信息如下：",[99,11258,11262],{"className":11259,"code":11260,"language":11261,"meta":104,"style":104},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[106,11263,11264,11282,11299,11316,11333],{"__ignoreMap":104},[109,11265,11266,11268,11271,11273,11275,11277,11280],{"class":111,"line":112},[109,11267,6254],{"class":126},[109,11269,11270],{"class":278},"\"刘备\"",[109,11272,1914],{"class":126},[109,11274,2307],{"class":133},[109,11276,1914],{"class":126},[109,11278,11279],{"class":278},"\"男\"",[109,11281,6267],{"class":126},[109,11283,11284,11286,11289,11291,11293,11295,11297],{"class":111,"line":119},[109,11285,6254],{"class":126},[109,11287,11288],{"class":278},"\"关羽\"",[109,11290,1914],{"class":126},[109,11292,2282],{"class":133},[109,11294,1914],{"class":126},[109,11296,11279],{"class":278},[109,11298,6267],{"class":126},[109,11300,11301,11303,11306,11308,11310,11312,11314],{"class":111,"line":140},[109,11302,6254],{"class":126},[109,11304,11305],{"class":278},"\"张飞\"",[109,11307,1914],{"class":126},[109,11309,2232],{"class":133},[109,11311,1914],{"class":126},[109,11313,11279],{"class":278},[109,11315,6267],{"class":126},[109,11317,11318,11320,11323,11325,11327,11329,11331],{"class":111,"line":154},[109,11319,6254],{"class":126},[109,11321,11322],{"class":278},"\"赵云\"",[109,11324,1914],{"class":126},[109,11326,2257],{"class":133},[109,11328,1914],{"class":126},[109,11330,11279],{"class":278},[109,11332,6267],{"class":126},[109,11334,11335,11337,11340,11342,11344,11346,11349],{"class":111,"line":161},[109,11336,6254],{"class":126},[109,11338,11339],{"class":278},"\"貂蝉\"",[109,11341,1914],{"class":126},[109,11343,2207],{"class":133},[109,11345,1914],{"class":126},[109,11347,11348],{"class":278},"\"女\"",[109,11350,6267],{"class":126},[19,11352,11353],{},"代码：",[99,11355,11357],{"className":101,"code":11356,"language":103,"meta":104,"style":104},"#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",[106,11358,11359,11365,11375,11381,11388,11392,11396,11402,11407,11411,11416,11439,11443,11468,11472,11505,11510,11539,11544,11559,11585,11605,11610,11615,11619,11623,11628,11650,11654,11678,11682,11744,11748,11752,11760,11764,11769,11780,11784,11800,11816,11832,11848,11864,11868,11888,11909,11914,11927,11934,11939,11945,11950,11963,11969],{"__ignoreMap":104},[109,11360,11361,11363],{"class":111,"line":112},[109,11362,3317],{"class":122},[109,11364,3320],{"class":278},[109,11366,11367,11369,11371,11373],{"class":111,"line":119},[109,11368,3325],{"class":122},[109,11370,3328],{"class":122},[109,11372,3331],{"class":211},[109,11374,137],{"class":126},[109,11376,11377,11379],{"class":111,"line":140},[109,11378,3317],{"class":122},[109,11380,9075],{"class":278},[109,11382,11383,11385],{"class":111,"line":154},[109,11384,9085],{"class":122},[109,11386,11387],{"class":211}," Sanguo\n",[109,11389,11390],{"class":111,"line":161},[109,11391,808],{"class":126},[109,11393,11394],{"class":111,"line":167},[109,11395,9111],{"class":126},[109,11397,11398,11400],{"class":111,"line":185},[109,11399,232],{"class":122},[109,11401,9123],{"class":126},[109,11403,11404],{"class":111,"line":201},[109,11405,11406],{"class":126},"    string gender;\n",[109,11408,11409],{"class":111,"line":206},[109,11410,5337],{"class":126},[109,11412,11413],{"class":111,"line":218},[109,11414,11415],{"class":115},"\u002F\u002F定义排序函数\n",[109,11417,11418,11420,11422,11424,11427,11429,11431,11433,11435,11437],{"class":111,"line":223},[109,11419,1166],{"class":122},[109,11421,8642],{"class":211},[109,11423,714],{"class":126},[109,11425,11426],{"class":211},"Sanguo",[109,11428,797],{"class":122},[109,11430,2227],{"class":6553},[109,11432,1914],{"class":126},[109,11434,123],{"class":122},[109,11436,8657],{"class":6553},[109,11438,1330],{"class":126},[109,11440,11441],{"class":111,"line":229},[109,11442,808],{"class":126},[109,11444,11445,11447,11449,11451,11453,11455,11457,11459,11461,11464,11466],{"class":111,"line":244},[109,11446,1302],{"class":122},[109,11448,714],{"class":126},[109,11450,123],{"class":122},[109,11452,1309],{"class":126},[109,11454,130],{"class":122},[109,11456,1314],{"class":133},[109,11458,1317],{"class":126},[109,11460,1320],{"class":122},[109,11462,11463],{"class":126},"len;i",[109,11465,1327],{"class":122},[109,11467,1330],{"class":126},[109,11469,11470],{"class":111,"line":258},[109,11471,1335],{"class":126},[109,11473,11474,11477,11479,11481,11483,11485,11487,11489,11491,11493,11495,11497,11499,11501,11503],{"class":111,"line":263},[109,11475,11476],{"class":122},"     for",[109,11478,285],{"class":126},[109,11480,123],{"class":122},[109,11482,4754],{"class":126},[109,11484,130],{"class":122},[109,11486,1314],{"class":133},[109,11488,4761],{"class":126},[109,11490,1320],{"class":122},[109,11492,8684],{"class":126},[109,11494,2064],{"class":122},[109,11496,1755],{"class":133},[109,11498,2064],{"class":122},[109,11500,4893],{"class":126},[109,11502,1327],{"class":122},[109,11504,1330],{"class":126},[109,11506,11507],{"class":111,"line":269},[109,11508,11509],{"class":126},"     {\n",[109,11511,11512,11515,11518,11520,11523,11525,11528,11530,11532,11534,11536],{"class":111,"line":304},[109,11513,11514],{"class":122},"         if",[109,11516,11517],{"class":126}," ((s",[109,11519,1348],{"class":122},[109,11521,11522],{"class":126},"j)->age ",[109,11524,2490],{"class":122},[109,11526,11527],{"class":126}," (s",[109,11529,1348],{"class":122},[109,11531,2000],{"class":126},[109,11533,1348],{"class":122},[109,11535,1755],{"class":133},[109,11537,11538],{"class":126},")->age)\n",[109,11540,11541],{"class":111,"line":331},[109,11542,11543],{"class":126},"         {\n",[109,11545,11546,11549,11551,11554,11556],{"class":111,"line":336},[109,11547,11548],{"class":126},"             Sanguo temp",[109,11550,8479],{"class":122},[109,11552,11553],{"class":126},"(s",[109,11555,1348],{"class":122},[109,11557,11558],{"class":126},"j);\n",[109,11560,11561,11564,11566,11568,11571,11573,11575,11577,11579,11581,11583],{"class":111,"line":364},[109,11562,11563],{"class":122},"             *",[109,11565,11553],{"class":126},[109,11567,1348],{"class":122},[109,11569,11570],{"class":126},"j)",[109,11572,8479],{"class":122},[109,11574,11553],{"class":126},[109,11576,1348],{"class":122},[109,11578,2000],{"class":126},[109,11580,1348],{"class":122},[109,11582,1755],{"class":133},[109,11584,720],{"class":126},[109,11586,11587,11589,11591,11593,11595,11597,11599,11601,11603],{"class":111,"line":391},[109,11588,11563],{"class":122},[109,11590,11553],{"class":126},[109,11592,1348],{"class":122},[109,11594,2000],{"class":126},[109,11596,1348],{"class":122},[109,11598,1755],{"class":133},[109,11600,290],{"class":126},[109,11602,130],{"class":122},[109,11604,5619],{"class":126},[109,11606,11607],{"class":111,"line":396},[109,11608,11609],{"class":126},"         }\n",[109,11611,11612],{"class":111,"line":402},[109,11613,11614],{"class":126},"     }\n",[109,11616,11617],{"class":111,"line":419},[109,11618,1361],{"class":126},[109,11620,11621],{"class":111,"line":435},[109,11622,742],{"class":126},[109,11624,11625],{"class":111,"line":440},[109,11626,11627],{"class":115},"\u002F\u002F定义打印函数\n",[109,11629,11630,11632,11634,11636,11638,11640,11642,11644,11646,11648],{"class":111,"line":467},[109,11631,1166],{"class":122},[109,11633,10933],{"class":211},[109,11635,714],{"class":126},[109,11637,11426],{"class":211},[109,11639,797],{"class":122},[109,11641,2227],{"class":6553},[109,11643,1914],{"class":126},[109,11645,123],{"class":122},[109,11647,8657],{"class":6553},[109,11649,1330],{"class":126},[109,11651,11652],{"class":111,"line":494},[109,11653,808],{"class":126},[109,11655,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676],{"class":111,"line":499},[109,11657,1302],{"class":122},[109,11659,285],{"class":126},[109,11661,123],{"class":122},[109,11663,1309],{"class":126},[109,11665,130],{"class":122},[109,11667,1314],{"class":133},[109,11669,1317],{"class":126},[109,11671,1320],{"class":122},[109,11673,11463],{"class":126},[109,11675,1327],{"class":122},[109,11677,1330],{"class":126},[109,11679,11680],{"class":111,"line":526},[109,11681,1335],{"class":126},[109,11683,11684,11686,11688,11690,11692,11695,11697,11699,11701,11704,11706,11708,11710,11713,11715,11717,11719,11722,11724,11726,11728,11731,11733,11735,11737,11740,11742],{"class":111,"line":552},[109,11685,1396],{"class":126},[109,11687,275],{"class":122},[109,11689,1789],{"class":278},[109,11691,2627],{"class":133},[109,11693,11694],{"class":278},"姓名：\"",[109,11696,275],{"class":122},[109,11698,11553],{"class":126},[109,11700,1348],{"class":122},[109,11702,11703],{"class":126},"i)->name",[109,11705,275],{"class":122},[109,11707,1789],{"class":278},[109,11709,2627],{"class":133},[109,11711,11712],{"class":278},"年龄：\"",[109,11714,275],{"class":122},[109,11716,11553],{"class":126},[109,11718,1348],{"class":122},[109,11720,11721],{"class":126},"i)->age",[109,11723,275],{"class":122},[109,11725,1789],{"class":278},[109,11727,2627],{"class":133},[109,11729,11730],{"class":278},"性别：\"",[109,11732,275],{"class":122},[109,11734,11553],{"class":126},[109,11736,1348],{"class":122},[109,11738,11739],{"class":126},"i)->gender",[109,11741,275],{"class":122},[109,11743,1068],{"class":126},[109,11745,11746],{"class":111,"line":557},[109,11747,1361],{"class":126},[109,11749,11750],{"class":111,"line":584},[109,11751,742],{"class":126},[109,11753,11754,11756,11758],{"class":111,"line":611},[109,11755,123],{"class":122},[109,11757,212],{"class":211},[109,11759,803],{"class":126},[109,11761,11762],{"class":111,"line":616},[109,11763,808],{"class":126},[109,11765,11766],{"class":111,"line":633},[109,11767,11768],{"class":115},"    \u002F\u002F定义结构体变量\n",[109,11770,11771,11774,11776,11778],{"class":111,"line":649},[109,11772,11773],{"class":126},"    Sanguo s1[",[109,11775,1856],{"class":133},[109,11777,2470],{"class":126},[109,11779,6245],{"class":122},[109,11781,11782],{"class":111,"line":676},[109,11783,1335],{"class":126},[109,11785,11786,11788,11790,11792,11794,11796,11798],{"class":111,"line":703},[109,11787,6254],{"class":126},[109,11789,11270],{"class":278},[109,11791,1914],{"class":126},[109,11793,2307],{"class":133},[109,11795,1914],{"class":126},[109,11797,11279],{"class":278},[109,11799,6267],{"class":126},[109,11801,11802,11804,11806,11808,11810,11812,11814],{"class":111,"line":708},[109,11803,6254],{"class":126},[109,11805,11288],{"class":278},[109,11807,1914],{"class":126},[109,11809,2282],{"class":133},[109,11811,1914],{"class":126},[109,11813,11279],{"class":278},[109,11815,6267],{"class":126},[109,11817,11818,11820,11822,11824,11826,11828,11830],{"class":111,"line":723},[109,11819,6254],{"class":126},[109,11821,11305],{"class":278},[109,11823,1914],{"class":126},[109,11825,2232],{"class":133},[109,11827,1914],{"class":126},[109,11829,11279],{"class":278},[109,11831,6267],{"class":126},[109,11833,11834,11836,11838,11840,11842,11844,11846],{"class":111,"line":728},[109,11835,6254],{"class":126},[109,11837,11322],{"class":278},[109,11839,1914],{"class":126},[109,11841,2257],{"class":133},[109,11843,1914],{"class":126},[109,11845,11279],{"class":278},[109,11847,6267],{"class":126},[109,11849,11850,11852,11854,11856,11858,11860,11862],{"class":111,"line":739},[109,11851,6254],{"class":126},[109,11853,11339],{"class":278},[109,11855,1914],{"class":126},[109,11857,2207],{"class":133},[109,11859,1914],{"class":126},[109,11861,11348],{"class":278},[109,11863,6267],{"class":126},[109,11865,11866],{"class":111,"line":9352},[109,11867,6288],{"class":126},[109,11869,11870,11872,11874,11876,11879,11881,11884,11886],{"class":111,"line":9364},[109,11871,232],{"class":122},[109,11873,8657],{"class":126},[109,11875,5542],{"class":122},[109,11877,11878],{"class":126},"(s1)",[109,11880,5548],{"class":122},[109,11882,11883],{"class":126},"(s1[",[109,11885,1314],{"class":133},[109,11887,5199],{"class":126},[109,11889,11890,11893,11895,11898,11900,11902,11905,11907],{"class":111,"line":9376},[109,11891,11892],{"class":126},"    Sanguo ",[109,11894,1988],{"class":122},[109,11896,11897],{"class":126},"s ",[109,11899,130],{"class":122},[109,11901,831],{"class":122},[109,11903,11904],{"class":126},"s1[",[109,11906,1314],{"class":133},[109,11908,6027],{"class":126},[109,11910,11911],{"class":111,"line":11034},[109,11912,11913],{"class":115},"    \u002F\u002F排序前：\n",[109,11915,11916,11918,11920,11923,11925],{"class":111,"line":11059},[109,11917,272],{"class":126},[109,11919,275],{"class":122},[109,11921,11922],{"class":278}," \"排序前：\"",[109,11924,282],{"class":122},[109,11926,301],{"class":126},[109,11928,11929,11931],{"class":111,"line":11082},[109,11930,11233],{"class":211},[109,11932,11933],{"class":126},"(s,len);\n",[109,11935,11936],{"class":111,"line":11106},[109,11937,11938],{"class":115},"    \u002F\u002F调用排序函数\n",[109,11940,11941,11943],{"class":111,"line":11111},[109,11942,8924],{"class":211},[109,11944,11933],{"class":126},[109,11946,11947],{"class":111,"line":11116},[109,11948,11949],{"class":115},"    \u002F\u002F排序后\n",[109,11951,11952,11954,11956,11959,11961],{"class":111,"line":11121},[109,11953,272],{"class":126},[109,11955,275],{"class":122},[109,11957,11958],{"class":278}," \"排序后：\"",[109,11960,282],{"class":122},[109,11962,301],{"class":126},[109,11964,11965,11967],{"class":111,"line":11130},[109,11966,11233],{"class":211},[109,11968,11933],{"class":126},[109,11970,11971],{"class":111,"line":11135},[109,11972,742],{"class":126},[19,11974,11975,11976,11978],{},"注意：使用指针时直接用传首地址**&s",[109,11977,1314],{},"**",[1467,11980,11981],{},"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":104,"searchDepth":119,"depth":119,"links":11983},[11984,11985,11986,11987,11988,11989,11990],{"id":9029,"depth":119,"text":9030},{"id":9384,"depth":119,"text":9385},{"id":9653,"depth":119,"text":9654},{"id":9818,"depth":119,"text":9819},{"id":10034,"depth":119,"text":10035},{"id":10354,"depth":119,"text":10355},{"id":10582,"depth":119,"text":10583},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9018,"description":9026},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":4,"title":5,"body":11997,"description":104,"extension":1476,"meta":13201,"navigation":157,"path":1478,"seo":13202,"stem":1480,"__hash__":1481},{"type":7,"value":11998,"toc":13195},[11999,12001,12003,12007,12017,12021,12023,12025,12029,12033,12035,12039,12043,12047,12049,12051,12053,12575,12577,12587,12589,12593,12603,12733,12735,12739,12741,12745,12751,12851,12853,12857,12859,12863,12865,12869,12871,13193],[10,12000,5],{"id":12},[14,12002,17],{"id":16},[19,12004,21,12005],{},[23,12006,25],{},[27,12008,12009,12011,12013,12015],{},[30,12010,32],{},[30,12012,35],{},[30,12014,38],{},[30,12016,41],{},[19,12018,12019],{},[23,12020,46],{},[19,12022,49],{},[51,12024,54],{"id":53},[19,12026,57,12027,61],{},[23,12028,60],{},[19,12030,64,12031],{},[23,12032,67],{},[19,12034,70],{},[19,12036,73,12037,77],{},[23,12038,76],{},[19,12040,73,12041,83],{},[23,12042,82],{},[19,12044,64,12045],{},[23,12046,88],{},[19,12048,91],{},[19,12050,94],{},[19,12052,97],{},[99,12054,12055],{"className":101,"code":102,"language":103,"meta":104,"style":104},[106,12056,12057,12061,12073,12085,12089,12093,12107,12121,12125,12133,12137,12141,12153,12165,12169,12173,12197,12221,12225,12249,12273,12277,12281,12295,12309,12313,12337,12361,12365,12389,12413,12417,12441,12465,12469,12483,12497,12521,12545,12549,12559,12563,12571],{"__ignoreMap":104},[109,12058,12059],{"class":111,"line":112},[109,12060,116],{"class":115},[109,12062,12063,12065,12067,12069,12071],{"class":111,"line":119},[109,12064,123],{"class":122},[109,12066,127],{"class":126},[109,12068,130],{"class":122},[109,12070,134],{"class":133},[109,12072,137],{"class":126},[109,12074,12075,12077,12079,12081,12083],{"class":111,"line":140},[109,12076,123],{"class":122},[109,12078,145],{"class":126},[109,12080,130],{"class":122},[109,12082,134],{"class":133},[109,12084,137],{"class":126},[109,12086,12087],{"class":111,"line":154},[109,12088,158],{"emptyLinePlaceholder":157},[109,12090,12091],{"class":111,"line":161},[109,12092,164],{"class":115},[109,12094,12095,12097,12099,12101,12103,12105],{"class":111,"line":167},[109,12096,170],{"class":122},[109,12098,173],{"class":122},[109,12100,176],{"class":126},[109,12102,130],{"class":122},[109,12104,134],{"class":133},[109,12106,137],{"class":126},[109,12108,12109,12111,12113,12115,12117,12119],{"class":111,"line":185},[109,12110,170],{"class":122},[109,12112,173],{"class":122},[109,12114,192],{"class":126},[109,12116,130],{"class":122},[109,12118,134],{"class":133},[109,12120,137],{"class":126},[109,12122,12123],{"class":111,"line":201},[109,12124,158],{"emptyLinePlaceholder":157},[109,12126,12127,12129,12131],{"class":111,"line":206},[109,12128,123],{"class":122},[109,12130,212],{"class":211},[109,12132,215],{"class":126},[109,12134,12135],{"class":111,"line":218},[109,12136,158],{"emptyLinePlaceholder":157},[109,12138,12139],{"class":111,"line":223},[109,12140,226],{"class":115},[109,12142,12143,12145,12147,12149,12151],{"class":111,"line":229},[109,12144,232],{"class":122},[109,12146,235],{"class":126},[109,12148,130],{"class":122},[109,12150,134],{"class":133},[109,12152,137],{"class":126},[109,12154,12155,12157,12159,12161,12163],{"class":111,"line":244},[109,12156,232],{"class":122},[109,12158,249],{"class":126},[109,12160,130],{"class":122},[109,12162,134],{"class":133},[109,12164,137],{"class":126},[109,12166,12167],{"class":111,"line":258},[109,12168,158],{"emptyLinePlaceholder":157},[109,12170,12171],{"class":111,"line":263},[109,12172,266],{"class":115},[109,12174,12175,12177,12179,12181,12183,12185,12187,12189,12191,12193,12195],{"class":111,"line":269},[109,12176,272],{"class":126},[109,12178,275],{"class":122},[109,12180,279],{"class":278},[109,12182,282],{"class":122},[109,12184,285],{"class":126},[109,12186,123],{"class":122},[109,12188,290],{"class":126},[109,12190,293],{"class":122},[109,12192,296],{"class":126},[109,12194,275],{"class":122},[109,12196,301],{"class":126},[109,12198,12199,12201,12203,12205,12207,12209,12211,12213,12215,12217,12219],{"class":111,"line":304},[109,12200,272],{"class":126},[109,12202,275],{"class":122},[109,12204,311],{"class":278},[109,12206,282],{"class":122},[109,12208,285],{"class":126},[109,12210,123],{"class":122},[109,12212,290],{"class":126},[109,12214,293],{"class":122},[109,12216,324],{"class":126},[109,12218,275],{"class":122},[109,12220,301],{"class":126},[109,12222,12223],{"class":111,"line":331},[109,12224,158],{"emptyLinePlaceholder":157},[109,12226,12227,12229,12231,12233,12235,12237,12239,12241,12243,12245,12247],{"class":111,"line":336},[109,12228,272],{"class":126},[109,12230,275],{"class":122},[109,12232,343],{"class":278},[109,12234,282],{"class":122},[109,12236,348],{"class":126},[109,12238,123],{"class":122},[109,12240,290],{"class":126},[109,12242,293],{"class":122},[109,12244,357],{"class":126},[109,12246,275],{"class":122},[109,12248,301],{"class":126},[109,12250,12251,12253,12255,12257,12259,12261,12263,12265,12267,12269,12271],{"class":111,"line":364},[109,12252,272],{"class":126},[109,12254,275],{"class":122},[109,12256,371],{"class":278},[109,12258,282],{"class":122},[109,12260,348],{"class":126},[109,12262,123],{"class":122},[109,12264,290],{"class":126},[109,12266,293],{"class":122},[109,12268,384],{"class":126},[109,12270,275],{"class":122},[109,12272,301],{"class":126},[109,12274,12275],{"class":111,"line":391},[109,12276,158],{"emptyLinePlaceholder":157},[109,12278,12279],{"class":111,"line":396},[109,12280,399],{"class":115},[109,12282,12283,12285,12287,12289,12291,12293],{"class":111,"line":402},[109,12284,405],{"class":122},[109,12286,173],{"class":122},[109,12288,410],{"class":126},[109,12290,130],{"class":122},[109,12292,134],{"class":133},[109,12294,137],{"class":126},[109,12296,12297,12299,12301,12303,12305,12307],{"class":111,"line":419},[109,12298,405],{"class":122},[109,12300,173],{"class":122},[109,12302,426],{"class":126},[109,12304,130],{"class":122},[109,12306,134],{"class":133},[109,12308,137],{"class":126},[109,12310,12311],{"class":111,"line":435},[109,12312,158],{"emptyLinePlaceholder":157},[109,12314,12315,12317,12319,12321,12323,12325,12327,12329,12331,12333,12335],{"class":111,"line":440},[109,12316,272],{"class":126},[109,12318,275],{"class":122},[109,12320,447],{"class":278},[109,12322,282],{"class":122},[109,12324,285],{"class":126},[109,12326,123],{"class":122},[109,12328,290],{"class":126},[109,12330,293],{"class":122},[109,12332,460],{"class":126},[109,12334,275],{"class":122},[109,12336,301],{"class":126},[109,12338,12339,12341,12343,12345,12347,12349,12351,12353,12355,12357,12359],{"class":111,"line":467},[109,12340,272],{"class":126},[109,12342,275],{"class":122},[109,12344,474],{"class":278},[109,12346,282],{"class":122},[109,12348,285],{"class":126},[109,12350,123],{"class":122},[109,12352,290],{"class":126},[109,12354,293],{"class":122},[109,12356,487],{"class":126},[109,12358,275],{"class":122},[109,12360,301],{"class":126},[109,12362,12363],{"class":111,"line":494},[109,12364,158],{"emptyLinePlaceholder":157},[109,12366,12367,12369,12371,12373,12375,12377,12379,12381,12383,12385,12387],{"class":111,"line":499},[109,12368,272],{"class":126},[109,12370,275],{"class":122},[109,12372,506],{"class":278},[109,12374,282],{"class":122},[109,12376,285],{"class":126},[109,12378,123],{"class":122},[109,12380,290],{"class":126},[109,12382,293],{"class":122},[109,12384,519],{"class":278},[109,12386,282],{"class":122},[109,12388,301],{"class":126},[109,12390,12391,12393,12395,12397,12399,12401,12403,12405,12407,12409,12411],{"class":111,"line":526},[109,12392,272],{"class":126},[109,12394,275],{"class":122},[109,12396,506],{"class":278},[109,12398,282],{"class":122},[109,12400,285],{"class":126},[109,12402,123],{"class":122},[109,12404,290],{"class":126},[109,12406,293],{"class":122},[109,12408,545],{"class":278},[109,12410,282],{"class":122},[109,12412,301],{"class":126},[109,12414,12415],{"class":111,"line":552},[109,12416,158],{"emptyLinePlaceholder":157},[109,12418,12419,12421,12423,12425,12427,12429,12431,12433,12435,12437,12439],{"class":111,"line":557},[109,12420,272],{"class":126},[109,12422,275],{"class":122},[109,12424,564],{"class":278},[109,12426,282],{"class":122},[109,12428,285],{"class":126},[109,12430,123],{"class":122},[109,12432,290],{"class":126},[109,12434,293],{"class":122},[109,12436,577],{"class":126},[109,12438,275],{"class":122},[109,12440,301],{"class":126},[109,12442,12443,12445,12447,12449,12451,12453,12455,12457,12459,12461,12463],{"class":111,"line":584},[109,12444,272],{"class":126},[109,12446,275],{"class":122},[109,12448,591],{"class":278},[109,12450,282],{"class":122},[109,12452,285],{"class":126},[109,12454,123],{"class":122},[109,12456,290],{"class":126},[109,12458,293],{"class":122},[109,12460,604],{"class":126},[109,12462,275],{"class":122},[109,12464,301],{"class":126},[109,12466,12467],{"class":111,"line":611},[109,12468,158],{"emptyLinePlaceholder":157},[109,12470,12471,12473,12475,12477,12479,12481],{"class":111,"line":616},[109,12472,619],{"class":122},[109,12474,173],{"class":122},[109,12476,624],{"class":126},[109,12478,130],{"class":122},[109,12480,134],{"class":133},[109,12482,137],{"class":126},[109,12484,12485,12487,12489,12491,12493,12495],{"class":111,"line":633},[109,12486,619],{"class":122},[109,12488,173],{"class":122},[109,12490,640],{"class":126},[109,12492,130],{"class":122},[109,12494,134],{"class":133},[109,12496,137],{"class":126},[109,12498,12499,12501,12503,12505,12507,12509,12511,12513,12515,12517,12519],{"class":111,"line":649},[109,12500,272],{"class":126},[109,12502,275],{"class":122},[109,12504,656],{"class":278},[109,12506,282],{"class":122},[109,12508,285],{"class":126},[109,12510,123],{"class":122},[109,12512,290],{"class":126},[109,12514,293],{"class":122},[109,12516,669],{"class":126},[109,12518,275],{"class":122},[109,12520,301],{"class":126},[109,12522,12523,12525,12527,12529,12531,12533,12535,12537,12539,12541,12543],{"class":111,"line":676},[109,12524,272],{"class":126},[109,12526,275],{"class":122},[109,12528,683],{"class":278},[109,12530,282],{"class":122},[109,12532,285],{"class":126},[109,12534,123],{"class":122},[109,12536,290],{"class":126},[109,12538,293],{"class":122},[109,12540,696],{"class":126},[109,12542,275],{"class":122},[109,12544,301],{"class":126},[109,12546,12547],{"class":111,"line":703},[109,12548,158],{"emptyLinePlaceholder":157},[109,12550,12551,12553,12555,12557],{"class":111,"line":708},[109,12552,711],{"class":211},[109,12554,714],{"class":126},[109,12556,717],{"class":278},[109,12558,720],{"class":126},[109,12560,12561],{"class":111,"line":723},[109,12562,158],{"emptyLinePlaceholder":157},[109,12564,12565,12567,12569],{"class":111,"line":728},[109,12566,731],{"class":122},[109,12568,734],{"class":133},[109,12570,137],{"class":126},[109,12572,12573],{"class":111,"line":739},[109,12574,742],{"class":126},[19,12576,745],{},[27,12578,12579,12581,12583,12585],{},[30,12580,750],{},[30,12582,753],{},[30,12584,756],{},[30,12586,759],{},[51,12588,763],{"id":762},[765,12590,12591],{},[30,12592,769],{},[27,12594,12595,12599],{},[30,12596,774,12597,778],{},[23,12598,777],{},[30,12600,781,12601,785],{},[23,12602,784],{},[99,12604,12605],{"className":101,"code":788,"language":103,"meta":104,"style":104},[106,12606,12607,12617,12621,12635,12645,12649,12653,12661,12665,12679,12695,12711,12721,12729],{"__ignoreMap":104},[109,12608,12609,12611,12613,12615],{"class":111,"line":112},[109,12610,123],{"class":122},[109,12612,797],{"class":122},[109,12614,800],{"class":211},[109,12616,803],{"class":126},[109,12618,12619],{"class":111,"line":119},[109,12620,808],{"class":126},[109,12622,12623,12625,12627,12629,12631,12633],{"class":111,"line":140},[109,12624,232],{"class":122},[109,12626,235],{"class":126},[109,12628,130],{"class":122},[109,12630,134],{"class":133},[109,12632,821],{"class":126},[109,12634,824],{"class":115},[109,12636,12637,12639,12641,12643],{"class":111,"line":154},[109,12638,731],{"class":122},[109,12640,831],{"class":122},[109,12642,834],{"class":126},[109,12644,837],{"class":115},[109,12646,12647],{"class":111,"line":161},[109,12648,742],{"class":126},[109,12650,12651],{"class":111,"line":167},[109,12652,158],{"emptyLinePlaceholder":157},[109,12654,12655,12657,12659],{"class":111,"line":185},[109,12656,123],{"class":122},[109,12658,212],{"class":211},[109,12660,215],{"class":126},[109,12662,12663],{"class":111,"line":201},[109,12664,858],{"class":115},[109,12666,12667,12669,12671,12673,12675,12677],{"class":111,"line":206},[109,12668,232],{"class":122},[109,12670,797],{"class":122},[109,12672,867],{"class":126},[109,12674,130],{"class":122},[109,12676,800],{"class":211},[109,12678,874],{"class":126},[109,12680,12681,12683,12685,12687,12689,12691,12693],{"class":111,"line":218},[109,12682,272],{"class":126},[109,12684,275],{"class":122},[109,12686,797],{"class":122},[109,12688,867],{"class":126},[109,12690,275],{"class":122},[109,12692,889],{"class":126},[109,12694,892],{"class":115},[109,12696,12697,12699,12701,12703,12705,12707,12709],{"class":111,"line":223},[109,12698,272],{"class":126},[109,12700,275],{"class":122},[109,12702,797],{"class":122},[109,12704,867],{"class":126},[109,12706,275],{"class":122},[109,12708,889],{"class":126},[109,12710,909],{"class":115},[109,12712,12713,12715,12717,12719],{"class":111,"line":229},[109,12714,711],{"class":211},[109,12716,714],{"class":126},[109,12718,717],{"class":278},[109,12720,720],{"class":126},[109,12722,12723,12725,12727],{"class":111,"line":244},[109,12724,731],{"class":122},[109,12726,734],{"class":133},[109,12728,137],{"class":126},[109,12730,12731],{"class":111,"line":258},[109,12732,742],{"class":126},[19,12734,934],{},[19,12736,12737],{},[938,12738],{"alt":940,"src":941},[19,12740,944],{},[765,12742,12743],{"start":119},[30,12744,949],{},[27,12746,12747,12749],{},[30,12748,954],{},[30,12750,957],{},[99,12752,12753],{"className":101,"code":960,"language":103,"meta":104,"style":104},[106,12754,12755,12767,12771,12775,12795,12801,12805,12813,12817,12821,12835,12847],{"__ignoreMap":104},[109,12756,12757,12759,12761,12763,12765],{"class":111,"line":112},[109,12758,123],{"class":122},[109,12760,969],{"class":122},[109,12762,972],{"class":211},[109,12764,975],{"class":126},[109,12766,978],{"class":115},[109,12768,12769],{"class":111,"line":119},[109,12770,808],{"class":126},[109,12772,12773],{"class":111,"line":140},[109,12774,987],{"class":115},[109,12776,12777,12779,12781,12783,12785,12787,12789,12791,12793],{"class":111,"line":154},[109,12778,992],{"class":122},[109,12780,797],{"class":122},[109,12782,19],{"class":126},[109,12784,130],{"class":122},[109,12786,1001],{"class":122},[109,12788,173],{"class":122},[109,12790,714],{"class":126},[109,12792,1008],{"class":133},[109,12794,720],{"class":126},[109,12796,12797,12799],{"class":111,"line":161},[109,12798,1015],{"class":122},[109,12800,1018],{"class":126},[109,12802,12803],{"class":111,"line":167},[109,12804,742],{"class":126},[109,12806,12807,12809,12811],{"class":111,"line":185},[109,12808,123],{"class":122},[109,12810,212],{"class":211},[109,12812,803],{"class":126},[109,12814,12815],{"class":111,"line":201},[109,12816,808],{"class":126},[109,12818,12819],{"class":111,"line":206},[109,12820,1039],{"class":115},[109,12822,12823,12825,12827,12829,12831,12833],{"class":111,"line":218},[109,12824,232],{"class":122},[109,12826,797],{"class":122},[109,12828,19],{"class":126},[109,12830,130],{"class":122},[109,12832,972],{"class":211},[109,12834,874],{"class":126},[109,12836,12837,12839,12841,12843,12845],{"class":111,"line":223},[109,12838,1058],{"class":126},[109,12840,1061],{"class":122},[109,12842,19],{"class":126},[109,12844,275],{"class":122},[109,12846,1068],{"class":126},[109,12848,12849],{"class":111,"line":229},[109,12850,742],{"class":126},[19,12852,1075],{},[19,12854,12855],{},[938,12856],{"alt":940,"src":1080},[19,12858,1083],{},[765,12860,12861],{"start":140},[30,12862,1088],{},[19,12864,1091],{},[19,12866,1094,12867],{},[106,12868,1097],{},[19,12870,1100],{},[99,12872,12873],{"className":101,"code":1103,"language":103,"meta":104,"style":104},[106,12874,12875,12879,12889,12893,12897,12901,12921,12925,12933,12937,12951,12963,12975,12987,12991,12995,13003,13007,13011,13019,13023,13027,13047,13073,13077,13093,13097,13123,13127,13139,13143,13147,13151,13157,13161,13165,13173,13177,13183,13189],{"__ignoreMap":104},[109,12876,12877],{"class":111,"line":112},[109,12878,1110],{"class":115},[109,12880,12881,12883,12885,12887],{"class":111,"line":119},[109,12882,123],{"class":122},[109,12884,797],{"class":122},[109,12886,972],{"class":211},[109,12888,803],{"class":126},[109,12890,12891],{"class":111,"line":140},[109,12892,808],{"class":126},[109,12894,12895],{"class":111,"line":154},[109,12896,1129],{"class":115},[109,12898,12899],{"class":111,"line":161},[109,12900,1134],{"class":115},[109,12902,12903,12905,12907,12909,12911,12913,12915,12917,12919],{"class":111,"line":167},[109,12904,232],{"class":122},[109,12906,797],{"class":122},[109,12908,19],{"class":126},[109,12910,1145],{"class":122},[109,12912,173],{"class":122},[109,12914,714],{"class":126},[109,12916,1008],{"class":133},[109,12918,1154],{"class":126},[109,12920,1157],{"class":115},[109,12922,12923],{"class":111,"line":185},[109,12924,742],{"class":126},[109,12926,12927,12929,12931],{"class":111,"line":201},[109,12928,1166],{"class":122},[109,12930,1169],{"class":211},[109,12932,803],{"class":126},[109,12934,12935],{"class":111,"line":206},[109,12936,808],{"class":126},[109,12938,12939,12941,12943,12945,12947,12949],{"class":111,"line":218},[109,12940,232],{"class":122},[109,12942,797],{"class":122},[109,12944,19],{"class":126},[109,12946,130],{"class":122},[109,12948,972],{"class":211},[109,12950,874],{"class":126},[109,12952,12953,12955,12957,12959,12961],{"class":111,"line":223},[109,12954,1058],{"class":126},[109,12956,1061],{"class":122},[109,12958,19],{"class":126},[109,12960,275],{"class":122},[109,12962,1068],{"class":126},[109,12964,12965,12967,12969,12971,12973],{"class":111,"line":229},[109,12966,1058],{"class":126},[109,12968,1061],{"class":122},[109,12970,19],{"class":126},[109,12972,275],{"class":122},[109,12974,1068],{"class":126},[109,12976,12977,12979,12981,12983,12985],{"class":111,"line":244},[109,12978,1058],{"class":126},[109,12980,1061],{"class":122},[109,12982,19],{"class":126},[109,12984,275],{"class":122},[109,12986,1068],{"class":126},[109,12988,12989],{"class":111,"line":258},[109,12990,1230],{"class":115},[109,12992,12993],{"class":111,"line":263},[109,12994,1235],{"class":115},[109,12996,12997,12999,13001],{"class":111,"line":269},[109,12998,1240],{"class":122},[109,13000,1243],{"class":126},[109,13002,1246],{"class":115},[109,13004,13005],{"class":111,"line":304},[109,13006,742],{"class":126},[109,13008,13009],{"class":111,"line":331},[109,13010,1255],{"class":115},[109,13012,13013,13015,13017],{"class":111,"line":336},[109,13014,1166],{"class":122},[109,13016,1262],{"class":211},[109,13018,803],{"class":126},[109,13020,13021],{"class":111,"line":364},[109,13022,808],{"class":126},[109,13024,13025],{"class":111,"line":391},[109,13026,1273],{"class":115},[109,13028,13029,13031,13033,13035,13037,13039,13041,13043,13045],{"class":111,"line":396},[109,13030,232],{"class":122},[109,13032,797],{"class":122},[109,13034,1282],{"class":126},[109,13036,1145],{"class":122},[109,13038,173],{"class":122},[109,13040,1289],{"class":126},[109,13042,1008],{"class":133},[109,13044,1294],{"class":126},[109,13046,1297],{"class":115},[109,13048,13049,13051,13053,13055,13057,13059,13061,13063,13065,13067,13069,13071],{"class":111,"line":402},[109,13050,1302],{"class":122},[109,13052,285],{"class":126},[109,13054,123],{"class":122},[109,13056,1309],{"class":126},[109,13058,130],{"class":122},[109,13060,1314],{"class":133},[109,13062,1317],{"class":126},[109,13064,1320],{"class":122},[109,13066,1008],{"class":133},[109,13068,1317],{"class":126},[109,13070,1327],{"class":122},[109,13072,1330],{"class":126},[109,13074,13075],{"class":111,"line":419},[109,13076,1335],{"class":126},[109,13078,13079,13081,13083,13085,13087,13089,13091],{"class":111,"line":435},[109,13080,1340],{"class":126},[109,13082,130],{"class":122},[109,13084,1345],{"class":126},[109,13086,1348],{"class":122},[109,13088,1351],{"class":133},[109,13090,821],{"class":126},[109,13092,1356],{"class":115},[109,13094,13095],{"class":111,"line":440},[109,13096,1361],{"class":126},[109,13098,13099,13101,13103,13105,13107,13109,13111,13113,13115,13117,13119,13121],{"class":111,"line":467},[109,13100,1302],{"class":122},[109,13102,285],{"class":126},[109,13104,123],{"class":122},[109,13106,1309],{"class":126},[109,13108,130],{"class":122},[109,13110,1314],{"class":133},[109,13112,1317],{"class":126},[109,13114,1320],{"class":122},[109,13116,1008],{"class":133},[109,13118,1317],{"class":126},[109,13120,1327],{"class":122},[109,13122,1330],{"class":126},[109,13124,13125],{"class":111,"line":494},[109,13126,1335],{"class":126},[109,13128,13129,13131,13133,13135,13137],{"class":111,"line":499},[109,13130,1396],{"class":126},[109,13132,275],{"class":122},[109,13134,1401],{"class":126},[109,13136,275],{"class":122},[109,13138,1068],{"class":126},[109,13140,13141],{"class":111,"line":526},[109,13142,1361],{"class":126},[109,13144,13145],{"class":111,"line":552},[109,13146,1414],{"class":115},[109,13148,13149],{"class":111,"line":557},[109,13150,1419],{"class":115},[109,13152,13153,13155],{"class":111,"line":584},[109,13154,1424],{"class":122},[109,13156,1427],{"class":126},[109,13158,13159],{"class":111,"line":611},[109,13160,742],{"class":126},[109,13162,13163],{"class":111,"line":616},[109,13164,158],{"emptyLinePlaceholder":157},[109,13166,13167,13169,13171],{"class":111,"line":633},[109,13168,123],{"class":122},[109,13170,212],{"class":211},[109,13172,803],{"class":126},[109,13174,13175],{"class":111,"line":649},[109,13176,808],{"class":126},[109,13178,13179,13181],{"class":111,"line":676},[109,13180,1452],{"class":211},[109,13182,874],{"class":126},[109,13184,13185,13187],{"class":111,"line":703},[109,13186,1459],{"class":211},[109,13188,874],{"class":126},[109,13190,13191],{"class":111,"line":708},[109,13192,742],{"class":126},[1467,13194,1469],{},{"title":104,"searchDepth":119,"depth":119,"links":13196},[13197],{"id":16,"depth":119,"text":17,"children":13198},[13199,13200],{"id":53,"depth":140,"text":54},{"id":762,"depth":140,"text":763},{},{"title":5,"description":104},{"id":13204,"title":13205,"body":13206,"description":104,"extension":1476,"meta":14687,"navigation":157,"path":14688,"seo":14689,"stem":14690,"__hash__":14691},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13207,"toc":14679},[13208,13211,13215,13218,13221,13390,13394,13399,13416,13421,13573,13577,13580,13583,13977,13981,13984,13989,13992,14304,14308,14314,14474,14476,14484,14488,14491,14498,14676],[10,13209,13205],{"id":13210},"_6引用",[14,13212,13214],{"id":13213},"_61引用基本用法","6.1引用基本用法",[19,13216,13217],{},"引用的本质：给变量起别名",[19,13219,13220],{},"语法：数据类型 &别名=原名",[99,13222,13224],{"className":101,"code":13223,"language":103,"meta":104,"style":104},"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",[106,13225,13226,13234,13238,13250,13262,13266,13285,13304,13308,13319,13323,13342,13360,13364,13374,13378,13386],{"__ignoreMap":104},[109,13227,13228,13230,13232],{"class":111,"line":112},[109,13229,123],{"class":122},[109,13231,212],{"class":211},[109,13233,215],{"class":126},[109,13235,13236],{"class":111,"line":119},[109,13237,158],{"emptyLinePlaceholder":157},[109,13239,13240,13242,13244,13246,13248],{"class":111,"line":140},[109,13241,232],{"class":122},[109,13243,235],{"class":126},[109,13245,130],{"class":122},[109,13247,134],{"class":133},[109,13249,137],{"class":126},[109,13251,13252,13254,13256,13258,13260],{"class":111,"line":154},[109,13253,232],{"class":122},[109,13255,831],{"class":122},[109,13257,324],{"class":126},[109,13259,130],{"class":122},[109,13261,2825],{"class":126},[109,13263,13264],{"class":111,"line":161},[109,13265,158],{"emptyLinePlaceholder":157},[109,13267,13268,13270,13272,13275,13277,13279,13281,13283],{"class":111,"line":167},[109,13269,272],{"class":126},[109,13271,275],{"class":122},[109,13273,13274],{"class":278}," \"a = \"",[109,13276,282],{"class":122},[109,13278,235],{"class":126},[109,13280,275],{"class":122},[109,13282,889],{"class":126},[109,13284,8594],{"class":115},[109,13286,13287,13289,13291,13294,13296,13298,13300,13302],{"class":111,"line":185},[109,13288,272],{"class":126},[109,13290,275],{"class":122},[109,13292,13293],{"class":278}," \"b = \"",[109,13295,282],{"class":122},[109,13297,249],{"class":126},[109,13299,275],{"class":122},[109,13301,889],{"class":126},[109,13303,8594],{"class":115},[109,13305,13306],{"class":111,"line":201},[109,13307,158],{"emptyLinePlaceholder":157},[109,13309,13310,13313,13315,13317],{"class":111,"line":206},[109,13311,13312],{"class":126},"    b ",[109,13314,130],{"class":122},[109,13316,7085],{"class":133},[109,13318,137],{"class":126},[109,13320,13321],{"class":111,"line":218},[109,13322,158],{"emptyLinePlaceholder":157},[109,13324,13325,13327,13329,13331,13333,13335,13337,13339],{"class":111,"line":223},[109,13326,272],{"class":126},[109,13328,275],{"class":122},[109,13330,13274],{"class":278},[109,13332,282],{"class":122},[109,13334,235],{"class":126},[109,13336,275],{"class":122},[109,13338,889],{"class":126},[109,13340,13341],{"class":115},"\u002F\u002F100\n",[109,13343,13344,13346,13348,13350,13352,13354,13356,13358],{"class":111,"line":229},[109,13345,272],{"class":126},[109,13347,275],{"class":122},[109,13349,13293],{"class":278},[109,13351,282],{"class":122},[109,13353,249],{"class":126},[109,13355,275],{"class":122},[109,13357,889],{"class":126},[109,13359,13341],{"class":115},[109,13361,13362],{"class":111,"line":244},[109,13363,158],{"emptyLinePlaceholder":157},[109,13365,13366,13368,13370,13372],{"class":111,"line":258},[109,13367,711],{"class":211},[109,13369,714],{"class":126},[109,13371,717],{"class":278},[109,13373,720],{"class":126},[109,13375,13376],{"class":111,"line":263},[109,13377,158],{"emptyLinePlaceholder":157},[109,13379,13380,13382,13384],{"class":111,"line":269},[109,13381,731],{"class":122},[109,13383,734],{"class":133},[109,13385,137],{"class":126},[109,13387,13388],{"class":111,"line":304},[109,13389,742],{"class":126},[14,13391,13393],{"id":13392},"_62引用的注意事项","6.2引用的注意事项",[765,13395,13396],{},[30,13397,13398],{},"引用必须要初始化",[99,13400,13402],{"className":101,"code":13401,"language":103,"meta":104,"style":104},"int &b;\u002F\u002F非常错误！\n",[106,13403,13404],{"__ignoreMap":104},[109,13405,13406,13408,13410,13413],{"class":111,"line":112},[109,13407,123],{"class":122},[109,13409,831],{"class":122},[109,13411,13412],{"class":126},"b;",[109,13414,13415],{"class":115},"\u002F\u002F非常错误！\n",[765,13417,13418],{"start":119},[30,13419,13420],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[99,13422,13424],{"className":101,"code":13423,"language":103,"meta":104,"style":104},"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",[106,13425,13426,13434,13446,13458,13466,13482,13495,13513,13531,13551,13561,13569],{"__ignoreMap":104},[109,13427,13428,13430,13432],{"class":111,"line":112},[109,13429,123],{"class":122},[109,13431,212],{"class":211},[109,13433,215],{"class":126},[109,13435,13436,13438,13440,13442,13444],{"class":111,"line":119},[109,13437,232],{"class":122},[109,13439,235],{"class":126},[109,13441,130],{"class":122},[109,13443,134],{"class":133},[109,13445,137],{"class":126},[109,13447,13448,13450,13452,13454,13456],{"class":111,"line":140},[109,13449,232],{"class":122},[109,13451,249],{"class":126},[109,13453,130],{"class":122},[109,13455,10268],{"class":133},[109,13457,137],{"class":126},[109,13459,13460,13463],{"class":111,"line":154},[109,13461,13462],{"class":115},"    \u002F\u002Fint &c;",[109,13464,13465],{"class":115}," \u002F\u002F错误，引用必须初始化\n",[109,13467,13468,13470,13472,13474,13476,13479],{"class":111,"line":161},[109,13469,232],{"class":122},[109,13471,831],{"class":122},[109,13473,4293],{"class":126},[109,13475,130],{"class":122},[109,13477,13478],{"class":126}," a;",[109,13480,13481],{"class":115}," \u002F\u002F一旦初始化后，就不可以更改\n",[109,13483,13484,13487,13489,13492],{"class":111,"line":167},[109,13485,13486],{"class":126},"    c ",[109,13488,130],{"class":122},[109,13490,13491],{"class":126}," b;",[109,13493,13494],{"class":115}," \u002F\u002F这是赋值操作，不是更改引用\n",[109,13496,13497,13499,13501,13503,13505,13507,13509,13511],{"class":111,"line":185},[109,13498,272],{"class":126},[109,13500,275],{"class":122},[109,13502,13274],{"class":278},[109,13504,282],{"class":122},[109,13506,235],{"class":126},[109,13508,275],{"class":122},[109,13510,889],{"class":126},[109,13512,8579],{"class":115},[109,13514,13515,13517,13519,13521,13523,13525,13527,13529],{"class":111,"line":201},[109,13516,272],{"class":126},[109,13518,275],{"class":122},[109,13520,13293],{"class":278},[109,13522,282],{"class":122},[109,13524,249],{"class":126},[109,13526,275],{"class":122},[109,13528,889],{"class":126},[109,13530,8579],{"class":115},[109,13532,13533,13535,13537,13540,13542,13545,13547,13549],{"class":111,"line":206},[109,13534,272],{"class":126},[109,13536,275],{"class":122},[109,13538,13539],{"class":278}," \"c = \"",[109,13541,282],{"class":122},[109,13543,13544],{"class":126}," c ",[109,13546,275],{"class":122},[109,13548,889],{"class":126},[109,13550,8579],{"class":115},[109,13552,13553,13555,13557,13559],{"class":111,"line":218},[109,13554,711],{"class":211},[109,13556,714],{"class":126},[109,13558,717],{"class":278},[109,13560,720],{"class":126},[109,13562,13563,13565,13567],{"class":111,"line":223},[109,13564,731],{"class":122},[109,13566,734],{"class":133},[109,13568,137],{"class":126},[109,13570,13571],{"class":111,"line":229},[109,13572,742],{"class":126},[14,13574,13576],{"id":13575},"_63引用做函数参数","6.3引用做函数参数",[19,13578,13579],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13581,13582],{},"优点：可以简化指针修改实参",[99,13584,13586],{"className":101,"code":13585,"language":103,"meta":104,"style":104},"\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",[106,13587,13588,13593,13616,13627,13637,13646,13650,13654,13659,13681,13693,13705,13715,13719,13723,13728,13750,13760,13768,13776,13780,13784,13792,13796,13808,13820,13824,13835,13861,13865,13885,13909,13913,13923,13947,13951,13961,13965,13973],{"__ignoreMap":104},[109,13589,13590],{"class":111,"line":112},[109,13591,13592],{"class":115},"\u002F\u002F1. 值传递\n",[109,13594,13595,13597,13600,13602,13604,13606,13609,13611,13613],{"class":111,"line":119},[109,13596,1166],{"class":122},[109,13598,13599],{"class":211}," mySwap01",[109,13601,714],{"class":126},[109,13603,123],{"class":122},[109,13605,2791],{"class":6553},[109,13607,13608],{"class":126},", ",[109,13610,123],{"class":122},[109,13612,4180],{"class":6553},[109,13614,13615],{"class":126},") {\n",[109,13617,13618,13620,13623,13625],{"class":111,"line":140},[109,13619,232],{"class":122},[109,13621,13622],{"class":126}," temp ",[109,13624,130],{"class":122},[109,13626,2825],{"class":126},[109,13628,13629,13632,13634],{"class":111,"line":154},[109,13630,13631],{"class":126},"    a ",[109,13633,130],{"class":122},[109,13635,13636],{"class":126}," b;\n",[109,13638,13639,13641,13643],{"class":111,"line":161},[109,13640,13312],{"class":126},[109,13642,130],{"class":122},[109,13644,13645],{"class":126}," temp;\n",[109,13647,13648],{"class":111,"line":167},[109,13649,742],{"class":126},[109,13651,13652],{"class":111,"line":185},[109,13653,158],{"emptyLinePlaceholder":157},[109,13655,13656],{"class":111,"line":201},[109,13657,13658],{"class":115},"\u002F\u002F2. 地址传递\n",[109,13660,13661,13663,13666,13668,13671,13673,13675,13677,13679],{"class":111,"line":206},[109,13662,1166],{"class":122},[109,13664,13665],{"class":211}," mySwap02",[109,13667,714],{"class":126},[109,13669,13670],{"class":122},"int*",[109,13672,2791],{"class":6553},[109,13674,13608],{"class":126},[109,13676,13670],{"class":122},[109,13678,4180],{"class":6553},[109,13680,13615],{"class":126},[109,13682,13683,13685,13687,13689,13691],{"class":111,"line":218},[109,13684,232],{"class":122},[109,13686,13622],{"class":126},[109,13688,130],{"class":122},[109,13690,797],{"class":122},[109,13692,7527],{"class":126},[109,13694,13695,13697,13699,13701,13703],{"class":111,"line":223},[109,13696,7733],{"class":122},[109,13698,296],{"class":126},[109,13700,130],{"class":122},[109,13702,797],{"class":122},[109,13704,7399],{"class":126},[109,13706,13707,13709,13711,13713],{"class":111,"line":229},[109,13708,7733],{"class":122},[109,13710,324],{"class":126},[109,13712,130],{"class":122},[109,13714,13645],{"class":126},[109,13716,13717],{"class":111,"line":244},[109,13718,742],{"class":126},[109,13720,13721],{"class":111,"line":258},[109,13722,158],{"emptyLinePlaceholder":157},[109,13724,13725],{"class":111,"line":263},[109,13726,13727],{"class":115},"\u002F\u002F3. 引用传递\n",[109,13729,13730,13732,13735,13737,13740,13742,13744,13746,13748],{"class":111,"line":269},[109,13731,1166],{"class":122},[109,13733,13734],{"class":211}," mySwap03",[109,13736,714],{"class":126},[109,13738,13739],{"class":122},"int&",[109,13741,2791],{"class":6553},[109,13743,13608],{"class":126},[109,13745,13739],{"class":122},[109,13747,4180],{"class":6553},[109,13749,13615],{"class":126},[109,13751,13752,13754,13756,13758],{"class":111,"line":304},[109,13753,232],{"class":122},[109,13755,13622],{"class":126},[109,13757,130],{"class":122},[109,13759,2825],{"class":126},[109,13761,13762,13764,13766],{"class":111,"line":331},[109,13763,13631],{"class":126},[109,13765,130],{"class":122},[109,13767,13636],{"class":126},[109,13769,13770,13772,13774],{"class":111,"line":336},[109,13771,13312],{"class":126},[109,13773,130],{"class":122},[109,13775,13645],{"class":126},[109,13777,13778],{"class":111,"line":364},[109,13779,742],{"class":126},[109,13781,13782],{"class":111,"line":391},[109,13783,158],{"emptyLinePlaceholder":157},[109,13785,13786,13788,13790],{"class":111,"line":396},[109,13787,123],{"class":122},[109,13789,212],{"class":211},[109,13791,215],{"class":126},[109,13793,13794],{"class":111,"line":402},[109,13795,158],{"emptyLinePlaceholder":157},[109,13797,13798,13800,13802,13804,13806],{"class":111,"line":419},[109,13799,232],{"class":122},[109,13801,235],{"class":126},[109,13803,130],{"class":122},[109,13805,134],{"class":133},[109,13807,137],{"class":126},[109,13809,13810,13812,13814,13816,13818],{"class":111,"line":435},[109,13811,232],{"class":122},[109,13813,249],{"class":126},[109,13815,130],{"class":122},[109,13817,10268],{"class":133},[109,13819,137],{"class":126},[109,13821,13822],{"class":111,"line":440},[109,13823,158],{"emptyLinePlaceholder":157},[109,13825,13826,13829,13832],{"class":111,"line":467},[109,13827,13828],{"class":211},"    mySwap01",[109,13830,13831],{"class":126},"(a, b);",[109,13833,13834],{"class":115},"\u002F\u002F值传递，形参不会修饰实参\n",[109,13836,13837,13839,13841,13844,13846,13848,13850,13853,13855,13857,13859],{"class":111,"line":494},[109,13838,272],{"class":126},[109,13840,275],{"class":122},[109,13842,13843],{"class":278}," \"a:\"",[109,13845,282],{"class":122},[109,13847,235],{"class":126},[109,13849,275],{"class":122},[109,13851,13852],{"class":278}," \" b:\"",[109,13854,282],{"class":122},[109,13856,249],{"class":126},[109,13858,275],{"class":122},[109,13860,301],{"class":126},[109,13862,13863],{"class":111,"line":499},[109,13864,158],{"emptyLinePlaceholder":157},[109,13866,13867,13870,13872,13874,13877,13879,13882],{"class":111,"line":526},[109,13868,13869],{"class":211},"    mySwap02",[109,13871,714],{"class":126},[109,13873,293],{"class":122},[109,13875,13876],{"class":126},"a, ",[109,13878,293],{"class":122},[109,13880,13881],{"class":126},"b);",[109,13883,13884],{"class":115},"\u002F\u002F地址传递，形参会修饰实参\n",[109,13886,13887,13889,13891,13893,13895,13897,13899,13901,13903,13905,13907],{"class":111,"line":552},[109,13888,272],{"class":126},[109,13890,275],{"class":122},[109,13892,13843],{"class":278},[109,13894,282],{"class":122},[109,13896,235],{"class":126},[109,13898,275],{"class":122},[109,13900,13852],{"class":278},[109,13902,282],{"class":122},[109,13904,249],{"class":126},[109,13906,275],{"class":122},[109,13908,301],{"class":126},[109,13910,13911],{"class":111,"line":557},[109,13912,158],{"emptyLinePlaceholder":157},[109,13914,13915,13918,13920],{"class":111,"line":584},[109,13916,13917],{"class":211},"    mySwap03",[109,13919,13831],{"class":126},[109,13921,13922],{"class":115},"\u002F\u002F引用传递，形参会修饰实参\n",[109,13924,13925,13927,13929,13931,13933,13935,13937,13939,13941,13943,13945],{"class":111,"line":611},[109,13926,272],{"class":126},[109,13928,275],{"class":122},[109,13930,13843],{"class":278},[109,13932,282],{"class":122},[109,13934,235],{"class":126},[109,13936,275],{"class":122},[109,13938,13852],{"class":278},[109,13940,282],{"class":122},[109,13942,249],{"class":126},[109,13944,275],{"class":122},[109,13946,301],{"class":126},[109,13948,13949],{"class":111,"line":616},[109,13950,158],{"emptyLinePlaceholder":157},[109,13952,13953,13955,13957,13959],{"class":111,"line":633},[109,13954,711],{"class":211},[109,13956,714],{"class":126},[109,13958,717],{"class":278},[109,13960,720],{"class":126},[109,13962,13963],{"class":111,"line":649},[109,13964,158],{"emptyLinePlaceholder":157},[109,13966,13967,13969,13971],{"class":111,"line":676},[109,13968,731],{"class":122},[109,13970,734],{"class":133},[109,13972,137],{"class":126},[109,13974,13975],{"class":111,"line":703},[109,13976,742],{"class":126},[14,13978,13980],{"id":13979},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13982,13983],{},"作用：引用是可以作为函数的返回值存在的",[19,13985,10343,13986],{},[23,13987,13988],{},"不要返回局部变量引用",[19,13990,13991],{},"用法：函数调用作为左值",[99,13993,13995],{"className":11259,"code":13994,"language":11261,"meta":104,"style":104},"\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",[106,13996,13997,14002,14010,14025,14031,14035,14039,14044,14052,14069,14075,14079,14083,14091,14095,14100,14114,14134,14153,14157,14162,14175,14195,14213,14217,14233,14237,14256,14274,14278,14288,14292,14300],{"__ignoreMap":104},[109,13998,13999],{"class":111,"line":112},[109,14000,14001],{"class":115},"\u002F\u002F返回局部变量引用\n",[109,14003,14004,14006,14008],{"class":111,"line":119},[109,14005,13739],{"class":122},[109,14007,1169],{"class":211},[109,14009,215],{"class":126},[109,14011,14012,14014,14016,14018,14020,14022],{"class":111,"line":140},[109,14013,232],{"class":122},[109,14015,235],{"class":126},[109,14017,130],{"class":122},[109,14019,134],{"class":133},[109,14021,821],{"class":126},[109,14023,14024],{"class":115}," \u002F\u002F局部变量\n",[109,14026,14027,14029],{"class":111,"line":154},[109,14028,731],{"class":122},[109,14030,2825],{"class":126},[109,14032,14033],{"class":111,"line":161},[109,14034,742],{"class":126},[109,14036,14037],{"class":111,"line":167},[109,14038,158],{"emptyLinePlaceholder":157},[109,14040,14041],{"class":111,"line":185},[109,14042,14043],{"class":115},"\u002F\u002F返回静态变量引用\n",[109,14045,14046,14048,14050],{"class":111,"line":201},[109,14047,13739],{"class":122},[109,14049,1262],{"class":211},[109,14051,215],{"class":126},[109,14053,14054,14056,14058,14060,14062,14064,14066],{"class":111,"line":206},[109,14055,405],{"class":122},[109,14057,173],{"class":122},[109,14059,235],{"class":126},[109,14061,130],{"class":122},[109,14063,10268],{"class":133},[109,14065,821],{"class":126},[109,14067,14068],{"class":115},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[109,14070,14071,14073],{"class":111,"line":218},[109,14072,731],{"class":122},[109,14074,2825],{"class":126},[109,14076,14077],{"class":111,"line":223},[109,14078,742],{"class":126},[109,14080,14081],{"class":111,"line":229},[109,14082,158],{"emptyLinePlaceholder":157},[109,14084,14085,14087,14089],{"class":111,"line":244},[109,14086,123],{"class":122},[109,14088,212],{"class":211},[109,14090,215],{"class":126},[109,14092,14093],{"class":111,"line":258},[109,14094,158],{"emptyLinePlaceholder":157},[109,14096,14097],{"class":111,"line":263},[109,14098,14099],{"class":115},"    \u002F\u002F不能返回局部变量的引用\n",[109,14101,14102,14105,14108,14110,14112],{"class":111,"line":269},[109,14103,14104],{"class":122},"    int&",[109,14106,14107],{"class":126}," ref ",[109,14109,130],{"class":122},[109,14111,1169],{"class":211},[109,14113,874],{"class":126},[109,14115,14116,14118,14120,14123,14125,14127,14129,14131],{"class":111,"line":304},[109,14117,272],{"class":126},[109,14119,275],{"class":122},[109,14121,14122],{"class":278}," \"ref = \"",[109,14124,282],{"class":122},[109,14126,14107],{"class":126},[109,14128,275],{"class":122},[109,14130,889],{"class":126},[109,14132,14133],{"class":115},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[109,14135,14136,14138,14140,14142,14144,14146,14148,14150],{"class":111,"line":331},[109,14137,272],{"class":126},[109,14139,275],{"class":122},[109,14141,14122],{"class":278},[109,14143,282],{"class":122},[109,14145,14107],{"class":126},[109,14147,275],{"class":122},[109,14149,889],{"class":126},[109,14151,14152],{"class":115},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[109,14154,14155],{"class":111,"line":336},[109,14156,158],{"emptyLinePlaceholder":157},[109,14158,14159],{"class":111,"line":364},[109,14160,14161],{"class":115},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[109,14163,14164,14166,14169,14171,14173],{"class":111,"line":391},[109,14165,14104],{"class":122},[109,14167,14168],{"class":126}," ref2 ",[109,14170,130],{"class":122},[109,14172,1262],{"class":211},[109,14174,874],{"class":126},[109,14176,14177,14179,14181,14184,14186,14188,14190,14192],{"class":111,"line":396},[109,14178,272],{"class":126},[109,14180,275],{"class":122},[109,14182,14183],{"class":278}," \"ref2 = \"",[109,14185,282],{"class":122},[109,14187,14168],{"class":126},[109,14189,275],{"class":122},[109,14191,889],{"class":126},[109,14193,14194],{"class":115}," \u002F\u002F20\n",[109,14196,14197,14199,14201,14203,14205,14207,14209,14211],{"class":111,"line":402},[109,14198,272],{"class":126},[109,14200,275],{"class":122},[109,14202,14183],{"class":278},[109,14204,282],{"class":122},[109,14206,14168],{"class":126},[109,14208,275],{"class":122},[109,14210,889],{"class":126},[109,14212,14194],{"class":115},[109,14214,14215],{"class":111,"line":419},[109,14216,158],{"emptyLinePlaceholder":157},[109,14218,14219,14221,14224,14226,14228,14230],{"class":111,"line":435},[109,14220,1459],{"class":211},[109,14222,14223],{"class":126},"() ",[109,14225,130],{"class":122},[109,14227,4346],{"class":133},[109,14229,821],{"class":126},[109,14231,14232],{"class":115},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[109,14234,14235],{"class":111,"line":440},[109,14236,158],{"emptyLinePlaceholder":157},[109,14238,14239,14241,14243,14245,14247,14249,14251,14253],{"class":111,"line":467},[109,14240,272],{"class":126},[109,14242,275],{"class":122},[109,14244,14183],{"class":278},[109,14246,282],{"class":122},[109,14248,14168],{"class":126},[109,14250,275],{"class":122},[109,14252,889],{"class":126},[109,14254,14255],{"class":115}," \u002F\u002F1000\n",[109,14257,14258,14260,14262,14264,14266,14268,14270,14272],{"class":111,"line":494},[109,14259,272],{"class":126},[109,14261,275],{"class":122},[109,14263,14183],{"class":278},[109,14265,282],{"class":122},[109,14267,14168],{"class":126},[109,14269,275],{"class":122},[109,14271,889],{"class":126},[109,14273,14255],{"class":115},[109,14275,14276],{"class":111,"line":499},[109,14277,158],{"emptyLinePlaceholder":157},[109,14279,14280,14282,14284,14286],{"class":111,"line":526},[109,14281,711],{"class":211},[109,14283,714],{"class":126},[109,14285,717],{"class":278},[109,14287,720],{"class":126},[109,14289,14290],{"class":111,"line":552},[109,14291,158],{"emptyLinePlaceholder":157},[109,14293,14294,14296,14298],{"class":111,"line":557},[109,14295,731],{"class":122},[109,14297,734],{"class":133},[109,14299,137],{"class":126},[109,14301,14302],{"class":111,"line":584},[109,14303,742],{"class":126},[14,14305,14307],{"id":14306},"_65引用的本质","6.5引用的本质",[19,14309,14310,14311],{},"本质：",[23,14312,14313],{},"引用的本质在c++内部实现是一个指针常量.",[99,14315,14317],{"className":101,"code":14316,"language":103,"meta":104,"style":104},"\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",[106,14318,14319,14324,14340,14354,14358,14367,14379,14384,14389,14400,14413,14417,14433,14450,14454,14462,14470],{"__ignoreMap":104},[109,14320,14321],{"class":111,"line":112},[109,14322,14323],{"class":115},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[109,14325,14326,14328,14330,14332,14334,14337],{"class":111,"line":119},[109,14327,1166],{"class":122},[109,14329,800],{"class":211},[109,14331,714],{"class":126},[109,14333,13739],{"class":122},[109,14335,14336],{"class":6553}," ref",[109,14338,14339],{"class":126},"){\n",[109,14341,14342,14345,14347,14349,14351],{"class":111,"line":140},[109,14343,14344],{"class":126},"    ref ",[109,14346,130],{"class":122},[109,14348,7085],{"class":133},[109,14350,821],{"class":126},[109,14352,14353],{"class":115}," \u002F\u002F ref是引用，转换为*ref = 100\n",[109,14355,14356],{"class":111,"line":154},[109,14357,742],{"class":126},[109,14359,14360,14362,14364],{"class":111,"line":161},[109,14361,123],{"class":122},[109,14363,212],{"class":211},[109,14365,14366],{"class":126},"(){\n",[109,14368,14369,14371,14373,14375,14377],{"class":111,"line":167},[109,14370,232],{"class":122},[109,14372,235],{"class":126},[109,14374,130],{"class":122},[109,14376,134],{"class":133},[109,14378,137],{"class":126},[109,14380,14381],{"class":111,"line":185},[109,14382,14383],{"class":126},"    \n",[109,14385,14386],{"class":111,"line":201},[109,14387,14388],{"class":115},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[109,14390,14391,14393,14395,14397],{"class":111,"line":206},[109,14392,14104],{"class":122},[109,14394,14107],{"class":126},[109,14396,130],{"class":122},[109,14398,14399],{"class":126}," a; \n",[109,14401,14402,14404,14406,14408,14410],{"class":111,"line":218},[109,14403,14344],{"class":126},[109,14405,130],{"class":122},[109,14407,10268],{"class":133},[109,14409,821],{"class":126},[109,14411,14412],{"class":115}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[109,14414,14415],{"class":111,"line":223},[109,14416,14383],{"class":126},[109,14418,14419,14421,14423,14425,14427,14429,14431],{"class":111,"line":229},[109,14420,272],{"class":126},[109,14422,275],{"class":122},[109,14424,13843],{"class":278},[109,14426,282],{"class":122},[109,14428,235],{"class":126},[109,14430,275],{"class":122},[109,14432,301],{"class":126},[109,14434,14435,14437,14439,14442,14444,14446,14448],{"class":111,"line":244},[109,14436,272],{"class":126},[109,14438,275],{"class":122},[109,14440,14441],{"class":278}," \"ref:\"",[109,14443,282],{"class":122},[109,14445,14107],{"class":126},[109,14447,275],{"class":122},[109,14449,301],{"class":126},[109,14451,14452],{"class":111,"line":258},[109,14453,14383],{"class":126},[109,14455,14456,14459],{"class":111,"line":263},[109,14457,14458],{"class":211},"    func",[109,14460,14461],{"class":126},"(a);\n",[109,14463,14464,14466,14468],{"class":111,"line":269},[109,14465,731],{"class":122},[109,14467,734],{"class":133},[109,14469,137],{"class":126},[109,14471,14472],{"class":111,"line":304},[109,14473,742],{"class":126},[19,14475,745],{},[765,14477,14478,14481],{},[30,14479,14480],{},"引用的本质，就是一个指针常量",[30,14482,14483],{},"引用一旦初始化，就不可以发生改变",[14,14485,14487],{"id":14486},"_66常量引用","6.6常量引用",[19,14489,14490],{},"作用：常量引用主要用来修饰形参",[19,14492,14493,14494,14497],{},"在函数形参列表中，可以加",[23,14495,14496],{},"const修饰形参","，防止形参改变实参",[99,14499,14501],{"className":101,"code":14500,"language":103,"meta":104,"style":104},"\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",[106,14502,14503,14508,14513,14532,14537,14550,14554,14558,14566,14570,14575,14580,14594,14598,14606,14618,14622,14627,14639,14646,14650,14660,14664,14672],{"__ignoreMap":104},[109,14504,14505],{"class":111,"line":112},[109,14506,14507],{"class":115},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[109,14509,14510],{"class":111,"line":119},[109,14511,14512],{"class":115},"\u002F\u002F加上const就不能修改实参的\n",[109,14514,14515,14517,14520,14522,14524,14527,14530],{"class":111,"line":140},[109,14516,1166],{"class":122},[109,14518,14519],{"class":211}," showValue",[109,14521,714],{"class":126},[109,14523,170],{"class":122},[109,14525,14526],{"class":122}," int&",[109,14528,14529],{"class":6553}," v",[109,14531,13615],{"class":126},[109,14533,14534],{"class":111,"line":154},[109,14535,14536],{"class":115},"    \u002F\u002Fv += 100;\n",[109,14538,14539,14541,14543,14546,14548],{"class":111,"line":161},[109,14540,272],{"class":126},[109,14542,275],{"class":122},[109,14544,14545],{"class":126}," v ",[109,14547,275],{"class":122},[109,14549,301],{"class":126},[109,14551,14552],{"class":111,"line":167},[109,14553,742],{"class":126},[109,14555,14556],{"class":111,"line":185},[109,14557,158],{"emptyLinePlaceholder":157},[109,14559,14560,14562,14564],{"class":111,"line":201},[109,14561,123],{"class":122},[109,14563,212],{"class":211},[109,14565,215],{"class":126},[109,14567,14568],{"class":111,"line":206},[109,14569,158],{"emptyLinePlaceholder":157},[109,14571,14572],{"class":111,"line":218},[109,14573,14574],{"class":115},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[109,14576,14577],{"class":111,"line":223},[109,14578,14579],{"class":115},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[109,14581,14582,14584,14586,14588,14590,14592],{"class":111,"line":229},[109,14583,619],{"class":122},[109,14585,14526],{"class":122},[109,14587,14107],{"class":126},[109,14589,130],{"class":122},[109,14591,134],{"class":133},[109,14593,137],{"class":126},[109,14595,14596],{"class":111,"line":244},[109,14597,158],{"emptyLinePlaceholder":157},[109,14599,14600,14603],{"class":111,"line":258},[109,14601,14602],{"class":115},"    \u002F\u002Fref = 100;",[109,14604,14605],{"class":115},"  \u002F\u002F加入const后不可以修改变量\n",[109,14607,14608,14610,14612,14614,14616],{"class":111,"line":263},[109,14609,272],{"class":126},[109,14611,275],{"class":122},[109,14613,14107],{"class":126},[109,14615,275],{"class":122},[109,14617,301],{"class":126},[109,14619,14620],{"class":111,"line":269},[109,14621,158],{"emptyLinePlaceholder":157},[109,14623,14624],{"class":111,"line":304},[109,14625,14626],{"class":115},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[109,14628,14629,14631,14633,14635,14637],{"class":111,"line":331},[109,14630,232],{"class":122},[109,14632,235],{"class":126},[109,14634,130],{"class":122},[109,14636,134],{"class":133},[109,14638,137],{"class":126},[109,14640,14641,14644],{"class":111,"line":336},[109,14642,14643],{"class":211},"    showValue",[109,14645,14461],{"class":126},[109,14647,14648],{"class":111,"line":364},[109,14649,158],{"emptyLinePlaceholder":157},[109,14651,14652,14654,14656,14658],{"class":111,"line":391},[109,14653,711],{"class":211},[109,14655,714],{"class":126},[109,14657,717],{"class":278},[109,14659,720],{"class":126},[109,14661,14662],{"class":111,"line":396},[109,14663,158],{"emptyLinePlaceholder":157},[109,14665,14666,14668,14670],{"class":111,"line":402},[109,14667,731],{"class":122},[109,14669,734],{"class":133},[109,14671,137],{"class":126},[109,14673,14674],{"class":111,"line":419},[109,14675,742],{"class":126},[1467,14677,14678],{},"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":104,"searchDepth":119,"depth":119,"links":14680},[14681,14682,14683,14684,14685,14686],{"id":13213,"depth":119,"text":13214},{"id":13392,"depth":119,"text":13393},{"id":13575,"depth":119,"text":13576},{"id":13979,"depth":119,"text":13980},{"id":14306,"depth":119,"text":14307},{"id":14486,"depth":119,"text":14487},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13205,"description":104},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14693,"title":14694,"body":14695,"description":104,"extension":1476,"meta":15776,"navigation":157,"path":15777,"seo":15778,"stem":15779,"__hash__":15780},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14696,"toc":15768},[14697,14700,14704,14707,14712,14944,14946,14957,14961,14964,14972,15076,15079,15083,15086,15090,15093,15098,15120,15126,15453,15456,15460,15468,15765],[10,14698,14694],{"id":14699},"_7函数高级部分",[14,14701,14703],{"id":14702},"_71函数默认参数","7.1函数默认参数",[19,14705,14706],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14708,6518,14709],{},[106,14710,14711],{}," 返回值类型  函数名 （参数= 默认值）{}",[99,14713,14715],{"className":101,"code":14714,"language":103,"meta":104,"style":104},"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",[106,14716,14717,14752,14767,14771,14775,14780,14785,14814,14834,14844,14848,14852,14860,14864,14892,14914,14918,14928,14932,14940],{"__ignoreMap":104},[109,14718,14719,14721,14723,14725,14727,14729,14731,14733,14735,14738,14740,14742,14744,14746,14748,14750],{"class":111,"line":112},[109,14720,123],{"class":122},[109,14722,800],{"class":211},[109,14724,714],{"class":126},[109,14726,123],{"class":122},[109,14728,2791],{"class":6553},[109,14730,13608],{"class":126},[109,14732,123],{"class":122},[109,14734,4180],{"class":6553},[109,14736,14737],{"class":122}," =",[109,14739,134],{"class":133},[109,14741,13608],{"class":126},[109,14743,123],{"class":122},[109,14745,4196],{"class":6553},[109,14747,14737],{"class":122},[109,14749,134],{"class":133},[109,14751,13615],{"class":126},[109,14753,14754,14756,14758,14760,14762,14764],{"class":111,"line":119},[109,14755,731],{"class":122},[109,14757,235],{"class":126},[109,14759,1348],{"class":122},[109,14761,249],{"class":126},[109,14763,1348],{"class":122},[109,14765,14766],{"class":126}," c;\n",[109,14768,14769],{"class":111,"line":140},[109,14770,742],{"class":126},[109,14772,14773],{"class":111,"line":154},[109,14774,158],{"emptyLinePlaceholder":157},[109,14776,14777],{"class":111,"line":161},[109,14778,14779],{"class":115},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[109,14781,14782],{"class":111,"line":167},[109,14783,14784],{"class":115},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[109,14786,14787,14789,14792,14794,14796,14798,14800,14802,14804,14806,14808,14810,14812],{"class":111,"line":185},[109,14788,123],{"class":122},[109,14790,14791],{"class":211}," func2",[109,14793,714],{"class":126},[109,14795,123],{"class":122},[109,14797,2791],{"class":6553},[109,14799,14737],{"class":122},[109,14801,134],{"class":133},[109,14803,13608],{"class":126},[109,14805,123],{"class":122},[109,14807,4180],{"class":6553},[109,14809,14737],{"class":122},[109,14811,134],{"class":133},[109,14813,720],{"class":126},[109,14815,14816,14818,14820,14822,14824,14826,14828,14830,14832],{"class":111,"line":201},[109,14817,123],{"class":122},[109,14819,14791],{"class":211},[109,14821,714],{"class":126},[109,14823,123],{"class":122},[109,14825,2791],{"class":6553},[109,14827,13608],{"class":126},[109,14829,123],{"class":122},[109,14831,4180],{"class":6553},[109,14833,13615],{"class":126},[109,14835,14836,14838,14840,14842],{"class":111,"line":206},[109,14837,731],{"class":122},[109,14839,235],{"class":126},[109,14841,1348],{"class":122},[109,14843,13636],{"class":126},[109,14845,14846],{"class":111,"line":218},[109,14847,742],{"class":126},[109,14849,14850],{"class":111,"line":223},[109,14851,158],{"emptyLinePlaceholder":157},[109,14853,14854,14856,14858],{"class":111,"line":229},[109,14855,123],{"class":122},[109,14857,212],{"class":211},[109,14859,215],{"class":126},[109,14861,14862],{"class":111,"line":244},[109,14863,158],{"emptyLinePlaceholder":157},[109,14865,14866,14868,14870,14873,14875,14877,14879,14881,14883,14885,14888,14890],{"class":111,"line":258},[109,14867,272],{"class":126},[109,14869,275],{"class":122},[109,14871,14872],{"class":278}," \"ret = \"",[109,14874,282],{"class":122},[109,14876,800],{"class":211},[109,14878,714],{"class":126},[109,14880,2232],{"class":133},[109,14882,13608],{"class":126},[109,14884,2232],{"class":133},[109,14886,14887],{"class":126},") ",[109,14889,275],{"class":122},[109,14891,301],{"class":126},[109,14893,14894,14896,14898,14900,14902,14904,14906,14908,14910,14912],{"class":111,"line":263},[109,14895,272],{"class":126},[109,14897,275],{"class":122},[109,14899,14872],{"class":278},[109,14901,282],{"class":122},[109,14903,800],{"class":211},[109,14905,714],{"class":126},[109,14907,1351],{"class":133},[109,14909,14887],{"class":126},[109,14911,275],{"class":122},[109,14913,301],{"class":126},[109,14915,14916],{"class":111,"line":269},[109,14917,158],{"emptyLinePlaceholder":157},[109,14919,14920,14922,14924,14926],{"class":111,"line":304},[109,14921,711],{"class":211},[109,14923,714],{"class":126},[109,14925,717],{"class":278},[109,14927,720],{"class":126},[109,14929,14930],{"class":111,"line":331},[109,14931,158],{"emptyLinePlaceholder":157},[109,14933,14934,14936,14938],{"class":111,"line":336},[109,14935,731],{"class":122},[109,14937,734],{"class":133},[109,14939,137],{"class":126},[109,14941,14942],{"class":111,"line":364},[109,14943,742],{"class":126},[19,14945,745],{},[765,14947,14948,14951,14954],{},[30,14949,14950],{},"我传就用我；没传就用你",[30,14952,14953],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[30,14955,14956],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14958,14960],{"id":14959},"_72函数的占位参数","7.2函数的占位参数",[19,14962,14963],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14965,14966,14968,14969],{},[23,14967,6518],{}," ",[106,14970,14971],{},"返回值类型 函数名 (数据类型){}",[99,14973,14975],{"className":101,"code":14974,"language":103,"meta":104,"style":104},"\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",[106,14976,14977,14982,15000,15013,15017,15025,15029,15046,15050,15060,15064,15072],{"__ignoreMap":104},[109,14978,14979],{"class":111,"line":112},[109,14980,14981],{"class":115},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[109,14983,14984,14986,14988,14990,14992,14994,14996,14998],{"class":111,"line":119},[109,14985,1166],{"class":122},[109,14987,800],{"class":211},[109,14989,714],{"class":126},[109,14991,123],{"class":122},[109,14993,2791],{"class":6553},[109,14995,13608],{"class":126},[109,14997,123],{"class":122},[109,14999,13615],{"class":126},[109,15001,15002,15004,15006,15009,15011],{"class":111,"line":140},[109,15003,272],{"class":126},[109,15005,275],{"class":122},[109,15007,15008],{"class":278}," \"this is func\"",[109,15010,282],{"class":122},[109,15012,301],{"class":126},[109,15014,15015],{"class":111,"line":154},[109,15016,742],{"class":126},[109,15018,15019,15021,15023],{"class":111,"line":161},[109,15020,123],{"class":122},[109,15022,212],{"class":211},[109,15024,215],{"class":126},[109,15026,15027],{"class":111,"line":167},[109,15028,158],{"emptyLinePlaceholder":157},[109,15030,15031,15033,15035,15037,15039,15041,15043],{"class":111,"line":185},[109,15032,14458],{"class":211},[109,15034,714],{"class":126},[109,15036,1008],{"class":133},[109,15038,1914],{"class":126},[109,15040,1008],{"class":133},[109,15042,1154],{"class":126},[109,15044,15045],{"class":115}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[109,15047,15048],{"class":111,"line":201},[109,15049,158],{"emptyLinePlaceholder":157},[109,15051,15052,15054,15056,15058],{"class":111,"line":206},[109,15053,711],{"class":211},[109,15055,714],{"class":126},[109,15057,717],{"class":278},[109,15059,720],{"class":126},[109,15061,15062],{"class":111,"line":218},[109,15063,158],{"emptyLinePlaceholder":157},[109,15065,15066,15068,15070],{"class":111,"line":223},[109,15067,731],{"class":122},[109,15069,734],{"class":133},[109,15071,137],{"class":126},[109,15073,15074],{"class":111,"line":229},[109,15075,742],{"class":126},[19,15077,15078],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15080,15082],{"id":15081},"_73函数重载","7.3函数重载",[19,15084,15085],{},"意思是函数名是可以相同的",[51,15087,15089],{"id":15088},"_731基本语法","7.3.1基本语法",[19,15091,15092],{},"作用：函数名可以相同，提高复用性",[19,15094,15095],{},[23,15096,15097],{},"函数重载满足条件：",[27,15099,15100,15103,15106],{},[30,15101,15102],{},"同一个作用域下",[30,15104,15105],{},"函数名称相同",[30,15107,15108,15109,15112,15113,15116,15117],{},"函数参数",[23,15110,15111],{},"类型不同","  或者 ",[23,15114,15115],{},"个数不同"," 或者 ",[23,15118,15119],{},"顺序不同",[19,15121,15122,15125],{},[23,15123,15124],{},"注意:","  函数的返回值不可以作为函数重载的条件",[99,15127,15129],{"className":11259,"code":15128,"language":11261,"meta":104,"style":104},"\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",[106,15130,15131,15136,15144,15148,15161,15165,15179,15183,15196,15200,15215,15219,15232,15236,15257,15261,15274,15278,15298,15302,15315,15319,15323,15328,15333,15338,15343,15348,15352,15356,15364,15368,15374,15384,15394,15408,15423,15427,15437,15441,15449],{"__ignoreMap":104},[109,15132,15133],{"class":111,"line":112},[109,15134,15135],{"class":115},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[109,15137,15138,15140,15142],{"class":111,"line":119},[109,15139,1166],{"class":122},[109,15141,800],{"class":211},[109,15143,803],{"class":126},[109,15145,15146],{"class":111,"line":140},[109,15147,808],{"class":126},[109,15149,15150,15152,15154,15157,15159],{"class":111,"line":154},[109,15151,272],{"class":126},[109,15153,275],{"class":122},[109,15155,15156],{"class":278}," \"func 的调用！\"",[109,15158,282],{"class":122},[109,15160,301],{"class":126},[109,15162,15163],{"class":111,"line":161},[109,15164,742],{"class":126},[109,15166,15167,15169,15171,15173,15175,15177],{"class":111,"line":167},[109,15168,1166],{"class":122},[109,15170,800],{"class":211},[109,15172,714],{"class":126},[109,15174,123],{"class":122},[109,15176,2791],{"class":6553},[109,15178,1330],{"class":126},[109,15180,15181],{"class":111,"line":185},[109,15182,808],{"class":126},[109,15184,15185,15187,15189,15192,15194],{"class":111,"line":201},[109,15186,272],{"class":126},[109,15188,275],{"class":122},[109,15190,15191],{"class":278}," \"func (int a) 的调用！\"",[109,15193,282],{"class":122},[109,15195,301],{"class":126},[109,15197,15198],{"class":111,"line":206},[109,15199,742],{"class":126},[109,15201,15202,15204,15206,15208,15211,15213],{"class":111,"line":218},[109,15203,1166],{"class":122},[109,15205,800],{"class":211},[109,15207,714],{"class":126},[109,15209,15210],{"class":122},"double",[109,15212,2791],{"class":6553},[109,15214,1330],{"class":126},[109,15216,15217],{"class":111,"line":223},[109,15218,808],{"class":126},[109,15220,15221,15223,15225,15228,15230],{"class":111,"line":229},[109,15222,272],{"class":126},[109,15224,275],{"class":122},[109,15226,15227],{"class":278}," \"func (double a)的调用！\"",[109,15229,282],{"class":122},[109,15231,301],{"class":126},[109,15233,15234],{"class":111,"line":244},[109,15235,742],{"class":126},[109,15237,15238,15240,15242,15244,15246,15248,15251,15253,15255],{"class":111,"line":258},[109,15239,1166],{"class":122},[109,15241,800],{"class":211},[109,15243,714],{"class":126},[109,15245,123],{"class":122},[109,15247,2791],{"class":6553},[109,15249,15250],{"class":126}," ,",[109,15252,15210],{"class":122},[109,15254,4180],{"class":6553},[109,15256,1330],{"class":126},[109,15258,15259],{"class":111,"line":263},[109,15260,808],{"class":126},[109,15262,15263,15265,15267,15270,15272],{"class":111,"line":269},[109,15264,272],{"class":126},[109,15266,275],{"class":122},[109,15268,15269],{"class":278}," \"func (int a ,double b) 的调用！\"",[109,15271,282],{"class":122},[109,15273,301],{"class":126},[109,15275,15276],{"class":111,"line":304},[109,15277,742],{"class":126},[109,15279,15280,15282,15284,15286,15288,15290,15292,15294,15296],{"class":111,"line":331},[109,15281,1166],{"class":122},[109,15283,800],{"class":211},[109,15285,714],{"class":126},[109,15287,15210],{"class":122},[109,15289,2791],{"class":6553},[109,15291,15250],{"class":126},[109,15293,123],{"class":122},[109,15295,4180],{"class":6553},[109,15297,1330],{"class":126},[109,15299,15300],{"class":111,"line":336},[109,15301,808],{"class":126},[109,15303,15304,15306,15308,15311,15313],{"class":111,"line":364},[109,15305,272],{"class":126},[109,15307,275],{"class":122},[109,15309,15310],{"class":278}," \"func (double a ,int b)的调用！\"",[109,15312,282],{"class":122},[109,15314,301],{"class":126},[109,15316,15317],{"class":111,"line":391},[109,15318,742],{"class":126},[109,15320,15321],{"class":111,"line":396},[109,15322,158],{"emptyLinePlaceholder":157},[109,15324,15325],{"class":111,"line":402},[109,15326,15327],{"class":115},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[109,15329,15330],{"class":111,"line":419},[109,15331,15332],{"class":115},"\u002F\u002Fint func(double a, int b)\n",[109,15334,15335],{"class":111,"line":435},[109,15336,15337],{"class":115},"\u002F\u002F{\n",[109,15339,15340],{"class":111,"line":440},[109,15341,15342],{"class":115},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[109,15344,15345],{"class":111,"line":467},[109,15346,15347],{"class":115},"\u002F\u002F}\n",[109,15349,15350],{"class":111,"line":494},[109,15351,158],{"emptyLinePlaceholder":157},[109,15353,15354],{"class":111,"line":499},[109,15355,158],{"emptyLinePlaceholder":157},[109,15357,15358,15360,15362],{"class":111,"line":526},[109,15359,123],{"class":122},[109,15361,212],{"class":211},[109,15363,215],{"class":126},[109,15365,15366],{"class":111,"line":552},[109,15367,158],{"emptyLinePlaceholder":157},[109,15369,15370,15372],{"class":111,"line":557},[109,15371,14458],{"class":211},[109,15373,874],{"class":126},[109,15375,15376,15378,15380,15382],{"class":111,"line":584},[109,15377,14458],{"class":211},[109,15379,714],{"class":126},[109,15381,1008],{"class":133},[109,15383,720],{"class":126},[109,15385,15386,15388,15390,15392],{"class":111,"line":611},[109,15387,14458],{"class":211},[109,15389,714],{"class":126},[109,15391,1592],{"class":133},[109,15393,720],{"class":126},[109,15395,15396,15398,15400,15402,15404,15406],{"class":111,"line":616},[109,15397,14458],{"class":211},[109,15399,714],{"class":126},[109,15401,1008],{"class":133},[109,15403,1914],{"class":126},[109,15405,1592],{"class":133},[109,15407,720],{"class":126},[109,15409,15410,15412,15414,15416,15419,15421],{"class":111,"line":633},[109,15411,14458],{"class":211},[109,15413,714],{"class":126},[109,15415,1592],{"class":133},[109,15417,15418],{"class":126}," , ",[109,15420,1008],{"class":133},[109,15422,720],{"class":126},[109,15424,15425],{"class":111,"line":649},[109,15426,14383],{"class":126},[109,15428,15429,15431,15433,15435],{"class":111,"line":676},[109,15430,711],{"class":211},[109,15432,714],{"class":126},[109,15434,717],{"class":278},[109,15436,720],{"class":126},[109,15438,15439],{"class":111,"line":703},[109,15440,158],{"emptyLinePlaceholder":157},[109,15442,15443,15445,15447],{"class":111,"line":708},[109,15444,731],{"class":122},[109,15446,734],{"class":133},[109,15448,137],{"class":126},[109,15450,15451],{"class":111,"line":723},[109,15452,742],{"class":126},[19,15454,15455],{},"重点：函数返回值不可以作为函数重载条件！",[51,15457,15459],{"id":15458},"_732注意事项","7.3.2注意事项",[27,15461,15462,15465],{},[30,15463,15464],{},"引用作为重载条件!!!",[30,15466,15467],{},"函数重载碰到函数默认参数",[99,15469,15471],{"className":101,"code":15470,"language":103,"meta":104,"style":104},"\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",[106,15472,15473,15478,15483,15487,15503,15507,15520,15524,15528,15546,15550,15563,15567,15571,15575,15580,15584,15608,15612,15625,15629,15633,15647,15651,15664,15668,15672,15680,15684,15696,15706,15719,15723,15727,15735,15739,15749,15753,15761],{"__ignoreMap":104},[109,15474,15475],{"class":111,"line":112},[109,15476,15477],{"class":115},"\u002F\u002F函数重载注意事项\n",[109,15479,15480],{"class":111,"line":119},[109,15481,15482],{"class":115},"\u002F\u002F1、引用作为重载条件\n",[109,15484,15485],{"class":111,"line":140},[109,15486,158],{"emptyLinePlaceholder":157},[109,15488,15489,15491,15493,15495,15497,15499,15501],{"class":111,"line":154},[109,15490,1166],{"class":122},[109,15492,800],{"class":211},[109,15494,714],{"class":126},[109,15496,123],{"class":122},[109,15498,831],{"class":122},[109,15500,1776],{"class":6553},[109,15502,1330],{"class":126},[109,15504,15505],{"class":111,"line":161},[109,15506,808],{"class":126},[109,15508,15509,15511,15513,15516,15518],{"class":111,"line":167},[109,15510,272],{"class":126},[109,15512,275],{"class":122},[109,15514,15515],{"class":278}," \"func (int &a) 调用 \"",[109,15517,282],{"class":122},[109,15519,301],{"class":126},[109,15521,15522],{"class":111,"line":185},[109,15523,742],{"class":126},[109,15525,15526],{"class":111,"line":201},[109,15527,158],{"emptyLinePlaceholder":157},[109,15529,15530,15532,15534,15536,15538,15540,15542,15544],{"class":111,"line":206},[109,15531,1166],{"class":122},[109,15533,800],{"class":211},[109,15535,714],{"class":126},[109,15537,170],{"class":122},[109,15539,173],{"class":122},[109,15541,831],{"class":122},[109,15543,1776],{"class":6553},[109,15545,1330],{"class":126},[109,15547,15548],{"class":111,"line":218},[109,15549,808],{"class":126},[109,15551,15552,15554,15556,15559,15561],{"class":111,"line":223},[109,15553,272],{"class":126},[109,15555,275],{"class":122},[109,15557,15558],{"class":278}," \"func (const int &a) 调用 \"",[109,15560,282],{"class":122},[109,15562,301],{"class":126},[109,15564,15565],{"class":111,"line":229},[109,15566,742],{"class":126},[109,15568,15569],{"class":111,"line":244},[109,15570,158],{"emptyLinePlaceholder":157},[109,15572,15573],{"class":111,"line":258},[109,15574,158],{"emptyLinePlaceholder":157},[109,15576,15577],{"class":111,"line":263},[109,15578,15579],{"class":115},"\u002F\u002F2、函数重载碰到函数默认参数\n",[109,15581,15582],{"class":111,"line":269},[109,15583,158],{"emptyLinePlaceholder":157},[109,15585,15586,15588,15590,15592,15594,15596,15598,15600,15602,15604,15606],{"class":111,"line":304},[109,15587,1166],{"class":122},[109,15589,14791],{"class":211},[109,15591,714],{"class":126},[109,15593,123],{"class":122},[109,15595,2791],{"class":6553},[109,15597,13608],{"class":126},[109,15599,123],{"class":122},[109,15601,4180],{"class":6553},[109,15603,14737],{"class":122},[109,15605,134],{"class":133},[109,15607,1330],{"class":126},[109,15609,15610],{"class":111,"line":331},[109,15611,808],{"class":126},[109,15613,15614,15616,15618,15621,15623],{"class":111,"line":336},[109,15615,272],{"class":126},[109,15617,275],{"class":122},[109,15619,15620],{"class":278}," \"func2(int a, int b = 10) 调用\"",[109,15622,282],{"class":122},[109,15624,301],{"class":126},[109,15626,15627],{"class":111,"line":364},[109,15628,742],{"class":126},[109,15630,15631],{"class":111,"line":391},[109,15632,158],{"emptyLinePlaceholder":157},[109,15634,15635,15637,15639,15641,15643,15645],{"class":111,"line":396},[109,15636,1166],{"class":122},[109,15638,14791],{"class":211},[109,15640,714],{"class":126},[109,15642,123],{"class":122},[109,15644,2791],{"class":6553},[109,15646,1330],{"class":126},[109,15648,15649],{"class":111,"line":402},[109,15650,808],{"class":126},[109,15652,15653,15655,15657,15660,15662],{"class":111,"line":419},[109,15654,272],{"class":126},[109,15656,275],{"class":122},[109,15658,15659],{"class":278}," \"func2(int a) 调用\"",[109,15661,282],{"class":122},[109,15663,301],{"class":126},[109,15665,15666],{"class":111,"line":435},[109,15667,742],{"class":126},[109,15669,15670],{"class":111,"line":440},[109,15671,158],{"emptyLinePlaceholder":157},[109,15673,15674,15676,15678],{"class":111,"line":467},[109,15675,123],{"class":122},[109,15677,212],{"class":211},[109,15679,215],{"class":126},[109,15681,15682],{"class":111,"line":494},[109,15683,14383],{"class":126},[109,15685,15686,15688,15690,15692,15694],{"class":111,"line":499},[109,15687,232],{"class":122},[109,15689,235],{"class":126},[109,15691,130],{"class":122},[109,15693,134],{"class":133},[109,15695,137],{"class":126},[109,15697,15698,15700,15703],{"class":111,"line":526},[109,15699,14458],{"class":211},[109,15701,15702],{"class":126},"(a);",[109,15704,15705],{"class":115}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[109,15707,15708,15710,15712,15714,15716],{"class":111,"line":552},[109,15709,14458],{"class":211},[109,15711,714],{"class":126},[109,15713,1008],{"class":133},[109,15715,1154],{"class":126},[109,15717,15718],{"class":115},"\u002F\u002F调用有const   10是个常量\n",[109,15720,15721],{"class":111,"line":557},[109,15722,158],{"emptyLinePlaceholder":157},[109,15724,15725],{"class":111,"line":584},[109,15726,158],{"emptyLinePlaceholder":157},[109,15728,15729,15732],{"class":111,"line":611},[109,15730,15731],{"class":115},"    \u002F\u002Ffunc2(10);",[109,15733,15734],{"class":115}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[109,15736,15737],{"class":111,"line":616},[109,15738,158],{"emptyLinePlaceholder":157},[109,15740,15741,15743,15745,15747],{"class":111,"line":633},[109,15742,711],{"class":211},[109,15744,714],{"class":126},[109,15746,717],{"class":278},[109,15748,720],{"class":126},[109,15750,15751],{"class":111,"line":649},[109,15752,158],{"emptyLinePlaceholder":157},[109,15754,15755,15757,15759],{"class":111,"line":676},[109,15756,731],{"class":122},[109,15758,734],{"class":133},[109,15760,137],{"class":126},[109,15762,15763],{"class":111,"line":703},[109,15764,742],{"class":126},[1467,15766,15767],{},"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":104,"searchDepth":119,"depth":119,"links":15769},[15770,15771,15772],{"id":14702,"depth":119,"text":14703},{"id":14959,"depth":119,"text":14960},{"id":15081,"depth":119,"text":15082,"children":15773},[15774,15775],{"id":15088,"depth":140,"text":15089},{"id":15458,"depth":140,"text":15459},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14694,"description":104},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15782,"title":15783,"body":15784,"description":24538,"extension":1476,"meta":24539,"navigation":157,"path":24540,"seo":24541,"stem":24542,"__hash__":24543},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15785,"toc":24519},[15786,15789,15795,15802,15807,15810,15813,15816,15820,15824,15827,15830,15838,15843,15846,15853,15858,16017,16020,16273,16276,16279,16282,16287,16290,16293,16304,16309,16545,16549,16559,16562,16570,16717,16721,16724,16727,16731,17176,17180,17188,17196,18108,18115,18120,18748,18751,18754,18757,18876,18879,18966,18969,19095,19098,19192,19195,19548,19552,19560,19564,19571,19574,19577,19588,19594,19599,19611,19619,19639,19647,19664,19850,19853,19857,19860,19863,19866,19869,19872,19875,19878,20338,20344,20348,20351,20362,20949,20952,21441,21445,21448,21451,21454,21457,21460,21468,21864,21868,21871,21874,22321,22324,22327,22332,22335,22340,22343,22347,22350,22352,22358,22361,22667,22677,22718,22722,22725,22727,22760,22763,23070,23072,23087,23090,23113,23122,23128,23131,23135,23138,23141,23146,23157,23162,23170,23175,23305,23308,23311,23486,23491,23703,23707,23710,23824,23829,24068,24072,24076,24079,24082,24087,24192,24195,24198,24201,24205,24316,24319,24322,24327,24379,24382,24385,24390,24436,24439,24444,24512,24514,24517],[10,15787,15783],{"id":15788},"_8类和对象",[19,15790,15791,15792],{},"C++面向对象的三大特性为",[23,15793,15794],{},"封装、继承、多态",[19,15796,15797,15798,15801],{},"C++认为",[23,15799,15800],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15803,15804],{},[23,15805,15806],{},"例如：",[19,15808,15809],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15811,15812],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15814,15815],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15817,15819],{"id":15818},"_81封装","8.1封装",[51,15821,15823],{"id":15822},"_811封装的意义","8.1.1封装的意义",[19,15825,15826],{},"封装是C++面向对象三大特性之一",[19,15828,15829],{},"封装的意义：",[27,15831,15832,15835],{},[30,15833,15834],{},"将属性和行为作为一个整体，表现生活中的事物",[30,15836,15837],{},"将属性和行为加以权限控制",[19,15839,15840],{},[23,15841,15842],{},"封装意义一：",[19,15844,15845],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15847,15848,14968,15850],{},[23,15849,6518],{},[106,15851,15852],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[765,15854,15855],{},[30,15856,15857],{},"**示例1：**设计一个圆类，求圆的周长",[99,15859,15861],{"className":101,"code":15860,"language":103,"meta":104,"style":104},"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",[106,15862,15863,15871,15875,15880,15885,15890,15895,15902,15907,15917,15921,15939,15943,15947,15955,15959,15964,15969,15974,15979,15990,16013],{"__ignoreMap":104},[109,15864,15865,15868],{"class":111,"line":112},[109,15866,15867],{"class":122},"class",[109,15869,15870],{"class":211}," Circle\n",[109,15872,15873],{"class":111,"line":119},[109,15874,808],{"class":126},[109,15876,15877],{"class":111,"line":140},[109,15878,15879],{"class":115},"    \u002F\u002F访问权限\n",[109,15881,15882],{"class":111,"line":154},[109,15883,15884],{"class":115},"    \u002F\u002F公共权限\n",[109,15886,15887],{"class":111,"line":161},[109,15888,15889],{"class":122},"public:\n",[109,15891,15892],{"class":111,"line":167},[109,15893,15894],{"class":115},"    \u002F\u002F属性\n",[109,15896,15897,15899],{"class":111,"line":185},[109,15898,232],{"class":122},[109,15900,15901],{"class":126}," m_r;\n",[109,15903,15904],{"class":111,"line":201},[109,15905,15906],{"class":115},"    \u002F\u002F行为\n",[109,15908,15909,15912,15915],{"class":111,"line":206},[109,15910,15911],{"class":122},"    double",[109,15913,15914],{"class":211}," calculateZC",[109,15916,803],{"class":126},[109,15918,15919],{"class":111,"line":218},[109,15920,1335],{"class":126},[109,15922,15923,15926,15929,15931,15934,15936],{"class":111,"line":223},[109,15924,15925],{"class":122},"        return",[109,15927,15928],{"class":133}," 2",[109,15930,1988],{"class":122},[109,15932,15933],{"class":126},"PI",[109,15935,1988],{"class":122},[109,15937,15938],{"class":126},"m_r;\n",[109,15940,15941],{"class":111,"line":229},[109,15942,1361],{"class":126},[109,15944,15945],{"class":111,"line":244},[109,15946,5337],{"class":126},[109,15948,15949,15951,15953],{"class":111,"line":258},[109,15950,123],{"class":122},[109,15952,212],{"class":211},[109,15954,803],{"class":126},[109,15956,15957],{"class":111,"line":263},[109,15958,808],{"class":126},[109,15960,15961],{"class":111,"line":269},[109,15962,15963],{"class":115},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[109,15965,15966],{"class":111,"line":304},[109,15967,15968],{"class":115},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[109,15970,15971],{"class":111,"line":331},[109,15972,15973],{"class":126},"    Circle c1;\n",[109,15975,15976],{"class":111,"line":336},[109,15977,15978],{"class":115},"    \u002F\u002F给圆对象 的属性进行赋值\n",[109,15980,15981,15984,15986,15988],{"class":111,"line":364},[109,15982,15983],{"class":126},"    c1.m_r",[109,15985,130],{"class":122},[109,15987,1008],{"class":133},[109,15989,137],{"class":126},[109,15991,15992,15994,15996,15999,16001,16004,16007,16009,16011],{"class":111,"line":391},[109,15993,1058],{"class":126},[109,15995,275],{"class":122},[109,15997,15998],{"class":278},"\"圆的周长\"",[109,16000,275],{"class":122},[109,16002,16003],{"class":126},"c1.",[109,16005,16006],{"class":211},"calculateZC",[109,16008,975],{"class":126},[109,16010,275],{"class":122},[109,16012,1068],{"class":126},[109,16014,16015],{"class":111,"line":396},[109,16016,742],{"class":126},[19,16018,16019],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[99,16021,16023],{"className":101,"code":16022,"language":103,"meta":104,"style":104},"#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",[106,16024,16025,16031,16041,16047,16053,16057,16061,16066,16073,16078,16096,16100,16110,16114,16119,16135,16139,16149,16153,16158,16166,16170,16202,16206,16210,16218,16222,16227,16232,16246,16260,16269],{"__ignoreMap":104},[109,16026,16027,16029],{"class":111,"line":112},[109,16028,3317],{"class":122},[109,16030,3320],{"class":278},[109,16032,16033,16035,16037,16039],{"class":111,"line":119},[109,16034,3325],{"class":122},[109,16036,3328],{"class":122},[109,16038,3331],{"class":211},[109,16040,137],{"class":126},[109,16042,16043,16045],{"class":111,"line":140},[109,16044,3317],{"class":122},[109,16046,9075],{"class":278},[109,16048,16049,16051],{"class":111,"line":154},[109,16050,15867],{"class":122},[109,16052,9088],{"class":211},[109,16054,16055],{"class":111,"line":161},[109,16056,808],{"class":126},[109,16058,16059],{"class":111,"line":167},[109,16060,15889],{"class":122},[109,16062,16063],{"class":111,"line":185},[109,16064,16065],{"class":126},"    string m_name;\n",[109,16067,16068,16070],{"class":111,"line":201},[109,16069,232],{"class":122},[109,16071,16072],{"class":126}," m_id;\n",[109,16074,16075],{"class":111,"line":206},[109,16076,16077],{"class":115},"    \u002F\u002F赋值姓名\n",[109,16079,16080,16083,16086,16088,16091,16094],{"class":111,"line":218},[109,16081,16082],{"class":122},"    void",[109,16084,16085],{"class":211}," setName",[109,16087,714],{"class":126},[109,16089,16090],{"class":211},"string",[109,16092,16093],{"class":6553}," name",[109,16095,1330],{"class":126},[109,16097,16098],{"class":111,"line":223},[109,16099,1335],{"class":126},[109,16101,16102,16105,16107],{"class":111,"line":229},[109,16103,16104],{"class":126},"        m_name",[109,16106,130],{"class":122},[109,16108,16109],{"class":126},"name;\n",[109,16111,16112],{"class":111,"line":244},[109,16113,1361],{"class":126},[109,16115,16116],{"class":111,"line":258},[109,16117,16118],{"class":115},"    \u002F\u002F赋值学号\n",[109,16120,16121,16123,16126,16128,16130,16133],{"class":111,"line":263},[109,16122,16082],{"class":122},[109,16124,16125],{"class":211}," setId",[109,16127,714],{"class":126},[109,16129,123],{"class":122},[109,16131,16132],{"class":6553}," id",[109,16134,1330],{"class":126},[109,16136,16137],{"class":111,"line":269},[109,16138,1335],{"class":126},[109,16140,16141,16144,16146],{"class":111,"line":304},[109,16142,16143],{"class":126},"        m_id",[109,16145,130],{"class":122},[109,16147,16148],{"class":126},"id;\n",[109,16150,16151],{"class":111,"line":331},[109,16152,1361],{"class":126},[109,16154,16155],{"class":111,"line":336},[109,16156,16157],{"class":115},"    \u002F\u002F打印学生信息\n",[109,16159,16160,16162,16164],{"class":111,"line":364},[109,16161,16082],{"class":122},[109,16163,10933],{"class":211},[109,16165,803],{"class":126},[109,16167,16168],{"class":111,"line":391},[109,16169,1335],{"class":126},[109,16171,16172,16174,16176,16179,16181,16184,16186,16188,16190,16193,16195,16198,16200],{"class":111,"line":396},[109,16173,1396],{"class":126},[109,16175,275],{"class":122},[109,16177,16178],{"class":278},"\"姓名：\"",[109,16180,275],{"class":122},[109,16182,16183],{"class":126},"m_name",[109,16185,275],{"class":122},[109,16187,5697],{"class":278},[109,16189,275],{"class":122},[109,16191,16192],{"class":278},"\"学号：\"",[109,16194,275],{"class":122},[109,16196,16197],{"class":126},"m_id",[109,16199,275],{"class":122},[109,16201,1068],{"class":126},[109,16203,16204],{"class":111,"line":402},[109,16205,1361],{"class":126},[109,16207,16208],{"class":111,"line":419},[109,16209,5337],{"class":126},[109,16211,16212,16214,16216],{"class":111,"line":435},[109,16213,123],{"class":122},[109,16215,212],{"class":211},[109,16217,803],{"class":126},[109,16219,16220],{"class":111,"line":440},[109,16221,808],{"class":126},[109,16223,16224],{"class":111,"line":467},[109,16225,16226],{"class":115},"    \u002F\u002F实例化\n",[109,16228,16229],{"class":111,"line":494},[109,16230,16231],{"class":126},"    Student s1;\n",[109,16233,16234,16237,16240,16242,16244],{"class":111,"line":499},[109,16235,16236],{"class":126},"    s1.",[109,16238,16239],{"class":211},"setName",[109,16241,714],{"class":126},[109,16243,9242],{"class":278},[109,16245,720],{"class":126},[109,16247,16248,16250,16253,16255,16258],{"class":111,"line":526},[109,16249,16236],{"class":126},[109,16251,16252],{"class":211},"setId",[109,16254,714],{"class":126},[109,16256,16257],{"class":133},"123456",[109,16259,720],{"class":126},[109,16261,16262,16264,16267],{"class":111,"line":552},[109,16263,16236],{"class":126},[109,16265,16266],{"class":211},"printInfo",[109,16268,874],{"class":126},[109,16270,16271],{"class":111,"line":557},[109,16272,742],{"class":126},[19,16274,16275],{},"类中的属性和行为统称为成员",[19,16277,16278],{},"属性：成员属性(成员变量)",[19,16280,16281],{},"方法：成员函数(成员方法)",[19,16283,16284],{},[23,16285,16286],{},"封装意义二：",[19,16288,16289],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16291,16292],{},"访问权限有三种：",[765,16294,16295,16298,16301],{},[30,16296,16297],{},"public        公共权限",[30,16299,16300],{},"protected 保护权限",[30,16302,16303],{},"private      私有权限",[19,16305,16306],{},[23,16307,16308],{},"示例：",[99,16310,16312],{"className":11259,"code":16311,"language":11261,"meta":104,"style":104},"\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",[106,16313,16314,16319,16324,16329,16334,16338,16345,16349,16354,16358,16363,16367,16372,16377,16382,16386,16391,16396,16403,16407,16411,16419,16423,16434,16446,16458,16462,16466,16470,16478,16482,16487,16499,16507,16515,16519,16529,16533,16541],{"__ignoreMap":104},[109,16315,16316],{"class":111,"line":112},[109,16317,16318],{"class":115},"\u002F\u002F三种权限\n",[109,16320,16321],{"class":111,"line":119},[109,16322,16323],{"class":115},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[109,16325,16326],{"class":111,"line":140},[109,16327,16328],{"class":115},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[109,16330,16331],{"class":111,"line":154},[109,16332,16333],{"class":115},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[109,16335,16336],{"class":111,"line":161},[109,16337,158],{"emptyLinePlaceholder":157},[109,16339,16340,16342],{"class":111,"line":167},[109,16341,15867],{"class":122},[109,16343,16344],{"class":211}," Person\n",[109,16346,16347],{"class":111,"line":185},[109,16348,808],{"class":126},[109,16350,16351],{"class":111,"line":201},[109,16352,16353],{"class":115},"    \u002F\u002F姓名  公共权限\n",[109,16355,16356],{"class":111,"line":206},[109,16357,15889],{"class":122},[109,16359,16360],{"class":111,"line":218},[109,16361,16362],{"class":126},"    string m_Name;\n",[109,16364,16365],{"class":111,"line":223},[109,16366,158],{"emptyLinePlaceholder":157},[109,16368,16369],{"class":111,"line":229},[109,16370,16371],{"class":115},"    \u002F\u002F汽车  保护权限\n",[109,16373,16374],{"class":111,"line":244},[109,16375,16376],{"class":122},"protected:\n",[109,16378,16379],{"class":111,"line":258},[109,16380,16381],{"class":126},"    string m_Car;\n",[109,16383,16384],{"class":111,"line":263},[109,16385,158],{"emptyLinePlaceholder":157},[109,16387,16388],{"class":111,"line":269},[109,16389,16390],{"class":115},"    \u002F\u002F银行卡密码  私有权限\n",[109,16392,16393],{"class":111,"line":304},[109,16394,16395],{"class":122},"private:\n",[109,16397,16398,16400],{"class":111,"line":331},[109,16399,232],{"class":122},[109,16401,16402],{"class":126}," m_Password;\n",[109,16404,16405],{"class":111,"line":336},[109,16406,158],{"emptyLinePlaceholder":157},[109,16408,16409],{"class":111,"line":364},[109,16410,15889],{"class":122},[109,16412,16413,16415,16417],{"class":111,"line":391},[109,16414,16082],{"class":122},[109,16416,800],{"class":211},[109,16418,803],{"class":126},[109,16420,16421],{"class":111,"line":396},[109,16422,1335],{"class":126},[109,16424,16425,16428,16430,16432],{"class":111,"line":402},[109,16426,16427],{"class":126},"        m_Name ",[109,16429,130],{"class":122},[109,16431,10256],{"class":278},[109,16433,137],{"class":126},[109,16435,16436,16439,16441,16444],{"class":111,"line":419},[109,16437,16438],{"class":126},"        m_Car ",[109,16440,130],{"class":122},[109,16442,16443],{"class":278}," \"拖拉机\"",[109,16445,137],{"class":126},[109,16447,16448,16451,16453,16456],{"class":111,"line":435},[109,16449,16450],{"class":126},"        m_Password ",[109,16452,130],{"class":122},[109,16454,16455],{"class":133}," 123456",[109,16457,137],{"class":126},[109,16459,16460],{"class":111,"line":440},[109,16461,1361],{"class":126},[109,16463,16464],{"class":111,"line":467},[109,16465,5337],{"class":126},[109,16467,16468],{"class":111,"line":494},[109,16469,158],{"emptyLinePlaceholder":157},[109,16471,16472,16474,16476],{"class":111,"line":499},[109,16473,123],{"class":122},[109,16475,212],{"class":211},[109,16477,215],{"class":126},[109,16479,16480],{"class":111,"line":526},[109,16481,158],{"emptyLinePlaceholder":157},[109,16483,16484],{"class":111,"line":552},[109,16485,16486],{"class":126},"    Person p;\n",[109,16488,16489,16492,16494,16497],{"class":111,"line":557},[109,16490,16491],{"class":126},"    p.m_Name ",[109,16493,130],{"class":122},[109,16495,16496],{"class":278}," \"李四\"",[109,16498,137],{"class":126},[109,16500,16501,16504],{"class":111,"line":584},[109,16502,16503],{"class":115},"    \u002F\u002Fp.m_Car = \"奔驰\";",[109,16505,16506],{"class":115},"  \u002F\u002F保护权限类外访问不到\n",[109,16508,16509,16512],{"class":111,"line":611},[109,16510,16511],{"class":115},"    \u002F\u002Fp.m_Password = 123;",[109,16513,16514],{"class":115}," \u002F\u002F私有权限类外访问不到\n",[109,16516,16517],{"class":111,"line":616},[109,16518,158],{"emptyLinePlaceholder":157},[109,16520,16521,16523,16525,16527],{"class":111,"line":633},[109,16522,711],{"class":211},[109,16524,714],{"class":126},[109,16526,717],{"class":278},[109,16528,720],{"class":126},[109,16530,16531],{"class":111,"line":649},[109,16532,158],{"emptyLinePlaceholder":157},[109,16534,16535,16537,16539],{"class":111,"line":676},[109,16536,731],{"class":122},[109,16538,734],{"class":133},[109,16540,137],{"class":126},[109,16542,16543],{"class":111,"line":703},[109,16544,742],{"class":126},[51,16546,16548],{"id":16547},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16550,16551,16552,16555,16556],{},"在C++中 struct和class唯一的",[23,16553,16554],{},"区别","就在于 ",[23,16557,16558],{},"默认的访问权限不同",[19,16560,16561],{},"区别：",[27,16563,16564,16567],{},[30,16565,16566],{},"struct 默认权限为公共",[30,16568,16569],{},"class   默认权限为私有",[99,16571,16573],{"className":11259,"code":16572,"language":11261,"meta":104,"style":104},"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",[106,16574,16575,16582,16586,16596,16600,16604,16611,16615,16625,16629,16633,16641,16645,16650,16664,16668,16673,16687,16691,16701,16705,16713],{"__ignoreMap":104},[109,16576,16577,16579],{"class":111,"line":112},[109,16578,15867],{"class":122},[109,16580,16581],{"class":211}," C1\n",[109,16583,16584],{"class":111,"line":119},[109,16585,808],{"class":126},[109,16587,16588,16590,16593],{"class":111,"line":140},[109,16589,232],{"class":122},[109,16591,16592],{"class":126},"  m_A;",[109,16594,16595],{"class":115}," \u002F\u002F默认是私有权限\n",[109,16597,16598],{"class":111,"line":154},[109,16599,5337],{"class":126},[109,16601,16602],{"class":111,"line":161},[109,16603,158],{"emptyLinePlaceholder":157},[109,16605,16606,16608],{"class":111,"line":167},[109,16607,9085],{"class":122},[109,16609,16610],{"class":211}," C2\n",[109,16612,16613],{"class":111,"line":185},[109,16614,808],{"class":126},[109,16616,16617,16619,16622],{"class":111,"line":201},[109,16618,232],{"class":122},[109,16620,16621],{"class":126}," m_A;",[109,16623,16624],{"class":115},"  \u002F\u002F默认是公共权限\n",[109,16626,16627],{"class":111,"line":206},[109,16628,5337],{"class":126},[109,16630,16631],{"class":111,"line":218},[109,16632,158],{"emptyLinePlaceholder":157},[109,16634,16635,16637,16639],{"class":111,"line":223},[109,16636,123],{"class":122},[109,16638,212],{"class":211},[109,16640,215],{"class":126},[109,16642,16643],{"class":111,"line":229},[109,16644,158],{"emptyLinePlaceholder":157},[109,16646,16647],{"class":111,"line":244},[109,16648,16649],{"class":126},"    C1 c1;\n",[109,16651,16652,16655,16657,16659,16661],{"class":111,"line":258},[109,16653,16654],{"class":126},"    c1.m_A ",[109,16656,130],{"class":122},[109,16658,134],{"class":133},[109,16660,821],{"class":126},[109,16662,16663],{"class":115}," \u002F\u002F错误，访问权限是私有\n",[109,16665,16666],{"class":111,"line":263},[109,16667,158],{"emptyLinePlaceholder":157},[109,16669,16670],{"class":111,"line":269},[109,16671,16672],{"class":126},"    C2 c2;\n",[109,16674,16675,16678,16680,16682,16684],{"class":111,"line":304},[109,16676,16677],{"class":126},"    c2.m_A ",[109,16679,130],{"class":122},[109,16681,134],{"class":133},[109,16683,821],{"class":126},[109,16685,16686],{"class":115}," \u002F\u002F正确，访问权限是公共\n",[109,16688,16689],{"class":111,"line":331},[109,16690,158],{"emptyLinePlaceholder":157},[109,16692,16693,16695,16697,16699],{"class":111,"line":336},[109,16694,711],{"class":211},[109,16696,714],{"class":126},[109,16698,717],{"class":278},[109,16700,720],{"class":126},[109,16702,16703],{"class":111,"line":364},[109,16704,158],{"emptyLinePlaceholder":157},[109,16706,16707,16709,16711],{"class":111,"line":391},[109,16708,731],{"class":122},[109,16710,734],{"class":133},[109,16712,137],{"class":126},[109,16714,16715],{"class":111,"line":396},[109,16716,742],{"class":126},[51,16718,16720],{"id":16719},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16722,16723],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16725,16726],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16728,16729],{},[23,16730,16308],{},[99,16732,16734],{"className":11259,"code":16733,"language":11261,"meta":104,"style":104},"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",[106,16735,16736,16746,16750,16754,16759,16773,16782,16786,16796,16800,16807,16811,16815,16819,16824,16833,16840,16844,16849,16865,16888,16901,16908,16912,16921,16925,16929,16934,16950,16960,16964,16968,16972,16980,16984,16994,16998,17006,17010,17014,17022,17026,17030,17035,17048,17071,17075,17080,17093,17115,17119,17124,17138,17146,17150,17160,17164,17172],{"__ignoreMap":104},[109,16737,16738,16740,16743],{"class":111,"line":112},[109,16739,15867],{"class":122},[109,16741,16742],{"class":211}," Person",[109,16744,16745],{"class":126}," {\n",[109,16747,16748],{"class":111,"line":119},[109,16749,15889],{"class":122},[109,16751,16752],{"class":111,"line":140},[109,16753,158],{"emptyLinePlaceholder":157},[109,16755,16756],{"class":111,"line":154},[109,16757,16758],{"class":115},"    \u002F\u002F姓名设置可读可写\n",[109,16760,16761,16763,16765,16767,16769,16771],{"class":111,"line":161},[109,16762,16082],{"class":122},[109,16764,16085],{"class":211},[109,16766,714],{"class":126},[109,16768,16090],{"class":211},[109,16770,16093],{"class":6553},[109,16772,13615],{"class":126},[109,16774,16775,16777,16779],{"class":111,"line":167},[109,16776,16427],{"class":126},[109,16778,130],{"class":122},[109,16780,16781],{"class":126}," name;\n",[109,16783,16784],{"class":111,"line":185},[109,16785,1361],{"class":126},[109,16787,16788,16791,16794],{"class":111,"line":201},[109,16789,16790],{"class":211},"    string",[109,16792,16793],{"class":211}," getName",[109,16795,803],{"class":126},[109,16797,16798],{"class":111,"line":206},[109,16799,1335],{"class":126},[109,16801,16802,16804],{"class":111,"line":218},[109,16803,15925],{"class":122},[109,16805,16806],{"class":126}," m_Name;\n",[109,16808,16809],{"class":111,"line":223},[109,16810,1361],{"class":126},[109,16812,16813],{"class":111,"line":229},[109,16814,158],{"emptyLinePlaceholder":157},[109,16816,16817],{"class":111,"line":244},[109,16818,158],{"emptyLinePlaceholder":157},[109,16820,16821],{"class":111,"line":258},[109,16822,16823],{"class":115},"    \u002F\u002F获取年龄 \n",[109,16825,16826,16828,16831],{"class":111,"line":263},[109,16827,232],{"class":122},[109,16829,16830],{"class":211}," getAge",[109,16832,215],{"class":126},[109,16834,16835,16837],{"class":111,"line":269},[109,16836,15925],{"class":122},[109,16838,16839],{"class":126}," m_Age;\n",[109,16841,16842],{"class":111,"line":304},[109,16843,1361],{"class":126},[109,16845,16846],{"class":111,"line":331},[109,16847,16848],{"class":115},"    \u002F\u002F设置年龄\n",[109,16850,16851,16853,16856,16858,16860,16863],{"class":111,"line":336},[109,16852,16082],{"class":122},[109,16854,16855],{"class":211}," setAge",[109,16857,714],{"class":126},[109,16859,123],{"class":122},[109,16861,16862],{"class":6553}," age",[109,16864,13615],{"class":126},[109,16866,16867,16869,16872,16874,16876,16878,16881,16883,16886],{"class":111,"line":364},[109,16868,3852],{"class":122},[109,16870,16871],{"class":126}," (age ",[109,16873,1320],{"class":122},[109,16875,734],{"class":133},[109,16877,4599],{"class":122},[109,16879,16880],{"class":126}," age ",[109,16882,2490],{"class":122},[109,16884,16885],{"class":133}," 150",[109,16887,13615],{"class":126},[109,16889,16890,16892,16894,16897,16899],{"class":111,"line":391},[109,16891,11037],{"class":126},[109,16893,275],{"class":122},[109,16895,16896],{"class":278}," \"你个老妖精!\"",[109,16898,282],{"class":122},[109,16900,301],{"class":126},[109,16902,16903,16906],{"class":111,"line":396},[109,16904,16905],{"class":122},"            return",[109,16907,137],{"class":126},[109,16909,16910],{"class":111,"line":402},[109,16911,3884],{"class":126},[109,16913,16914,16917,16919],{"class":111,"line":419},[109,16915,16916],{"class":126},"        m_Age ",[109,16918,130],{"class":122},[109,16920,9123],{"class":126},[109,16922,16923],{"class":111,"line":435},[109,16924,1361],{"class":126},[109,16926,16927],{"class":111,"line":440},[109,16928,158],{"emptyLinePlaceholder":157},[109,16930,16931],{"class":111,"line":467},[109,16932,16933],{"class":115},"    \u002F\u002F情人设置为只写\n",[109,16935,16936,16938,16941,16943,16945,16948],{"class":111,"line":494},[109,16937,16082],{"class":122},[109,16939,16940],{"class":211}," setLover",[109,16942,714],{"class":126},[109,16944,16090],{"class":211},[109,16946,16947],{"class":6553}," lover",[109,16949,13615],{"class":126},[109,16951,16952,16955,16957],{"class":111,"line":499},[109,16953,16954],{"class":126},"        m_Lover ",[109,16956,130],{"class":122},[109,16958,16959],{"class":126}," lover;\n",[109,16961,16962],{"class":111,"line":526},[109,16963,1361],{"class":126},[109,16965,16966],{"class":111,"line":552},[109,16967,158],{"emptyLinePlaceholder":157},[109,16969,16970],{"class":111,"line":557},[109,16971,16395],{"class":122},[109,16973,16974,16977],{"class":111,"line":584},[109,16975,16976],{"class":126},"    string m_Name;",[109,16978,16979],{"class":115}," \u002F\u002F可读可写  姓名\n",[109,16981,16982],{"class":111,"line":611},[109,16983,14383],{"class":126},[109,16985,16986,16988,16991],{"class":111,"line":616},[109,16987,232],{"class":122},[109,16989,16990],{"class":126}," m_Age;",[109,16992,16993],{"class":115}," \u002F\u002F只读  年龄\n",[109,16995,16996],{"class":111,"line":633},[109,16997,158],{"emptyLinePlaceholder":157},[109,16999,17000,17003],{"class":111,"line":649},[109,17001,17002],{"class":126},"    string m_Lover;",[109,17004,17005],{"class":115}," \u002F\u002F只写  情人\n",[109,17007,17008],{"class":111,"line":676},[109,17009,5337],{"class":126},[109,17011,17012],{"class":111,"line":703},[109,17013,158],{"emptyLinePlaceholder":157},[109,17015,17016,17018,17020],{"class":111,"line":708},[109,17017,123],{"class":122},[109,17019,212],{"class":211},[109,17021,215],{"class":126},[109,17023,17024],{"class":111,"line":723},[109,17025,158],{"emptyLinePlaceholder":157},[109,17027,17028],{"class":111,"line":728},[109,17029,16486],{"class":126},[109,17031,17032],{"class":111,"line":739},[109,17033,17034],{"class":115},"    \u002F\u002F姓名设置\n",[109,17036,17037,17040,17042,17044,17046],{"class":111,"line":9352},[109,17038,17039],{"class":126},"    p.",[109,17041,16239],{"class":211},[109,17043,714],{"class":126},[109,17045,9242],{"class":278},[109,17047,720],{"class":126},[109,17049,17050,17052,17054,17057,17059,17062,17065,17067,17069],{"class":111,"line":9364},[109,17051,272],{"class":126},[109,17053,275],{"class":122},[109,17055,17056],{"class":278}," \"姓名： \"",[109,17058,282],{"class":122},[109,17060,17061],{"class":126}," p.",[109,17063,17064],{"class":211},"getName",[109,17066,14223],{"class":126},[109,17068,275],{"class":122},[109,17070,301],{"class":126},[109,17072,17073],{"class":111,"line":9376},[109,17074,158],{"emptyLinePlaceholder":157},[109,17076,17077],{"class":111,"line":11034},[109,17078,17079],{"class":115},"    \u002F\u002F年龄设置\n",[109,17081,17082,17084,17087,17089,17091],{"class":111,"line":11059},[109,17083,17039],{"class":126},[109,17085,17086],{"class":211},"setAge",[109,17088,714],{"class":126},[109,17090,2188],{"class":133},[109,17092,720],{"class":126},[109,17094,17095,17097,17099,17102,17104,17106,17109,17111,17113],{"class":111,"line":11082},[109,17096,272],{"class":126},[109,17098,275],{"class":122},[109,17100,17101],{"class":278}," \"年龄： \"",[109,17103,282],{"class":122},[109,17105,17061],{"class":126},[109,17107,17108],{"class":211},"getAge",[109,17110,14223],{"class":126},[109,17112,275],{"class":122},[109,17114,301],{"class":126},[109,17116,17117],{"class":111,"line":11106},[109,17118,158],{"emptyLinePlaceholder":157},[109,17120,17121],{"class":111,"line":11111},[109,17122,17123],{"class":115},"    \u002F\u002F情人设置\n",[109,17125,17126,17128,17131,17133,17136],{"class":111,"line":11116},[109,17127,17039],{"class":126},[109,17129,17130],{"class":211},"setLover",[109,17132,714],{"class":126},[109,17134,17135],{"class":278},"\"苍井\"",[109,17137,720],{"class":126},[109,17139,17140,17143],{"class":111,"line":11121},[109,17141,17142],{"class":115},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[109,17144,17145],{"class":115},"  \u002F\u002F只写属性，不可以读取\n",[109,17147,17148],{"class":111,"line":11130},[109,17149,158],{"emptyLinePlaceholder":157},[109,17151,17152,17154,17156,17158],{"class":111,"line":11135},[109,17153,711],{"class":211},[109,17155,714],{"class":126},[109,17157,717],{"class":278},[109,17159,720],{"class":126},[109,17161,17162],{"class":111,"line":11141},[109,17163,158],{"emptyLinePlaceholder":157},[109,17165,17166,17168,17170],{"class":111,"line":11162},[109,17167,731],{"class":122},[109,17169,734],{"class":133},[109,17171,137],{"class":126},[109,17173,17174],{"class":111,"line":11168},[109,17175,742],{"class":126},[51,17177,17179],{"id":17178},"_814封装案例","8.1.4封装案例",[765,17181,17182],{},[30,17183,17184,17187],{},[23,17185,17186],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[27,17189,17190,17193],{},[30,17191,17192],{},"求出立方体的面积和体积",[30,17194,17195],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[99,17197,17199],{"className":101,"code":17198,"language":103,"meta":104,"style":104},"#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",[106,17200,17201,17207,17217,17224,17228,17232,17237,17267,17271,17281,17291,17301,17305,17314,17318,17354,17358,17367,17371,17387,17391,17396,17405,17409,17416,17420,17429,17433,17440,17444,17453,17457,17464,17468,17473,17490,17494,17540,17544,17553,17557,17561,17565,17574,17578,17582,17587,17591,17597,17603,17609,17613,17617,17622,17644,17648,17702,17706,17714,17718,17723,17728,17741,17748,17764,17775,17781,17804,17810,17833,17847,17867,17873,17884,17907,17929,17934,17940,17954,17967,17972,17986,17991,17997,18002,18016,18021,18026,18040,18052,18057,18070,18075,18080,18085,18098,18103],{"__ignoreMap":104},[109,17202,17203,17205],{"class":111,"line":112},[109,17204,3317],{"class":122},[109,17206,3320],{"class":278},[109,17208,17209,17211,17213,17215],{"class":111,"line":119},[109,17210,3325],{"class":122},[109,17212,3328],{"class":122},[109,17214,3331],{"class":211},[109,17216,137],{"class":126},[109,17218,17219,17221],{"class":111,"line":140},[109,17220,15867],{"class":122},[109,17222,17223],{"class":211}," Cube\n",[109,17225,17226],{"class":111,"line":154},[109,17227,808],{"class":126},[109,17229,17230],{"class":111,"line":161},[109,17231,15889],{"class":122},[109,17233,17234],{"class":111,"line":167},[109,17235,17236],{"class":115},"    \u002F\u002F输入长宽高\n",[109,17238,17239,17241,17244,17246,17248,17251,17253,17255,17258,17260,17262,17265],{"class":111,"line":185},[109,17240,16082],{"class":122},[109,17242,17243],{"class":211}," setLwh",[109,17245,714],{"class":126},[109,17247,123],{"class":122},[109,17249,17250],{"class":6553}," l",[109,17252,1914],{"class":126},[109,17254,123],{"class":122},[109,17256,17257],{"class":6553}," w",[109,17259,1914],{"class":126},[109,17261,123],{"class":122},[109,17263,17264],{"class":6553}," h",[109,17266,1330],{"class":126},[109,17268,17269],{"class":111,"line":201},[109,17270,1335],{"class":126},[109,17272,17273,17276,17278],{"class":111,"line":206},[109,17274,17275],{"class":126},"        m_L",[109,17277,130],{"class":122},[109,17279,17280],{"class":126},"l;\n",[109,17282,17283,17286,17288],{"class":111,"line":218},[109,17284,17285],{"class":126},"        m_W",[109,17287,130],{"class":122},[109,17289,17290],{"class":126},"w;\n",[109,17292,17293,17296,17298],{"class":111,"line":223},[109,17294,17295],{"class":126},"        m_H",[109,17297,130],{"class":122},[109,17299,17300],{"class":126},"h;\n",[109,17302,17303],{"class":111,"line":229},[109,17304,1361],{"class":126},[109,17306,17307,17309,17312],{"class":111,"line":244},[109,17308,232],{"class":122},[109,17310,17311],{"class":211}," mianji",[109,17313,803],{"class":126},[109,17315,17316],{"class":111,"line":258},[109,17317,1335],{"class":126},[109,17319,17320,17322,17324,17326,17329,17331,17334,17336,17339,17341,17344,17346,17349,17351],{"class":111,"line":263},[109,17321,15925],{"class":122},[109,17323,15928],{"class":133},[109,17325,1988],{"class":122},[109,17327,17328],{"class":126},"(m_L",[109,17330,1988],{"class":122},[109,17332,17333],{"class":126},"m_W ",[109,17335,1348],{"class":122},[109,17337,17338],{"class":126}," m_L",[109,17340,1988],{"class":122},[109,17342,17343],{"class":126},"m_H ",[109,17345,1348],{"class":122},[109,17347,17348],{"class":126}," m_W",[109,17350,1988],{"class":122},[109,17352,17353],{"class":126},"m_H);\n",[109,17355,17356],{"class":111,"line":269},[109,17357,1361],{"class":126},[109,17359,17360,17362,17365],{"class":111,"line":304},[109,17361,232],{"class":122},[109,17363,17364],{"class":211}," tiji",[109,17366,803],{"class":126},[109,17368,17369],{"class":111,"line":331},[109,17370,1335],{"class":126},[109,17372,17373,17375,17377,17379,17382,17384],{"class":111,"line":336},[109,17374,15925],{"class":122},[109,17376,17338],{"class":126},[109,17378,1988],{"class":122},[109,17380,17381],{"class":126},"m_W",[109,17383,1988],{"class":122},[109,17385,17386],{"class":126},"m_H;\n",[109,17388,17389],{"class":111,"line":364},[109,17390,1361],{"class":126},[109,17392,17393],{"class":111,"line":391},[109,17394,17395],{"class":115},"    \u002F\u002F获取长宽高\n",[109,17397,17398,17400,17403],{"class":111,"line":396},[109,17399,232],{"class":122},[109,17401,17402],{"class":211}," getLength",[109,17404,803],{"class":126},[109,17406,17407],{"class":111,"line":402},[109,17408,1335],{"class":126},[109,17410,17411,17413],{"class":111,"line":419},[109,17412,15925],{"class":122},[109,17414,17415],{"class":126}," m_L;\n",[109,17417,17418],{"class":111,"line":435},[109,17419,1361],{"class":126},[109,17421,17422,17424,17427],{"class":111,"line":440},[109,17423,232],{"class":122},[109,17425,17426],{"class":211}," getWidth",[109,17428,803],{"class":126},[109,17430,17431],{"class":111,"line":467},[109,17432,1335],{"class":126},[109,17434,17435,17437],{"class":111,"line":494},[109,17436,15925],{"class":122},[109,17438,17439],{"class":126}," m_W;\n",[109,17441,17442],{"class":111,"line":499},[109,17443,1361],{"class":126},[109,17445,17446,17448,17451],{"class":111,"line":526},[109,17447,232],{"class":122},[109,17449,17450],{"class":211}," getHeight",[109,17452,803],{"class":126},[109,17454,17455],{"class":111,"line":552},[109,17456,1335],{"class":126},[109,17458,17459,17461],{"class":111,"line":557},[109,17460,15925],{"class":122},[109,17462,17463],{"class":126}," m_H;\n",[109,17465,17466],{"class":111,"line":584},[109,17467,1361],{"class":126},[109,17469,17470],{"class":111,"line":611},[109,17471,17472],{"class":115},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[109,17474,17475,17478,17481,17483,17486,17488],{"class":111,"line":616},[109,17476,17477],{"class":122},"    bool",[109,17479,17480],{"class":211}," isEqual",[109,17482,714],{"class":126},[109,17484,17485],{"class":211},"Cube",[109,17487,4196],{"class":6553},[109,17489,1330],{"class":126},[109,17491,17492],{"class":111,"line":633},[109,17493,1335],{"class":126},[109,17495,17496,17498,17501,17504,17506,17508,17511,17513,17516,17519,17521,17523,17526,17528,17530,17533,17535,17537],{"class":111,"line":649},[109,17497,3852],{"class":122},[109,17499,17500],{"class":126}," (c.",[109,17502,17503],{"class":211},"getLength",[109,17505,14223],{"class":126},[109,17507,4296],{"class":122},[109,17509,17510],{"class":126}," m_L ",[109,17512,3091],{"class":122},[109,17514,17515],{"class":126}," c.",[109,17517,17518],{"class":211},"getWidth",[109,17520,14223],{"class":126},[109,17522,4296],{"class":122},[109,17524,17525],{"class":126}," m_W ",[109,17527,3091],{"class":122},[109,17529,17515],{"class":126},[109,17531,17532],{"class":211},"getHeight",[109,17534,14223],{"class":126},[109,17536,4296],{"class":122},[109,17538,17539],{"class":126}," m_H)\n",[109,17541,17542],{"class":111,"line":676},[109,17543,3865],{"class":126},[109,17545,17546,17548,17551],{"class":111,"line":703},[109,17547,16905],{"class":122},[109,17549,17550],{"class":133}," true",[109,17552,137],{"class":126},[109,17554,17555],{"class":111,"line":708},[109,17556,3884],{"class":126},[109,17558,17559],{"class":111,"line":723},[109,17560,3925],{"class":122},[109,17562,17563],{"class":111,"line":728},[109,17564,3865],{"class":126},[109,17566,17567,17569,17572],{"class":111,"line":739},[109,17568,16905],{"class":122},[109,17570,17571],{"class":133}," false",[109,17573,137],{"class":126},[109,17575,17576],{"class":111,"line":9352},[109,17577,3884],{"class":126},[109,17579,17580],{"class":111,"line":9364},[109,17581,1361],{"class":126},[109,17583,17584],{"class":111,"line":9376},[109,17585,17586],{"class":115},"    \u002F\u002F私有属性\n",[109,17588,17589],{"class":111,"line":11034},[109,17590,16395],{"class":122},[109,17592,17593,17595],{"class":111,"line":11059},[109,17594,232],{"class":122},[109,17596,17415],{"class":126},[109,17598,17599,17601],{"class":111,"line":11082},[109,17600,232],{"class":122},[109,17602,17439],{"class":126},[109,17604,17605,17607],{"class":111,"line":11106},[109,17606,232],{"class":122},[109,17608,17463],{"class":126},[109,17610,17611],{"class":111,"line":11111},[109,17612,158],{"emptyLinePlaceholder":157},[109,17614,17615],{"class":111,"line":11116},[109,17616,5337],{"class":126},[109,17618,17619],{"class":111,"line":11121},[109,17620,17621],{"class":115},"\u002F\u002F全局函数判断两个立方体是否相等\n",[109,17623,17624,17626,17628,17630,17632,17635,17637,17639,17642],{"class":111,"line":11130},[109,17625,2747],{"class":122},[109,17627,17480],{"class":211},[109,17629,714],{"class":126},[109,17631,17485],{"class":211},[109,17633,17634],{"class":6553}," c1",[109,17636,1914],{"class":126},[109,17638,17485],{"class":211},[109,17640,17641],{"class":6553}," c2",[109,17643,1330],{"class":126},[109,17645,17646],{"class":111,"line":11135},[109,17647,808],{"class":126},[109,17649,17650,17652,17655,17657,17659,17661,17664,17666,17669,17671,17673,17675,17677,17679,17681,17683,17685,17687,17689,17691,17693,17695,17697,17699],{"class":111,"line":11141},[109,17651,731],{"class":122},[109,17653,17654],{"class":126}," (c1.",[109,17656,17503],{"class":211},[109,17658,14223],{"class":126},[109,17660,4296],{"class":122},[109,17662,17663],{"class":126}," c2.",[109,17665,17503],{"class":211},[109,17667,17668],{"class":126},"()) ",[109,17670,3091],{"class":122},[109,17672,17654],{"class":126},[109,17674,17518],{"class":211},[109,17676,14223],{"class":126},[109,17678,4296],{"class":122},[109,17680,17663],{"class":126},[109,17682,17518],{"class":211},[109,17684,17668],{"class":126},[109,17686,3091],{"class":122},[109,17688,17654],{"class":126},[109,17690,17532],{"class":211},[109,17692,14223],{"class":126},[109,17694,4296],{"class":122},[109,17696,17663],{"class":126},[109,17698,17532],{"class":211},[109,17700,17701],{"class":126},"());\n",[109,17703,17704],{"class":111,"line":11162},[109,17705,742],{"class":126},[109,17707,17708,17710,17712],{"class":111,"line":11168},[109,17709,123],{"class":122},[109,17711,212],{"class":211},[109,17713,803],{"class":126},[109,17715,17716],{"class":111,"line":11182},[109,17717,808],{"class":126},[109,17719,17720],{"class":111,"line":11188},[109,17721,17722],{"class":126},"    Cube c1;\n",[109,17724,17725],{"class":111,"line":11215},[109,17726,17727],{"class":115},"    \u002F\u002F输入立方体的长宽高\n",[109,17729,17730,17732,17734,17737,17739],{"class":111,"line":11224},[109,17731,1058],{"class":126},[109,17733,275],{"class":122},[109,17735,17736],{"class":278},"\"请输入第一个立方体的长、宽、高：\"",[109,17738,275],{"class":122},[109,17740,1068],{"class":126},[109,17742,17743,17745],{"class":111,"line":11230},[109,17744,232],{"class":122},[109,17746,17747],{"class":126}," l,w,h,l1,w1,h1;\n",[109,17749,17750,17752,17754,17756,17758,17760,17762],{"class":111,"line":11238},[109,17751,3376],{"class":126},[109,17753,2822],{"class":122},[109,17755,2050],{"class":126},[109,17757,2822],{"class":122},[109,17759,2327],{"class":126},[109,17761,2822],{"class":122},[109,17763,17300],{"class":126},[109,17765,17766,17769,17772],{"class":111,"line":11243},[109,17767,17768],{"class":126},"    c1.",[109,17770,17771],{"class":211},"setLwh",[109,17773,17774],{"class":126},"(l,w,h);\n",[109,17776,17778],{"class":111,"line":17777},66,[109,17779,17780],{"class":115},"    \u002F\u002F面积\n",[109,17782,17784,17786,17788,17791,17793,17795,17798,17800,17802],{"class":111,"line":17783},67,[109,17785,1058],{"class":126},[109,17787,275],{"class":122},[109,17789,17790],{"class":278},"\"立方体的表面积为：\"",[109,17792,275],{"class":122},[109,17794,16003],{"class":126},[109,17796,17797],{"class":211},"mianji",[109,17799,975],{"class":126},[109,17801,275],{"class":122},[109,17803,1068],{"class":126},[109,17805,17807],{"class":111,"line":17806},68,[109,17808,17809],{"class":115},"    \u002F\u002F体积\n",[109,17811,17813,17815,17817,17820,17822,17824,17827,17829,17831],{"class":111,"line":17812},69,[109,17814,1058],{"class":126},[109,17816,275],{"class":122},[109,17818,17819],{"class":278},"\"立方体的体积为：\"",[109,17821,275],{"class":122},[109,17823,16003],{"class":126},[109,17825,17826],{"class":211},"tiji",[109,17828,975],{"class":126},[109,17830,275],{"class":122},[109,17832,1068],{"class":126},[109,17834,17836,17838,17840,17843,17845],{"class":111,"line":17835},70,[109,17837,1058],{"class":126},[109,17839,275],{"class":122},[109,17841,17842],{"class":278},"\"请输入第二个立方体的长、宽、高：\"",[109,17844,275],{"class":122},[109,17846,1068],{"class":126},[109,17848,17850,17852,17854,17857,17859,17862,17864],{"class":111,"line":17849},71,[109,17851,3376],{"class":126},[109,17853,2822],{"class":122},[109,17855,17856],{"class":126},"l1",[109,17858,2822],{"class":122},[109,17860,17861],{"class":126},"w1",[109,17863,2822],{"class":122},[109,17865,17866],{"class":126},"h1;\n",[109,17868,17870],{"class":111,"line":17869},72,[109,17871,17872],{"class":126},"    Cube c2;\n",[109,17874,17876,17879,17881],{"class":111,"line":17875},73,[109,17877,17878],{"class":126},"    c2.",[109,17880,17771],{"class":211},[109,17882,17883],{"class":126},"(l1,w1,h1);\n",[109,17885,17887,17889,17891,17894,17896,17899,17901,17903,17905],{"class":111,"line":17886},74,[109,17888,1058],{"class":126},[109,17890,275],{"class":122},[109,17892,17893],{"class":278},"\"第二个立方体的表面积为：\"",[109,17895,275],{"class":122},[109,17897,17898],{"class":126},"c2.",[109,17900,17797],{"class":211},[109,17902,975],{"class":126},[109,17904,275],{"class":122},[109,17906,1068],{"class":126},[109,17908,17910,17912,17914,17917,17919,17921,17923,17925,17927],{"class":111,"line":17909},75,[109,17911,1058],{"class":126},[109,17913,275],{"class":122},[109,17915,17916],{"class":278},"\"第二个立方体的体积为：\"",[109,17918,275],{"class":122},[109,17920,17898],{"class":126},[109,17922,17826],{"class":211},[109,17924,975],{"class":126},[109,17926,275],{"class":122},[109,17928,1068],{"class":126},[109,17930,17932],{"class":111,"line":17931},76,[109,17933,158],{"emptyLinePlaceholder":157},[109,17935,17937],{"class":111,"line":17936},77,[109,17938,17939],{"class":115},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[109,17941,17943,17945,17947,17950,17952],{"class":111,"line":17942},78,[109,17944,1058],{"class":126},[109,17946,275],{"class":122},[109,17948,17949],{"class":278},"\"内部函数判断结果：\"",[109,17951,275],{"class":122},[109,17953,1068],{"class":126},[109,17955,17957,17959,17961,17964],{"class":111,"line":17956},79,[109,17958,4446],{"class":122},[109,17960,17654],{"class":126},[109,17962,17963],{"class":211},"isEqual",[109,17965,17966],{"class":126},"(c2))\n",[109,17968,17970],{"class":111,"line":17969},80,[109,17971,1335],{"class":126},[109,17973,17975,17977,17979,17982,17984],{"class":111,"line":17974},81,[109,17976,1396],{"class":126},[109,17978,275],{"class":122},[109,17980,17981],{"class":278},"\"两个立方体相等\"",[109,17983,275],{"class":122},[109,17985,1068],{"class":126},[109,17987,17989],{"class":111,"line":17988},82,[109,17990,1361],{"class":126},[109,17992,17994],{"class":111,"line":17993},83,[109,17995,17996],{"class":122},"    else\n",[109,17998,18000],{"class":111,"line":17999},84,[109,18001,1335],{"class":126},[109,18003,18005,18007,18009,18012,18014],{"class":111,"line":18004},85,[109,18006,1396],{"class":126},[109,18008,275],{"class":122},[109,18010,18011],{"class":278},"\"两个立方体不相等\"",[109,18013,275],{"class":122},[109,18015,1068],{"class":126},[109,18017,18019],{"class":111,"line":18018},86,[109,18020,1361],{"class":126},[109,18022,18024],{"class":111,"line":18023},87,[109,18025,158],{"emptyLinePlaceholder":157},[109,18027,18029,18031,18033,18036,18038],{"class":111,"line":18028},88,[109,18030,1058],{"class":126},[109,18032,275],{"class":122},[109,18034,18035],{"class":278},"\"全局函数判断结果：\"",[109,18037,275],{"class":122},[109,18039,1068],{"class":126},[109,18041,18043,18045,18047,18049],{"class":111,"line":18042},89,[109,18044,4446],{"class":122},[109,18046,285],{"class":126},[109,18048,17963],{"class":211},[109,18050,18051],{"class":126},"(c1, c2))\n",[109,18053,18055],{"class":111,"line":18054},90,[109,18056,1335],{"class":126},[109,18058,18060,18062,18064,18066,18068],{"class":111,"line":18059},91,[109,18061,1396],{"class":126},[109,18063,275],{"class":122},[109,18065,17981],{"class":278},[109,18067,275],{"class":122},[109,18069,1068],{"class":126},[109,18071,18073],{"class":111,"line":18072},92,[109,18074,1361],{"class":126},[109,18076,18078],{"class":111,"line":18077},93,[109,18079,17996],{"class":122},[109,18081,18083],{"class":111,"line":18082},94,[109,18084,1335],{"class":126},[109,18086,18088,18090,18092,18094,18096],{"class":111,"line":18087},95,[109,18089,1396],{"class":126},[109,18091,275],{"class":122},[109,18093,18011],{"class":278},[109,18095,275],{"class":122},[109,18097,1068],{"class":126},[109,18099,18101],{"class":111,"line":18100},96,[109,18102,1361],{"class":126},[109,18104,18106],{"class":111,"line":18105},97,[109,18107,742],{"class":126},[765,18109,18110],{"start":119},[30,18111,18112],{},[23,18113,18114],{},"练习案例2：点和圆的关系",[27,18116,18117],{},[30,18118,18119],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[99,18121,18123],{"className":101,"code":18122,"language":103,"meta":104,"style":104},"#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",[106,18124,18125,18131,18141,18148,18155,18159,18163,18168,18202,18207,18223,18237,18241,18245,18252,18259,18263,18269,18273,18277,18281,18303,18326,18331,18345,18360,18364,18368,18374,18379,18384,18388,18414,18418,18448,18476,18504,18521,18525,18538,18542,18546,18550,18563,18567,18571,18579,18583,18587,18591,18596,18600,18611,18618,18627,18637,18648,18655,18668,18679,18689,18700,18707,18721,18726,18736,18744],{"__ignoreMap":104},[109,18126,18127,18129],{"class":111,"line":112},[109,18128,3317],{"class":122},[109,18130,3320],{"class":278},[109,18132,18133,18135,18137,18139],{"class":111,"line":119},[109,18134,3325],{"class":122},[109,18136,3328],{"class":122},[109,18138,3331],{"class":211},[109,18140,137],{"class":126},[109,18142,18143,18145],{"class":111,"line":140},[109,18144,3317],{"class":122},[109,18146,18147],{"class":278},"\u003Ccmath>\n",[109,18149,18150,18152],{"class":111,"line":154},[109,18151,15867],{"class":122},[109,18153,18154],{"class":211}," Point\n",[109,18156,18157],{"class":111,"line":161},[109,18158,808],{"class":126},[109,18160,18161],{"class":111,"line":167},[109,18162,15889],{"class":122},[109,18164,18165],{"class":111,"line":185},[109,18166,18167],{"class":115},"    \u002F\u002F赋值\n",[109,18169,18170,18172,18175,18177,18179,18182,18184,18186,18189,18192,18194,18197,18199],{"class":111,"line":201},[109,18171,16082],{"class":122},[109,18173,18174],{"class":211}," setPoint",[109,18176,714],{"class":126},[109,18178,15210],{"class":122},[109,18180,18181],{"class":6553}," x",[109,18183,13608],{"class":126},[109,18185,15210],{"class":122},[109,18187,18188],{"class":6553}," y",[109,18190,18191],{"class":126},") { m_x ",[109,18193,130],{"class":122},[109,18195,18196],{"class":126}," x; m_y ",[109,18198,130],{"class":122},[109,18200,18201],{"class":126}," y; }\n",[109,18203,18204],{"class":111,"line":206},[109,18205,18206],{"class":115},"    \u002F\u002F获取坐标\n",[109,18208,18209,18211,18214,18217,18220],{"class":111,"line":218},[109,18210,15911],{"class":122},[109,18212,18213],{"class":211}," getX",[109,18215,18216],{"class":126},"() { ",[109,18218,18219],{"class":122},"return",[109,18221,18222],{"class":126}," m_x; }\n",[109,18224,18225,18227,18230,18232,18234],{"class":111,"line":223},[109,18226,15911],{"class":122},[109,18228,18229],{"class":211}," getY",[109,18231,18216],{"class":126},[109,18233,18219],{"class":122},[109,18235,18236],{"class":126}," m_y; }\n",[109,18238,18239],{"class":111,"line":229},[109,18240,158],{"emptyLinePlaceholder":157},[109,18242,18243],{"class":111,"line":244},[109,18244,16395],{"class":122},[109,18246,18247,18249],{"class":111,"line":258},[109,18248,15911],{"class":122},[109,18250,18251],{"class":126}," m_x;\n",[109,18253,18254,18256],{"class":111,"line":263},[109,18255,15911],{"class":122},[109,18257,18258],{"class":126}," m_y;\n",[109,18260,18261],{"class":111,"line":269},[109,18262,5337],{"class":126},[109,18264,18265,18267],{"class":111,"line":304},[109,18266,15867],{"class":122},[109,18268,15870],{"class":211},[109,18270,18271],{"class":111,"line":331},[109,18272,808],{"class":126},[109,18274,18275],{"class":111,"line":336},[109,18276,15889],{"class":122},[109,18278,18279],{"class":111,"line":364},[109,18280,18167],{"class":115},[109,18282,18283,18285,18288,18290,18292,18295,18298,18300],{"class":111,"line":391},[109,18284,16082],{"class":122},[109,18286,18287],{"class":211}," setRadius",[109,18289,714],{"class":126},[109,18291,15210],{"class":122},[109,18293,18294],{"class":6553}," r",[109,18296,18297],{"class":126},") { m_r ",[109,18299,130],{"class":122},[109,18301,18302],{"class":126}," r; }\n",[109,18304,18305,18307,18310,18312,18315,18318,18321,18323],{"class":111,"line":396},[109,18306,16082],{"class":122},[109,18308,18309],{"class":211}," setCenter",[109,18311,714],{"class":126},[109,18313,18314],{"class":211},"Point",[109,18316,18317],{"class":6553}," center",[109,18319,18320],{"class":126},") { m_center ",[109,18322,130],{"class":122},[109,18324,18325],{"class":126}," center; }\n",[109,18327,18328],{"class":111,"line":402},[109,18329,18330],{"class":115},"    \u002F\u002F获取属性\n",[109,18332,18333,18335,18338,18340,18342],{"class":111,"line":419},[109,18334,15911],{"class":122},[109,18336,18337],{"class":211}," getRadius",[109,18339,18216],{"class":126},[109,18341,18219],{"class":122},[109,18343,18344],{"class":126}," m_r; }\n",[109,18346,18347,18350,18353,18355,18357],{"class":111,"line":435},[109,18348,18349],{"class":211},"    Point",[109,18351,18352],{"class":211}," getCenter",[109,18354,18216],{"class":126},[109,18356,18219],{"class":122},[109,18358,18359],{"class":126}," m_center; }\n",[109,18361,18362],{"class":111,"line":440},[109,18363,158],{"emptyLinePlaceholder":157},[109,18365,18366],{"class":111,"line":467},[109,18367,16395],{"class":122},[109,18369,18370,18372],{"class":111,"line":494},[109,18371,15911],{"class":122},[109,18373,15901],{"class":126},[109,18375,18376],{"class":111,"line":499},[109,18377,18378],{"class":115},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[109,18380,18381],{"class":111,"line":526},[109,18382,18383],{"class":126},"    Point m_center;\n",[109,18385,18386],{"class":111,"line":552},[109,18387,5337],{"class":126},[109,18389,18390,18392,18395,18397,18400,18402,18404,18406,18408,18410,18412],{"class":111,"line":557},[109,18391,1166],{"class":122},[109,18393,18394],{"class":211}," isInCircle",[109,18396,714],{"class":126},[109,18398,18399],{"class":211},"Circle",[109,18401,831],{"class":122},[109,18403,1826],{"class":6553},[109,18405,1914],{"class":126},[109,18407,18314],{"class":211},[109,18409,831],{"class":122},[109,18411,19],{"class":6553},[109,18413,1330],{"class":126},[109,18415,18416],{"class":111,"line":584},[109,18417,808],{"class":126},[109,18419,18420,18422,18425,18427,18429,18432,18435,18438,18440,18442,18444,18446],{"class":111,"line":611},[109,18421,15911],{"class":122},[109,18423,18424],{"class":126}," dx ",[109,18426,130],{"class":122},[109,18428,17515],{"class":126},[109,18430,18431],{"class":211},"getCenter",[109,18433,18434],{"class":126},"().",[109,18436,18437],{"class":211},"getX",[109,18439,14223],{"class":126},[109,18441,2064],{"class":122},[109,18443,17061],{"class":126},[109,18445,18437],{"class":211},[109,18447,874],{"class":126},[109,18449,18450,18452,18455,18457,18459,18461,18463,18466,18468,18470,18472,18474],{"class":111,"line":616},[109,18451,15911],{"class":122},[109,18453,18454],{"class":126}," dy ",[109,18456,130],{"class":122},[109,18458,17515],{"class":126},[109,18460,18431],{"class":211},[109,18462,18434],{"class":126},[109,18464,18465],{"class":211},"getY",[109,18467,14223],{"class":126},[109,18469,2064],{"class":122},[109,18471,17061],{"class":126},[109,18473,18465],{"class":211},[109,18475,874],{"class":126},[109,18477,18478,18480,18483,18485,18488,18491,18493,18495,18497,18499,18501],{"class":111,"line":633},[109,18479,15911],{"class":122},[109,18481,18482],{"class":126}," distance ",[109,18484,130],{"class":122},[109,18486,18487],{"class":211}," sqrt",[109,18489,18490],{"class":126},"(dx ",[109,18492,1988],{"class":122},[109,18494,18424],{"class":126},[109,18496,1348],{"class":122},[109,18498,18454],{"class":126},[109,18500,1988],{"class":122},[109,18502,18503],{"class":126}," dy);\n",[109,18505,18506,18508,18511,18513,18515,18518],{"class":111,"line":649},[109,18507,4446],{"class":122},[109,18509,18510],{"class":126}," (distance ",[109,18512,1320],{"class":122},[109,18514,17515],{"class":126},[109,18516,18517],{"class":211},"getRadius",[109,18519,18520],{"class":126},"())\n",[109,18522,18523],{"class":111,"line":676},[109,18524,1335],{"class":126},[109,18526,18527,18529,18531,18534,18536],{"class":111,"line":703},[109,18528,10987],{"class":126},[109,18530,275],{"class":122},[109,18532,18533],{"class":278}," \"点在圆内\"",[109,18535,282],{"class":122},[109,18537,301],{"class":126},[109,18539,18540],{"class":111,"line":708},[109,18541,1361],{"class":126},[109,18543,18544],{"class":111,"line":723},[109,18545,17996],{"class":122},[109,18547,18548],{"class":111,"line":728},[109,18549,1335],{"class":126},[109,18551,18552,18554,18556,18559,18561],{"class":111,"line":739},[109,18553,10987],{"class":126},[109,18555,275],{"class":122},[109,18557,18558],{"class":278}," \"点在圆外\"",[109,18560,282],{"class":122},[109,18562,301],{"class":126},[109,18564,18565],{"class":111,"line":9352},[109,18566,1361],{"class":126},[109,18568,18569],{"class":111,"line":9364},[109,18570,742],{"class":126},[109,18572,18573,18575,18577],{"class":111,"line":9376},[109,18574,123],{"class":122},[109,18576,212],{"class":211},[109,18578,803],{"class":126},[109,18580,18581],{"class":111,"line":11034},[109,18582,808],{"class":126},[109,18584,18585],{"class":111,"line":11059},[109,18586,16226],{"class":115},[109,18588,18589],{"class":111,"line":11082},[109,18590,15973],{"class":126},[109,18592,18593],{"class":111,"line":11106},[109,18594,18595],{"class":126},"    Point p1;\n",[109,18597,18598],{"class":111,"line":11111},[109,18599,18167],{"class":115},[109,18601,18602,18604,18606,18609],{"class":111,"line":11116},[109,18603,1058],{"class":126},[109,18605,275],{"class":122},[109,18607,18608],{"class":278},"\"请输入圆的半径：\"",[109,18610,137],{"class":126},[109,18612,18613,18615],{"class":111,"line":11121},[109,18614,15911],{"class":122},[109,18616,18617],{"class":126}," r;\n",[109,18619,18620,18622,18624],{"class":111,"line":11130},[109,18621,3376],{"class":126},[109,18623,2822],{"class":122},[109,18625,18626],{"class":126},"r;\n",[109,18628,18629,18631,18634],{"class":111,"line":11135},[109,18630,17768],{"class":126},[109,18632,18633],{"class":211},"setRadius",[109,18635,18636],{"class":126},"(r);\n",[109,18638,18639,18641,18643,18646],{"class":111,"line":11141},[109,18640,1058],{"class":126},[109,18642,275],{"class":122},[109,18644,18645],{"class":278},"\"请输入圆心坐标：\"",[109,18647,137],{"class":126},[109,18649,18650,18652],{"class":111,"line":11162},[109,18651,15911],{"class":122},[109,18653,18654],{"class":126}," x, y;\n",[109,18656,18657,18659,18661,18663,18665],{"class":111,"line":11168},[109,18658,3376],{"class":126},[109,18660,2822],{"class":122},[109,18662,2352],{"class":126},[109,18664,2822],{"class":122},[109,18666,18667],{"class":126},"y;\n",[109,18669,18670,18673,18676],{"class":111,"line":11182},[109,18671,18672],{"class":126},"    p1.",[109,18674,18675],{"class":211},"setPoint",[109,18677,18678],{"class":126},"(x, y);\n",[109,18680,18681,18683,18686],{"class":111,"line":11188},[109,18682,17768],{"class":126},[109,18684,18685],{"class":211},"setCenter",[109,18687,18688],{"class":126},"(p1);\n",[109,18690,18691,18693,18695,18698],{"class":111,"line":11215},[109,18692,1058],{"class":126},[109,18694,275],{"class":122},[109,18696,18697],{"class":278},"\"请输入测试点坐标：\"",[109,18699,137],{"class":126},[109,18701,18702,18704],{"class":111,"line":11224},[109,18703,15911],{"class":122},[109,18705,18706],{"class":126}," x1, y1;\n",[109,18708,18709,18711,18713,18716,18718],{"class":111,"line":11230},[109,18710,3376],{"class":126},[109,18712,2822],{"class":122},[109,18714,18715],{"class":126},"x1",[109,18717,2822],{"class":122},[109,18719,18720],{"class":126},"y1;\n",[109,18722,18723],{"class":111,"line":11238},[109,18724,18725],{"class":126},"    Point p2;\n",[109,18727,18728,18731,18733],{"class":111,"line":11243},[109,18729,18730],{"class":126},"    p2.",[109,18732,18675],{"class":211},[109,18734,18735],{"class":126},"(x1, y1);\n",[109,18737,18738,18741],{"class":111,"line":17777},[109,18739,18740],{"class":211},"    isInCircle",[109,18742,18743],{"class":126},"(c1, p2);\n",[109,18745,18746],{"class":111,"line":17783},[109,18747,742],{"class":126},[19,18749,18750],{},"在类中可以让另一个类作为本来的成员",[19,18752,18753],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18755,18756],{},"创建point.h",[99,18758,18760],{"className":101,"code":18759,"language":103,"meta":104,"style":104},"#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",[106,18761,18762,18773,18779,18789,18795,18799,18804,18808,18812,18832,18836,18844,18852,18856,18860,18866,18872],{"__ignoreMap":104},[109,18763,18764,18767,18770],{"class":111,"line":112},[109,18765,18766],{"class":122},"#pragma",[109,18768,18769],{"class":211}," once",[109,18771,18772],{"class":115}," \u002F\u002F防止头文件重复包含\n",[109,18774,18775,18777],{"class":111,"line":119},[109,18776,3317],{"class":122},[109,18778,3320],{"class":278},[109,18780,18781,18783,18785,18787],{"class":111,"line":140},[109,18782,3325],{"class":122},[109,18784,3328],{"class":122},[109,18786,3331],{"class":211},[109,18788,137],{"class":126},[109,18790,18791,18793],{"class":111,"line":154},[109,18792,15867],{"class":122},[109,18794,18154],{"class":211},[109,18796,18797],{"class":111,"line":161},[109,18798,808],{"class":126},[109,18800,18801],{"class":111,"line":167},[109,18802,18803],{"class":115},"\u002F\u002F做好声明与变量定义就可以\n",[109,18805,18806],{"class":111,"line":185},[109,18807,15889],{"class":122},[109,18809,18810],{"class":111,"line":201},[109,18811,18167],{"class":115},[109,18813,18814,18816,18818,18820,18822,18824,18826,18828,18830],{"class":111,"line":206},[109,18815,16082],{"class":122},[109,18817,18174],{"class":211},[109,18819,714],{"class":126},[109,18821,15210],{"class":122},[109,18823,18181],{"class":6553},[109,18825,13608],{"class":126},[109,18827,15210],{"class":122},[109,18829,18188],{"class":6553},[109,18831,720],{"class":126},[109,18833,18834],{"class":111,"line":218},[109,18835,18206],{"class":115},[109,18837,18838,18840,18842],{"class":111,"line":223},[109,18839,15911],{"class":122},[109,18841,18213],{"class":211},[109,18843,874],{"class":126},[109,18845,18846,18848,18850],{"class":111,"line":229},[109,18847,15911],{"class":122},[109,18849,18229],{"class":211},[109,18851,874],{"class":126},[109,18853,18854],{"class":111,"line":244},[109,18855,158],{"emptyLinePlaceholder":157},[109,18857,18858],{"class":111,"line":258},[109,18859,16395],{"class":122},[109,18861,18862,18864],{"class":111,"line":263},[109,18863,15911],{"class":122},[109,18865,18251],{"class":126},[109,18867,18868,18870],{"class":111,"line":269},[109,18869,15911],{"class":122},[109,18871,18258],{"class":126},[109,18873,18874],{"class":111,"line":304},[109,18875,5337],{"class":126},[19,18877,18878],{},"创建point.cpp",[99,18880,18882],{"className":101,"code":18881,"language":103,"meta":104,"style":104},"#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",[106,18883,18884,18891,18896,18930,18934,18950],{"__ignoreMap":104},[109,18885,18886,18888],{"class":111,"line":112},[109,18887,3317],{"class":122},[109,18889,18890],{"class":278},"\u003Cpoint.h>\n",[109,18892,18893],{"class":111,"line":119},[109,18894,18895],{"class":115},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[109,18897,18898,18900,18903,18906,18908,18910,18912,18914,18916,18918,18920,18922,18924,18926,18928],{"class":111,"line":140},[109,18899,16082],{"class":122},[109,18901,18902],{"class":211}," Point",[109,18904,18905],{"class":126},"::",[109,18907,18675],{"class":211},[109,18909,714],{"class":126},[109,18911,15210],{"class":122},[109,18913,18181],{"class":6553},[109,18915,13608],{"class":126},[109,18917,15210],{"class":122},[109,18919,18188],{"class":6553},[109,18921,18191],{"class":126},[109,18923,130],{"class":122},[109,18925,18196],{"class":126},[109,18927,130],{"class":122},[109,18929,18201],{"class":126},[109,18931,18932],{"class":111,"line":154},[109,18933,18206],{"class":115},[109,18935,18936,18938,18940,18942,18944,18946,18948],{"class":111,"line":161},[109,18937,15911],{"class":122},[109,18939,18902],{"class":211},[109,18941,18905],{"class":126},[109,18943,18437],{"class":211},[109,18945,18216],{"class":126},[109,18947,18219],{"class":122},[109,18949,18222],{"class":126},[109,18951,18952,18954,18956,18958,18960,18962,18964],{"class":111,"line":167},[109,18953,15911],{"class":122},[109,18955,18902],{"class":211},[109,18957,18905],{"class":126},[109,18959,18465],{"class":211},[109,18961,18216],{"class":126},[109,18963,18219],{"class":122},[109,18965,18236],{"class":126},[19,18967,18968],{},"创建circle.h",[99,18970,18972],{"className":101,"code":18971,"language":103,"meta":104,"style":104},"#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",[106,18973,18974,18981,18987,18997,19003,19009,19013,19017,19021,19035,19049,19053,19061,19069,19073,19077,19083,19087,19091],{"__ignoreMap":104},[109,18975,18976,18978],{"class":111,"line":112},[109,18977,18766],{"class":122},[109,18979,18980],{"class":211}," once\n",[109,18982,18983,18985],{"class":111,"line":119},[109,18984,3317],{"class":122},[109,18986,3320],{"class":278},[109,18988,18989,18991,18993,18995],{"class":111,"line":140},[109,18990,3325],{"class":122},[109,18992,3328],{"class":122},[109,18994,3331],{"class":211},[109,18996,137],{"class":126},[109,18998,18999,19001],{"class":111,"line":154},[109,19000,3317],{"class":122},[109,19002,18890],{"class":278},[109,19004,19005,19007],{"class":111,"line":161},[109,19006,15867],{"class":122},[109,19008,15870],{"class":211},[109,19010,19011],{"class":111,"line":167},[109,19012,808],{"class":126},[109,19014,19015],{"class":111,"line":185},[109,19016,15889],{"class":122},[109,19018,19019],{"class":111,"line":201},[109,19020,18167],{"class":115},[109,19022,19023,19025,19027,19029,19031,19033],{"class":111,"line":206},[109,19024,16082],{"class":122},[109,19026,18287],{"class":211},[109,19028,714],{"class":126},[109,19030,15210],{"class":122},[109,19032,18294],{"class":6553},[109,19034,720],{"class":126},[109,19036,19037,19039,19041,19043,19045,19047],{"class":111,"line":218},[109,19038,16082],{"class":122},[109,19040,18309],{"class":211},[109,19042,714],{"class":126},[109,19044,18314],{"class":211},[109,19046,18317],{"class":6553},[109,19048,720],{"class":126},[109,19050,19051],{"class":111,"line":223},[109,19052,18330],{"class":115},[109,19054,19055,19057,19059],{"class":111,"line":229},[109,19056,15911],{"class":122},[109,19058,18337],{"class":211},[109,19060,874],{"class":126},[109,19062,19063,19065,19067],{"class":111,"line":244},[109,19064,18349],{"class":211},[109,19066,18352],{"class":211},[109,19068,874],{"class":126},[109,19070,19071],{"class":111,"line":258},[109,19072,158],{"emptyLinePlaceholder":157},[109,19074,19075],{"class":111,"line":263},[109,19076,16395],{"class":122},[109,19078,19079,19081],{"class":111,"line":269},[109,19080,15911],{"class":122},[109,19082,15901],{"class":126},[109,19084,19085],{"class":111,"line":304},[109,19086,18378],{"class":115},[109,19088,19089],{"class":111,"line":331},[109,19090,18383],{"class":126},[109,19092,19093],{"class":111,"line":336},[109,19094,5337],{"class":126},[19,19096,19097],{},"创建circle.cpp",[99,19099,19101],{"className":101,"code":19100,"language":103,"meta":104,"style":104},"#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",[106,19102,19103,19110,19133,19155,19160,19176],{"__ignoreMap":104},[109,19104,19105,19107],{"class":111,"line":112},[109,19106,3317],{"class":122},[109,19108,19109],{"class":278},"\u003Ccircle.h>\n",[109,19111,19112,19114,19117,19119,19121,19123,19125,19127,19129,19131],{"class":111,"line":119},[109,19113,1166],{"class":122},[109,19115,19116],{"class":211}," Circle",[109,19118,18905],{"class":126},[109,19120,18633],{"class":211},[109,19122,714],{"class":126},[109,19124,15210],{"class":122},[109,19126,18294],{"class":6553},[109,19128,18297],{"class":126},[109,19130,130],{"class":122},[109,19132,18302],{"class":126},[109,19134,19135,19137,19139,19141,19143,19145,19147,19149,19151,19153],{"class":111,"line":140},[109,19136,1166],{"class":122},[109,19138,19116],{"class":211},[109,19140,18905],{"class":126},[109,19142,18685],{"class":211},[109,19144,714],{"class":126},[109,19146,18314],{"class":211},[109,19148,18317],{"class":6553},[109,19150,18320],{"class":126},[109,19152,130],{"class":122},[109,19154,18325],{"class":126},[109,19156,19157],{"class":111,"line":154},[109,19158,19159],{"class":115},"\u002F\u002F获取属性\n",[109,19161,19162,19164,19166,19168,19170,19172,19174],{"class":111,"line":161},[109,19163,15210],{"class":122},[109,19165,19116],{"class":211},[109,19167,18905],{"class":126},[109,19169,18517],{"class":211},[109,19171,18216],{"class":126},[109,19173,18219],{"class":122},[109,19175,18344],{"class":126},[109,19177,19178,19180,19182,19184,19186,19188,19190],{"class":111,"line":167},[109,19179,18314],{"class":211},[109,19181,19116],{"class":211},[109,19183,18905],{"class":126},[109,19185,18431],{"class":211},[109,19187,18216],{"class":126},[109,19189,18219],{"class":122},[109,19191,18359],{"class":126},[19,19193,19194],{},"使用封装的类",[99,19196,19198],{"className":101,"code":19197,"language":103,"meta":104,"style":104},"#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",[106,19199,19200,19206,19216,19222,19228,19252,19256,19282,19308,19332,19346,19350,19362,19366,19370,19374,19386,19390,19394,19402,19406,19410,19414,19418,19422,19432,19438,19446,19454,19464,19470,19482,19490,19498,19508,19514,19526,19530,19538,19544],{"__ignoreMap":104},[109,19201,19202,19204],{"class":111,"line":112},[109,19203,3317],{"class":122},[109,19205,3320],{"class":278},[109,19207,19208,19210,19212,19214],{"class":111,"line":119},[109,19209,3325],{"class":122},[109,19211,3328],{"class":122},[109,19213,3331],{"class":211},[109,19215,137],{"class":126},[109,19217,19218,19220],{"class":111,"line":140},[109,19219,3317],{"class":122},[109,19221,19109],{"class":278},[109,19223,19224,19226],{"class":111,"line":154},[109,19225,3317],{"class":122},[109,19227,18890],{"class":278},[109,19229,19230,19232,19234,19236,19238,19240,19242,19244,19246,19248,19250],{"class":111,"line":161},[109,19231,1166],{"class":122},[109,19233,18394],{"class":211},[109,19235,714],{"class":126},[109,19237,18399],{"class":211},[109,19239,831],{"class":122},[109,19241,1826],{"class":6553},[109,19243,1914],{"class":126},[109,19245,18314],{"class":211},[109,19247,831],{"class":122},[109,19249,19],{"class":6553},[109,19251,1330],{"class":126},[109,19253,19254],{"class":111,"line":167},[109,19255,808],{"class":126},[109,19257,19258,19260,19262,19264,19266,19268,19270,19272,19274,19276,19278,19280],{"class":111,"line":185},[109,19259,15911],{"class":122},[109,19261,18424],{"class":126},[109,19263,130],{"class":122},[109,19265,17515],{"class":126},[109,19267,18431],{"class":211},[109,19269,18434],{"class":126},[109,19271,18437],{"class":211},[109,19273,14223],{"class":126},[109,19275,2064],{"class":122},[109,19277,17061],{"class":126},[109,19279,18437],{"class":211},[109,19281,874],{"class":126},[109,19283,19284,19286,19288,19290,19292,19294,19296,19298,19300,19302,19304,19306],{"class":111,"line":201},[109,19285,15911],{"class":122},[109,19287,18454],{"class":126},[109,19289,130],{"class":122},[109,19291,17515],{"class":126},[109,19293,18431],{"class":211},[109,19295,18434],{"class":126},[109,19297,18465],{"class":211},[109,19299,14223],{"class":126},[109,19301,2064],{"class":122},[109,19303,17061],{"class":126},[109,19305,18465],{"class":211},[109,19307,874],{"class":126},[109,19309,19310,19312,19314,19316,19318,19320,19322,19324,19326,19328,19330],{"class":111,"line":206},[109,19311,15911],{"class":122},[109,19313,18482],{"class":126},[109,19315,130],{"class":122},[109,19317,18487],{"class":211},[109,19319,18490],{"class":126},[109,19321,1988],{"class":122},[109,19323,18424],{"class":126},[109,19325,1348],{"class":122},[109,19327,18454],{"class":126},[109,19329,1988],{"class":122},[109,19331,18503],{"class":126},[109,19333,19334,19336,19338,19340,19342,19344],{"class":111,"line":218},[109,19335,4446],{"class":122},[109,19337,18510],{"class":126},[109,19339,1320],{"class":122},[109,19341,17515],{"class":126},[109,19343,18517],{"class":211},[109,19345,18520],{"class":126},[109,19347,19348],{"class":111,"line":223},[109,19349,1335],{"class":126},[109,19351,19352,19354,19356,19358,19360],{"class":111,"line":229},[109,19353,10987],{"class":126},[109,19355,275],{"class":122},[109,19357,18533],{"class":278},[109,19359,282],{"class":122},[109,19361,301],{"class":126},[109,19363,19364],{"class":111,"line":244},[109,19365,1361],{"class":126},[109,19367,19368],{"class":111,"line":258},[109,19369,17996],{"class":122},[109,19371,19372],{"class":111,"line":263},[109,19373,1335],{"class":126},[109,19375,19376,19378,19380,19382,19384],{"class":111,"line":269},[109,19377,10987],{"class":126},[109,19379,275],{"class":122},[109,19381,18558],{"class":278},[109,19383,282],{"class":122},[109,19385,301],{"class":126},[109,19387,19388],{"class":111,"line":304},[109,19389,1361],{"class":126},[109,19391,19392],{"class":111,"line":331},[109,19393,742],{"class":126},[109,19395,19396,19398,19400],{"class":111,"line":336},[109,19397,123],{"class":122},[109,19399,212],{"class":211},[109,19401,803],{"class":126},[109,19403,19404],{"class":111,"line":364},[109,19405,808],{"class":126},[109,19407,19408],{"class":111,"line":391},[109,19409,16226],{"class":115},[109,19411,19412],{"class":111,"line":396},[109,19413,15973],{"class":126},[109,19415,19416],{"class":111,"line":402},[109,19417,18595],{"class":126},[109,19419,19420],{"class":111,"line":419},[109,19421,18167],{"class":115},[109,19423,19424,19426,19428,19430],{"class":111,"line":435},[109,19425,1058],{"class":126},[109,19427,275],{"class":122},[109,19429,18608],{"class":278},[109,19431,137],{"class":126},[109,19433,19434,19436],{"class":111,"line":440},[109,19435,15911],{"class":122},[109,19437,18617],{"class":126},[109,19439,19440,19442,19444],{"class":111,"line":467},[109,19441,3376],{"class":126},[109,19443,2822],{"class":122},[109,19445,18626],{"class":126},[109,19447,19448,19450,19452],{"class":111,"line":494},[109,19449,17768],{"class":126},[109,19451,18633],{"class":211},[109,19453,18636],{"class":126},[109,19455,19456,19458,19460,19462],{"class":111,"line":499},[109,19457,1058],{"class":126},[109,19459,275],{"class":122},[109,19461,18645],{"class":278},[109,19463,137],{"class":126},[109,19465,19466,19468],{"class":111,"line":526},[109,19467,15911],{"class":122},[109,19469,18654],{"class":126},[109,19471,19472,19474,19476,19478,19480],{"class":111,"line":552},[109,19473,3376],{"class":126},[109,19475,2822],{"class":122},[109,19477,2352],{"class":126},[109,19479,2822],{"class":122},[109,19481,18667],{"class":126},[109,19483,19484,19486,19488],{"class":111,"line":557},[109,19485,18672],{"class":126},[109,19487,18675],{"class":211},[109,19489,18678],{"class":126},[109,19491,19492,19494,19496],{"class":111,"line":584},[109,19493,17768],{"class":126},[109,19495,18685],{"class":211},[109,19497,18688],{"class":126},[109,19499,19500,19502,19504,19506],{"class":111,"line":611},[109,19501,1058],{"class":126},[109,19503,275],{"class":122},[109,19505,18697],{"class":278},[109,19507,137],{"class":126},[109,19509,19510,19512],{"class":111,"line":616},[109,19511,15911],{"class":122},[109,19513,18706],{"class":126},[109,19515,19516,19518,19520,19522,19524],{"class":111,"line":633},[109,19517,3376],{"class":126},[109,19519,2822],{"class":122},[109,19521,18715],{"class":126},[109,19523,2822],{"class":122},[109,19525,18720],{"class":126},[109,19527,19528],{"class":111,"line":649},[109,19529,18725],{"class":126},[109,19531,19532,19534,19536],{"class":111,"line":676},[109,19533,18730],{"class":126},[109,19535,18675],{"class":211},[109,19537,18735],{"class":126},[109,19539,19540,19542],{"class":111,"line":703},[109,19541,18740],{"class":211},[109,19543,18743],{"class":126},[109,19545,19546],{"class":111,"line":708},[109,19547,742],{"class":126},[14,19549,19551],{"id":19550},"_82对象的初始化清理","8.2对象的初始化清理",[27,19553,19554,19557],{},[30,19555,19556],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[30,19558,19559],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[51,19561,19563],{"id":19562},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19565,19566,19567,19570],{},"对象的",[23,19568,19569],{},"初始化和清理","也是两个非常重要的安全问题",[19,19572,19573],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19575,19576],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19578,19579,19580,19583,19584,19587],{},"c++利用了",[23,19581,19582],{},"构造函数","和",[23,19585,19586],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19589,19590,19591],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[23,19592,19593],{},"我们不提供构造和析构，编译器会提供",[19,19595,19596],{},[23,19597,19598],{},"编译器提供的构造函数和析构函数是空实现。",[27,19600,19601,19604],{},[30,19602,19603],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[30,19605,19606,19607,19610],{},"析构函数：主要作用在于对象",[23,19608,19609],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19612,19613,19616],{},[23,19614,19615],{},"构造函数语法：",[106,19617,19618],{},"类名(){}",[765,19620,19621,19624,19627,19630,19633],{},[30,19622,19623],{},"构造函数，没有返回值也不写void",[30,19625,19626],{},"函数名称与类名相同",[30,19628,19629],{},"构造函数可以有参数，因此可以发生重载",[30,19631,19632],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[30,19634,19635,19636,290],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[106,19637,19638],{},"Person(){}",[19,19640,19641,14968,19644],{},[23,19642,19643],{},"析构函数语法：",[106,19645,19646],{},"~类名(){}",[765,19648,19649,19652,19655,19661],{},[30,19650,19651],{},"析构函数，没有返回值也不写void",[30,19653,19654],{},"函数名称与类名相同,在名称前加上符号  ~",[30,19656,19657,19658],{},"析构函数不可以有参数，因此",[23,19659,19660],{},"不可以发生重载",[30,19662,19663],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[99,19665,19667],{"className":101,"code":19666,"language":103,"meta":104,"style":104},"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",[106,19668,19669,19675,19679,19683,19688,19695,19699,19712,19716,19721,19728,19732,19745,19749,19753,19757,19761,19769,19773,19781,19785,19789,19797,19801,19806,19810,19817,19821,19834,19838,19846],{"__ignoreMap":104},[109,19670,19671,19673],{"class":111,"line":112},[109,19672,15867],{"class":122},[109,19674,16344],{"class":211},[109,19676,19677],{"class":111,"line":119},[109,19678,808],{"class":126},[109,19680,19681],{"class":111,"line":140},[109,19682,15889],{"class":122},[109,19684,19685],{"class":111,"line":154},[109,19686,19687],{"class":115},"    \u002F\u002F构造函数\n",[109,19689,19690,19693],{"class":111,"line":161},[109,19691,19692],{"class":211},"    Person",[109,19694,803],{"class":126},[109,19696,19697],{"class":111,"line":167},[109,19698,1335],{"class":126},[109,19700,19701,19703,19705,19708,19710],{"class":111,"line":185},[109,19702,10987],{"class":126},[109,19704,275],{"class":122},[109,19706,19707],{"class":278}," \"Person的构造函数调用\"",[109,19709,282],{"class":122},[109,19711,301],{"class":126},[109,19713,19714],{"class":111,"line":201},[109,19715,1361],{"class":126},[109,19717,19718],{"class":111,"line":206},[109,19719,19720],{"class":115},"    \u002F\u002F析构函数\n",[109,19722,19723,19726],{"class":111,"line":218},[109,19724,19725],{"class":211},"    ~Person",[109,19727,803],{"class":126},[109,19729,19730],{"class":111,"line":223},[109,19731,1335],{"class":126},[109,19733,19734,19736,19738,19741,19743],{"class":111,"line":229},[109,19735,10987],{"class":126},[109,19737,275],{"class":122},[109,19739,19740],{"class":278}," \"Person的析构函数调用\"",[109,19742,282],{"class":122},[109,19744,301],{"class":126},[109,19746,19747],{"class":111,"line":244},[109,19748,1361],{"class":126},[109,19750,19751],{"class":111,"line":258},[109,19752,158],{"emptyLinePlaceholder":157},[109,19754,19755],{"class":111,"line":263},[109,19756,5337],{"class":126},[109,19758,19759],{"class":111,"line":269},[109,19760,158],{"emptyLinePlaceholder":157},[109,19762,19763,19765,19767],{"class":111,"line":304},[109,19764,1166],{"class":122},[109,19766,1169],{"class":211},[109,19768,803],{"class":126},[109,19770,19771],{"class":111,"line":331},[109,19772,808],{"class":126},[109,19774,19775,19778],{"class":111,"line":336},[109,19776,19777],{"class":126},"    Person p;",[109,19779,19780],{"class":115},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[109,19782,19783],{"class":111,"line":364},[109,19784,742],{"class":126},[109,19786,19787],{"class":111,"line":391},[109,19788,158],{"emptyLinePlaceholder":157},[109,19790,19791,19793,19795],{"class":111,"line":396},[109,19792,123],{"class":122},[109,19794,212],{"class":211},[109,19796,215],{"class":126},[109,19798,19799],{"class":111,"line":402},[109,19800,14383],{"class":126},[109,19802,19803],{"class":111,"line":419},[109,19804,19805],{"class":115},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[109,19807,19808],{"class":111,"line":435},[109,19809,158],{"emptyLinePlaceholder":157},[109,19811,19812,19814],{"class":111,"line":440},[109,19813,19777],{"class":126},[109,19815,19816],{"class":115},"\u002F\u002F只有构造函数\n",[109,19818,19819],{"class":111,"line":467},[109,19820,158],{"emptyLinePlaceholder":157},[109,19822,19823,19825,19827,19829,19831],{"class":111,"line":494},[109,19824,711],{"class":211},[109,19826,714],{"class":126},[109,19828,717],{"class":278},[109,19830,1154],{"class":126},[109,19832,19833],{"class":115},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[109,19835,19836],{"class":111,"line":499},[109,19837,158],{"emptyLinePlaceholder":157},[109,19839,19840,19842,19844],{"class":111,"line":526},[109,19841,731],{"class":122},[109,19843,734],{"class":133},[109,19845,137],{"class":126},[109,19847,19848],{"class":111,"line":552},[109,19849,742],{"class":126},[19,19851,19852],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[51,19854,19856],{"id":19855},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19858,19859],{},"两种分类方式：",[19,19861,19862],{},"​\t按参数分为： 有参构造和无参构造",[19,19864,19865],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19867,19868],{},"三种调用方式：",[19,19870,19871],{},"​\t括号法",[19,19873,19874],{},"​\t显示法",[19,19876,19877],{},"​\t隐式转换法",[99,19879,19881],{"className":101,"code":19880,"language":103,"meta":104,"style":104},"#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",[106,19882,19883,19889,19899,19904,19909,19914,19919,19923,19931,19935,19939,19943,19949,19953,19966,19970,19982,19986,19995,20008,20012,20016,20022,20026,20039,20043,20048,20064,20068,20073,20082,20095,20099,20105,20109,20114,20122,20126,20131,20135,20143,20147,20152,20157,20162,20167,20172,20176,20181,20186,20191,20196,20200,20205,20210,20226,20238,20243,20247,20252,20257,20262,20266,20271,20285,20298,20302,20310,20314,20320,20326,20334],{"__ignoreMap":104},[109,19884,19885,19887],{"class":111,"line":112},[109,19886,3317],{"class":122},[109,19888,3320],{"class":278},[109,19890,19891,19893,19895,19897],{"class":111,"line":119},[109,19892,3325],{"class":122},[109,19894,3328],{"class":122},[109,19896,3331],{"class":211},[109,19898,137],{"class":126},[109,19900,19901],{"class":111,"line":140},[109,19902,19903],{"class":115},"\u002F\u002F1.构造函数的分类及调用\n",[109,19905,19906],{"class":111,"line":154},[109,19907,19908],{"class":115},"\u002F\u002F分类\n",[109,19910,19911],{"class":111,"line":161},[109,19912,19913],{"class":115},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[109,19915,19916],{"class":111,"line":167},[109,19917,19918],{"class":115},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[109,19920,19921],{"class":111,"line":185},[109,19922,158],{"emptyLinePlaceholder":157},[109,19924,19925,19927,19929],{"class":111,"line":201},[109,19926,15867],{"class":122},[109,19928,16742],{"class":211},[109,19930,4022],{"class":126},[109,19932,19933],{"class":111,"line":206},[109,19934,808],{"class":126},[109,19936,19937],{"class":111,"line":218},[109,19938,15889],{"class":122},[109,19940,19941],{"class":111,"line":223},[109,19942,19687],{"class":115},[109,19944,19945,19947],{"class":111,"line":229},[109,19946,19692],{"class":211},[109,19948,803],{"class":126},[109,19950,19951],{"class":111,"line":244},[109,19952,1335],{"class":126},[109,19954,19955,19957,19959,19962,19964],{"class":111,"line":258},[109,19956,1396],{"class":126},[109,19958,275],{"class":122},[109,19960,19961],{"class":278},"\"Person构造函数无参构造\"",[109,19963,275],{"class":122},[109,19965,1068],{"class":126},[109,19967,19968],{"class":111,"line":263},[109,19969,1361],{"class":126},[109,19971,19972,19974,19976,19978,19980],{"class":111,"line":269},[109,19973,19692],{"class":211},[109,19975,714],{"class":126},[109,19977,123],{"class":122},[109,19979,2791],{"class":6553},[109,19981,1330],{"class":126},[109,19983,19984],{"class":111,"line":304},[109,19985,1335],{"class":126},[109,19987,19988,19991,19993],{"class":111,"line":331},[109,19989,19990],{"class":126},"        age",[109,19992,130],{"class":122},[109,19994,7527],{"class":126},[109,19996,19997,19999,20001,20004,20006],{"class":111,"line":336},[109,19998,1396],{"class":126},[109,20000,275],{"class":122},[109,20002,20003],{"class":278},"\"Person构造函数有参构造\"",[109,20005,275],{"class":122},[109,20007,1068],{"class":126},[109,20009,20010],{"class":111,"line":364},[109,20011,1361],{"class":126},[109,20013,20014],{"class":111,"line":391},[109,20015,19720],{"class":115},[109,20017,20018,20020],{"class":111,"line":396},[109,20019,19725],{"class":211},[109,20021,803],{"class":126},[109,20023,20024],{"class":111,"line":402},[109,20025,1335],{"class":126},[109,20027,20028,20030,20032,20035,20037],{"class":111,"line":419},[109,20029,1396],{"class":126},[109,20031,275],{"class":122},[109,20033,20034],{"class":278},"\"Person析构函数被调用\"",[109,20036,275],{"class":122},[109,20038,1068],{"class":126},[109,20040,20041],{"class":111,"line":435},[109,20042,1361],{"class":126},[109,20044,20045],{"class":111,"line":440},[109,20046,20047],{"class":115},"    \u002F\u002F拷贝构造函数\n",[109,20049,20050,20052,20054,20056,20058,20060,20062],{"class":111,"line":467},[109,20051,19692],{"class":211},[109,20053,714],{"class":126},[109,20055,170],{"class":122},[109,20057,16742],{"class":211},[109,20059,831],{"class":122},[109,20061,19],{"class":6553},[109,20063,1330],{"class":126},[109,20065,20066],{"class":111,"line":494},[109,20067,1335],{"class":126},[109,20069,20070],{"class":111,"line":499},[109,20071,20072],{"class":115},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[109,20074,20075,20077,20079],{"class":111,"line":526},[109,20076,19990],{"class":126},[109,20078,130],{"class":122},[109,20080,20081],{"class":126},"p.age;\n",[109,20083,20084,20086,20088,20091,20093],{"class":111,"line":552},[109,20085,1396],{"class":126},[109,20087,275],{"class":122},[109,20089,20090],{"class":278},"\"Person拷贝构造函数被调用\"",[109,20092,275],{"class":122},[109,20094,1068],{"class":126},[109,20096,20097],{"class":111,"line":557},[109,20098,1361],{"class":126},[109,20100,20101,20103],{"class":111,"line":584},[109,20102,232],{"class":122},[109,20104,9123],{"class":126},[109,20106,20107],{"class":111,"line":611},[109,20108,5337],{"class":126},[109,20110,20111],{"class":111,"line":616},[109,20112,20113],{"class":115},"\u002F\u002F调用\n",[109,20115,20116,20118,20120],{"class":111,"line":633},[109,20117,1166],{"class":122},[109,20119,1169],{"class":211},[109,20121,803],{"class":126},[109,20123,20124],{"class":111,"line":649},[109,20125,808],{"class":126},[109,20127,20128],{"class":111,"line":676},[109,20129,20130],{"class":115},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[109,20132,20133],{"class":111,"line":703},[109,20134,742],{"class":126},[109,20136,20137,20139,20141],{"class":111,"line":708},[109,20138,1166],{"class":122},[109,20140,1262],{"class":211},[109,20142,803],{"class":126},[109,20144,20145],{"class":111,"line":723},[109,20146,808],{"class":126},[109,20148,20149],{"class":111,"line":728},[109,20150,20151],{"class":115},"    \u002F\u002F1.括号法\n",[109,20153,20154],{"class":111,"line":739},[109,20155,20156],{"class":115},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[109,20158,20159],{"class":111,"line":9352},[109,20160,20161],{"class":115},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[109,20163,20164],{"class":111,"line":9364},[109,20165,20166],{"class":115},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[109,20168,20169],{"class":111,"line":9376},[109,20170,20171],{"class":115},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[109,20173,20174],{"class":111,"line":11034},[109,20175,158],{"emptyLinePlaceholder":157},[109,20177,20178],{"class":111,"line":11059},[109,20179,20180],{"class":115},"    \u002F\u002F注意事项\n",[109,20182,20183],{"class":111,"line":11082},[109,20184,20185],{"class":115},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[109,20187,20188],{"class":111,"line":11106},[109,20189,20190],{"class":115},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[109,20192,20193],{"class":111,"line":11111},[109,20194,20195],{"class":115},"    \u002F\u002F Person p4();\n",[109,20197,20198],{"class":111,"line":11116},[109,20199,158],{"emptyLinePlaceholder":157},[109,20201,20202],{"class":111,"line":11121},[109,20203,20204],{"class":115},"    \u002F\u002F2.显示法\n",[109,20206,20207],{"class":111,"line":11130},[109,20208,20209],{"class":126},"    Person p1;\n",[109,20211,20212,20215,20217,20220,20222,20224],{"class":111,"line":11135},[109,20213,20214],{"class":126},"    Person p2",[109,20216,130],{"class":122},[109,20218,20219],{"class":211},"Person",[109,20221,714],{"class":126},[109,20223,1008],{"class":133},[109,20225,720],{"class":126},[109,20227,20228,20231,20233,20235],{"class":111,"line":11141},[109,20229,20230],{"class":126},"    Person p3",[109,20232,130],{"class":122},[109,20234,20219],{"class":211},[109,20236,20237],{"class":126},"(p2);\n",[109,20239,20240],{"class":111,"line":11162},[109,20241,20242],{"class":115},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[109,20244,20245],{"class":111,"line":11168},[109,20246,158],{"emptyLinePlaceholder":157},[109,20248,20249],{"class":111,"line":11182},[109,20250,20251],{"class":115},"    \u002F\u002F 注意事项2\n",[109,20253,20254],{"class":111,"line":11188},[109,20255,20256],{"class":115},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[109,20258,20259],{"class":111,"line":11215},[109,20260,20261],{"class":115},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[109,20263,20264],{"class":111,"line":11224},[109,20265,158],{"emptyLinePlaceholder":157},[109,20267,20268],{"class":111,"line":11230},[109,20269,20270],{"class":115},"    \u002F\u002F3.隐士转换法\n",[109,20272,20273,20276,20278,20280,20282],{"class":111,"line":11238},[109,20274,20275],{"class":126},"    Person p4",[109,20277,130],{"class":122},[109,20279,1008],{"class":133},[109,20281,821],{"class":126},[109,20283,20284],{"class":115},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[109,20286,20287,20290,20292,20295],{"class":111,"line":11243},[109,20288,20289],{"class":126},"    Person p5",[109,20291,130],{"class":122},[109,20293,20294],{"class":126},"p4;",[109,20296,20297],{"class":115}," \u002F\u002F 这里会调用拷贝构造函数\n",[109,20299,20300],{"class":111,"line":17777},[109,20301,742],{"class":126},[109,20303,20304,20306,20308],{"class":111,"line":17783},[109,20305,123],{"class":122},[109,20307,212],{"class":211},[109,20309,803],{"class":126},[109,20311,20312],{"class":111,"line":17806},[109,20313,808],{"class":126},[109,20315,20316,20318],{"class":111,"line":17812},[109,20317,1452],{"class":211},[109,20319,874],{"class":126},[109,20321,20322,20324],{"class":111,"line":17835},[109,20323,1459],{"class":211},[109,20325,874],{"class":126},[109,20327,20328,20330,20332],{"class":111,"line":17849},[109,20329,731],{"class":122},[109,20331,734],{"class":133},[109,20333,137],{"class":126},[109,20335,20336],{"class":111,"line":17869},[109,20337,742],{"class":126},[19,20339,20340,20343],{},[23,20341,20342],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[51,20345,20347],{"id":20346},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20349,20350],{},"C++中拷贝构造函数调用时机通常有三种情况",[27,20352,20353,20356,20359],{},[30,20354,20355],{},"使用一个已经创建完毕的对象来初始化一个新对象",[30,20357,20358],{},"值传递的方式给函数参数传值",[30,20360,20361],{},"以值方式返回局部对象",[99,20363,20365],{"className":101,"code":20364,"language":103,"meta":104,"style":104},"#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",[106,20366,20367,20373,20383,20387,20392,20396,20401,20406,20411,20417,20421,20425,20431,20435,20448,20452,20457,20469,20473,20481,20494,20498,20502,20518,20522,20531,20544,20548,20554,20558,20570,20574,20580,20584,20588,20596,20600,20613,20621,20639,20643,20648,20653,20668,20672,20685,20689,20697,20701,20705,20713,20717,20722,20731,20735,20739,20764,20774,20778,20786,20790,20801,20826,20830,20834,20838,20846,20850,20855,20860,20867,20872,20877,20882,20887,20891,20896,20900,20905,20909,20914,20919,20923,20927,20932,20937,20945],{"__ignoreMap":104},[109,20368,20369,20371],{"class":111,"line":112},[109,20370,3317],{"class":122},[109,20372,3320],{"class":278},[109,20374,20375,20377,20379,20381],{"class":111,"line":119},[109,20376,3325],{"class":122},[109,20378,3328],{"class":122},[109,20380,3331],{"class":211},[109,20382,137],{"class":126},[109,20384,20385],{"class":111,"line":140},[109,20386,158],{"emptyLinePlaceholder":157},[109,20388,20389],{"class":111,"line":154},[109,20390,20391],{"class":115},"\u002F\u002F拷贝构造函数调用时机\n",[109,20393,20394],{"class":111,"line":161},[109,20395,158],{"emptyLinePlaceholder":157},[109,20397,20398],{"class":111,"line":167},[109,20399,20400],{"class":115},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[109,20402,20403],{"class":111,"line":185},[109,20404,20405],{"class":115},"\u002F\u002F2.值传递的方式给函数参数传值\n",[109,20407,20408],{"class":111,"line":201},[109,20409,20410],{"class":115},"\u002F\u002F3.以值方式返回局部对象\n",[109,20412,20413,20415],{"class":111,"line":206},[109,20414,15867],{"class":122},[109,20416,16344],{"class":211},[109,20418,20419],{"class":111,"line":218},[109,20420,808],{"class":126},[109,20422,20423],{"class":111,"line":223},[109,20424,15889],{"class":122},[109,20426,20427,20429],{"class":111,"line":229},[109,20428,19692],{"class":211},[109,20430,803],{"class":126},[109,20432,20433],{"class":111,"line":244},[109,20434,1335],{"class":126},[109,20436,20437,20439,20441,20444,20446],{"class":111,"line":258},[109,20438,10987],{"class":126},[109,20440,275],{"class":122},[109,20442,20443],{"class":278}," \"Person的默认构造函数调用\"",[109,20445,282],{"class":122},[109,20447,301],{"class":126},[109,20449,20450],{"class":111,"line":263},[109,20451,1361],{"class":126},[109,20453,20454],{"class":111,"line":269},[109,20455,20456],{"class":115},"    \u002F\u002F有参构造\n",[109,20458,20459,20461,20463,20465,20467],{"class":111,"line":304},[109,20460,19692],{"class":211},[109,20462,714],{"class":126},[109,20464,123],{"class":122},[109,20466,16862],{"class":6553},[109,20468,1330],{"class":126},[109,20470,20471],{"class":111,"line":331},[109,20472,1335],{"class":126},[109,20474,20475,20477,20479],{"class":111,"line":336},[109,20476,16916],{"class":126},[109,20478,130],{"class":122},[109,20480,9123],{"class":126},[109,20482,20483,20485,20487,20490,20492],{"class":111,"line":364},[109,20484,10987],{"class":126},[109,20486,275],{"class":122},[109,20488,20489],{"class":278}," \"Person的有参构造函数调用\"",[109,20491,282],{"class":122},[109,20493,301],{"class":126},[109,20495,20496],{"class":111,"line":391},[109,20497,1361],{"class":126},[109,20499,20500],{"class":111,"line":396},[109,20501,20047],{"class":115},[109,20503,20504,20506,20508,20510,20512,20514,20516],{"class":111,"line":402},[109,20505,19692],{"class":211},[109,20507,714],{"class":126},[109,20509,170],{"class":122},[109,20511,16742],{"class":211},[109,20513,831],{"class":122},[109,20515,19],{"class":6553},[109,20517,1330],{"class":126},[109,20519,20520],{"class":111,"line":419},[109,20521,1335],{"class":126},[109,20523,20524,20526,20528],{"class":111,"line":435},[109,20525,16916],{"class":126},[109,20527,130],{"class":122},[109,20529,20530],{"class":126}," p.m_Age;\n",[109,20532,20533,20535,20537,20540,20542],{"class":111,"line":440},[109,20534,10987],{"class":126},[109,20536,275],{"class":122},[109,20538,20539],{"class":278}," \"Person的拷贝构造函数调用\"",[109,20541,282],{"class":122},[109,20543,301],{"class":126},[109,20545,20546],{"class":111,"line":467},[109,20547,1361],{"class":126},[109,20549,20550,20552],{"class":111,"line":494},[109,20551,19725],{"class":211},[109,20553,803],{"class":126},[109,20555,20556],{"class":111,"line":499},[109,20557,1335],{"class":126},[109,20559,20560,20562,20564,20566,20568],{"class":111,"line":526},[109,20561,10987],{"class":126},[109,20563,275],{"class":122},[109,20565,19740],{"class":278},[109,20567,282],{"class":122},[109,20569,301],{"class":126},[109,20571,20572],{"class":111,"line":552},[109,20573,1361],{"class":126},[109,20575,20576,20578],{"class":111,"line":557},[109,20577,232],{"class":122},[109,20579,16839],{"class":126},[109,20581,20582],{"class":111,"line":584},[109,20583,5337],{"class":126},[109,20585,20586],{"class":111,"line":611},[109,20587,20400],{"class":115},[109,20589,20590,20592,20594],{"class":111,"line":616},[109,20591,1166],{"class":122},[109,20593,1169],{"class":211},[109,20595,803],{"class":126},[109,20597,20598],{"class":111,"line":633},[109,20599,808],{"class":126},[109,20601,20602,20605,20607,20609,20611],{"class":111,"line":649},[109,20603,20604],{"class":126},"    Person ",[109,20606,8456],{"class":211},[109,20608,714],{"class":126},[109,20610,2232],{"class":133},[109,20612,720],{"class":126},[109,20614,20615,20617,20619],{"class":111,"line":676},[109,20616,20604],{"class":126},[109,20618,8359],{"class":211},[109,20620,18688],{"class":126},[109,20622,20623,20625,20627,20630,20632,20635,20637],{"class":111,"line":703},[109,20624,1058],{"class":126},[109,20626,275],{"class":122},[109,20628,20629],{"class":278},"\"P2的年龄为：\"",[109,20631,275],{"class":122},[109,20633,20634],{"class":126},"p2.m_Age",[109,20636,275],{"class":122},[109,20638,1068],{"class":126},[109,20640,20641],{"class":111,"line":708},[109,20642,742],{"class":126},[109,20644,20645],{"class":111,"line":723},[109,20646,20647],{"class":115},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[109,20649,20650],{"class":111,"line":728},[109,20651,20652],{"class":115},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[109,20654,20655,20657,20660,20662,20664,20666],{"class":111,"line":739},[109,20656,1166],{"class":122},[109,20658,20659],{"class":211}," doWork",[109,20661,714],{"class":126},[109,20663,20219],{"class":211},[109,20665,8151],{"class":6553},[109,20667,1330],{"class":126},[109,20669,20670],{"class":111,"line":9352},[109,20671,808],{"class":126},[109,20673,20674,20676,20678,20681,20683],{"class":111,"line":9364},[109,20675,272],{"class":126},[109,20677,275],{"class":122},[109,20679,20680],{"class":278}," \"doWork函数调用\"",[109,20682,282],{"class":122},[109,20684,301],{"class":126},[109,20686,20687],{"class":111,"line":9376},[109,20688,742],{"class":126},[109,20690,20691,20693,20695],{"class":111,"line":11034},[109,20692,1166],{"class":122},[109,20694,1262],{"class":211},[109,20696,803],{"class":126},[109,20698,20699],{"class":111,"line":11059},[109,20700,808],{"class":126},[109,20702,20703],{"class":111,"line":11082},[109,20704,16486],{"class":126},[109,20706,20707,20710],{"class":111,"line":11106},[109,20708,20709],{"class":211},"    doWork",[109,20711,20712],{"class":126},"(p);\n",[109,20714,20715],{"class":111,"line":11111},[109,20716,742],{"class":126},[109,20718,20719],{"class":111,"line":11116},[109,20720,20721],{"class":115},"\u002F\u002F 3.以值方式返回局部对象\n",[109,20723,20724,20726,20729],{"class":111,"line":11121},[109,20725,20219],{"class":211},[109,20727,20728],{"class":211}," doWork2",[109,20730,803],{"class":126},[109,20732,20733],{"class":111,"line":11130},[109,20734,808],{"class":126},[109,20736,20737],{"class":111,"line":11135},[109,20738,20209],{"class":126},[109,20740,20741,20743,20745,20747,20749,20751,20753,20755,20757,20759,20761],{"class":111,"line":11141},[109,20742,1058],{"class":126},[109,20744,275],{"class":122},[109,20746,714],{"class":126},[109,20748,123],{"class":122},[109,20750,797],{"class":122},[109,20752,290],{"class":126},[109,20754,293],{"class":122},[109,20756,8456],{"class":126},[109,20758,275],{"class":122},[109,20760,2635],{"class":126},[109,20762,20763],{"class":115},"\u002F\u002F打印p1的地址\n",[109,20765,20766,20768,20771],{"class":111,"line":11162},[109,20767,731],{"class":122},[109,20769,20770],{"class":126}," p1;",[109,20772,20773],{"class":115},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[109,20775,20776],{"class":111,"line":11168},[109,20777,742],{"class":126},[109,20779,20780,20782,20784],{"class":111,"line":11182},[109,20781,1166],{"class":122},[109,20783,7060],{"class":211},[109,20785,803],{"class":126},[109,20787,20788],{"class":111,"line":11188},[109,20789,808],{"class":126},[109,20791,20792,20795,20797,20799],{"class":111,"line":11215},[109,20793,20794],{"class":126},"    Person p ",[109,20796,130],{"class":122},[109,20798,20728],{"class":211},[109,20800,874],{"class":126},[109,20802,20803,20805,20807,20809,20811,20813,20815,20817,20819,20821,20823],{"class":111,"line":11224},[109,20804,1058],{"class":126},[109,20806,275],{"class":122},[109,20808,714],{"class":126},[109,20810,123],{"class":122},[109,20812,797],{"class":122},[109,20814,290],{"class":126},[109,20816,293],{"class":122},[109,20818,19],{"class":126},[109,20820,275],{"class":122},[109,20822,2635],{"class":126},[109,20824,20825],{"class":115},"\u002F\u002F打印p的地址\n",[109,20827,20828],{"class":111,"line":11230},[109,20829,742],{"class":126},[109,20831,20832],{"class":111,"line":11238},[109,20833,158],{"emptyLinePlaceholder":157},[109,20835,20836],{"class":111,"line":11243},[109,20837,158],{"emptyLinePlaceholder":157},[109,20839,20840,20842,20844],{"class":111,"line":17777},[109,20841,123],{"class":122},[109,20843,212],{"class":211},[109,20845,803],{"class":126},[109,20847,20848],{"class":111,"line":17783},[109,20849,808],{"class":126},[109,20851,20852],{"class":111,"line":17806},[109,20853,20854],{"class":115},"    \u002F\u002F test01();\n",[109,20856,20857],{"class":111,"line":17812},[109,20858,20859],{"class":115},"    \u002F\u002F test02();\n",[109,20861,20862,20865],{"class":111,"line":17835},[109,20863,20864],{"class":211},"    test03",[109,20866,874],{"class":126},[109,20868,20869],{"class":111,"line":17849},[109,20870,20871],{"class":115},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[109,20873,20874],{"class":111,"line":17869},[109,20875,20876],{"class":115},"\u002F\u002F 输出结果如下：\n",[109,20878,20879],{"class":111,"line":17875},[109,20880,20881],{"class":115},"\u002F\u002F Person的默认构造函数调用\n",[109,20883,20884],{"class":111,"line":17886},[109,20885,20886],{"class":115},"\u002F\u002F 0x7fffffffceec\n",[109,20888,20889],{"class":111,"line":17909},[109,20890,20886],{"class":115},[109,20892,20893],{"class":111,"line":17931},[109,20894,20895],{"class":115},"\u002F\u002F Person的析构函数调用\n",[109,20897,20898],{"class":111,"line":17936},[109,20899,158],{"emptyLinePlaceholder":157},[109,20901,20902],{"class":111,"line":17942},[109,20903,20904],{"class":115},"\u002F\u002F 之前的输出结果如下：\n",[109,20906,20907],{"class":111,"line":17956},[109,20908,20881],{"class":115},[109,20910,20911],{"class":111,"line":17969},[109,20912,20913],{"class":115},"\u002F\u002F 地址\n",[109,20915,20916],{"class":111,"line":17974},[109,20917,20918],{"class":115},"\u002F\u002F Person的拷贝构造函数调用\n",[109,20920,20921],{"class":111,"line":17988},[109,20922,20895],{"class":115},[109,20924,20925],{"class":111,"line":17993},[109,20926,20913],{"class":115},[109,20928,20929],{"class":111,"line":17999},[109,20930,20931],{"class":115},"\u002F\u002F (这两次输出的地址也是不同的) \n",[109,20933,20934],{"class":111,"line":18004},[109,20935,20936],{"class":115},"\u002F\u002F Person的析构函数调用     \n",[109,20938,20939,20941,20943],{"class":111,"line":18018},[109,20940,731],{"class":122},[109,20942,734],{"class":133},[109,20944,137],{"class":126},[109,20946,20947],{"class":111,"line":18023},[109,20948,742],{"class":126},[19,20950,20951],{},"简化版理解",[99,20953,20955],{"className":101,"code":20954,"language":103,"meta":104,"style":104},"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",[106,20956,20957,20965,20969,20975,20988,20999,21003,21015,21028,21036,21040,21056,21069,21078,21082,21087,21093,21106,21110,21114,21121,21125,21129,21134,21142,21146,21162,21175,21188,21192,21197,21205,21209,21213,21218,21223,21239,21247,21254,21260,21264,21268,21273,21281,21285,21289,21312,21319,21323,21327,21335,21339,21349,21371,21375,21379,21383,21391,21395,21400,21405,21411,21415,21425,21429,21437],{"__ignoreMap":104},[109,20958,20959,20961,20963],{"class":111,"line":112},[109,20960,15867],{"class":122},[109,20962,16742],{"class":211},[109,20964,16745],{"class":126},[109,20966,20967],{"class":111,"line":119},[109,20968,15889],{"class":122},[109,20970,20971,20973],{"class":111,"line":140},[109,20972,19692],{"class":211},[109,20974,215],{"class":126},[109,20976,20977,20979,20981,20984,20986],{"class":111,"line":154},[109,20978,10987],{"class":126},[109,20980,275],{"class":122},[109,20982,20983],{"class":278}," \"无参构造函数!\"",[109,20985,282],{"class":122},[109,20987,301],{"class":126},[109,20989,20990,20993,20995,20997],{"class":111,"line":161},[109,20991,20992],{"class":126},"        mAge ",[109,20994,130],{"class":122},[109,20996,734],{"class":133},[109,20998,137],{"class":126},[109,21000,21001],{"class":111,"line":167},[109,21002,1361],{"class":126},[109,21004,21005,21007,21009,21011,21013],{"class":111,"line":185},[109,21006,19692],{"class":211},[109,21008,714],{"class":126},[109,21010,123],{"class":122},[109,21012,16862],{"class":6553},[109,21014,13615],{"class":126},[109,21016,21017,21019,21021,21024,21026],{"class":111,"line":201},[109,21018,10987],{"class":126},[109,21020,275],{"class":122},[109,21022,21023],{"class":278}," \"有参构造函数!\"",[109,21025,282],{"class":122},[109,21027,301],{"class":126},[109,21029,21030,21032,21034],{"class":111,"line":206},[109,21031,20992],{"class":126},[109,21033,130],{"class":122},[109,21035,9123],{"class":126},[109,21037,21038],{"class":111,"line":218},[109,21039,1361],{"class":126},[109,21041,21042,21044,21046,21048,21050,21052,21054],{"class":111,"line":223},[109,21043,19692],{"class":211},[109,21045,714],{"class":126},[109,21047,170],{"class":122},[109,21049,16742],{"class":211},[109,21051,293],{"class":122},[109,21053,8151],{"class":6553},[109,21055,13615],{"class":126},[109,21057,21058,21060,21062,21065,21067],{"class":111,"line":229},[109,21059,10987],{"class":126},[109,21061,275],{"class":122},[109,21063,21064],{"class":278}," \"拷贝构造函数!\"",[109,21066,282],{"class":122},[109,21068,301],{"class":126},[109,21070,21071,21073,21075],{"class":111,"line":244},[109,21072,20992],{"class":126},[109,21074,130],{"class":122},[109,21076,21077],{"class":126}," p.mAge;\n",[109,21079,21080],{"class":111,"line":258},[109,21081,1361],{"class":126},[109,21083,21084],{"class":111,"line":263},[109,21085,21086],{"class":115},"    \u002F\u002F析构函数在释放内存之前调用\n",[109,21088,21089,21091],{"class":111,"line":269},[109,21090,19725],{"class":211},[109,21092,215],{"class":126},[109,21094,21095,21097,21099,21102,21104],{"class":111,"line":304},[109,21096,10987],{"class":126},[109,21098,275],{"class":122},[109,21100,21101],{"class":278}," \"析构函数!\"",[109,21103,282],{"class":122},[109,21105,301],{"class":126},[109,21107,21108],{"class":111,"line":331},[109,21109,1361],{"class":126},[109,21111,21112],{"class":111,"line":336},[109,21113,15889],{"class":122},[109,21115,21116,21118],{"class":111,"line":364},[109,21117,232],{"class":122},[109,21119,21120],{"class":126}," mAge;\n",[109,21122,21123],{"class":111,"line":391},[109,21124,5337],{"class":126},[109,21126,21127],{"class":111,"line":396},[109,21128,158],{"emptyLinePlaceholder":157},[109,21130,21131],{"class":111,"line":402},[109,21132,21133],{"class":115},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[109,21135,21136,21138,21140],{"class":111,"line":419},[109,21137,1166],{"class":122},[109,21139,1169],{"class":211},[109,21141,215],{"class":126},[109,21143,21144],{"class":111,"line":435},[109,21145,158],{"emptyLinePlaceholder":157},[109,21147,21148,21150,21153,21155,21157,21159],{"class":111,"line":440},[109,21149,20604],{"class":126},[109,21151,21152],{"class":211},"man",[109,21154,714],{"class":126},[109,21156,1351],{"class":133},[109,21158,1154],{"class":126},[109,21160,21161],{"class":115}," \u002F\u002Fp对象已经创建完毕\n",[109,21163,21164,21166,21169,21172],{"class":111,"line":467},[109,21165,20604],{"class":126},[109,21167,21168],{"class":211},"newman",[109,21170,21171],{"class":126},"(man);",[109,21173,21174],{"class":115}," \u002F\u002F调用拷贝构造函数\n",[109,21176,21177,21180,21182,21185],{"class":111,"line":494},[109,21178,21179],{"class":126},"    Person newman2 ",[109,21181,130],{"class":122},[109,21183,21184],{"class":126}," man;",[109,21186,21187],{"class":115}," \u002F\u002F拷贝构造\n",[109,21189,21190],{"class":111,"line":499},[109,21191,158],{"emptyLinePlaceholder":157},[109,21193,21194],{"class":111,"line":526},[109,21195,21196],{"class":115},"    \u002F\u002FPerson newman3;\n",[109,21198,21199,21202],{"class":111,"line":552},[109,21200,21201],{"class":115},"    \u002F\u002Fnewman3 = man;",[109,21203,21204],{"class":115}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[109,21206,21207],{"class":111,"line":557},[109,21208,742],{"class":126},[109,21210,21211],{"class":111,"line":584},[109,21212,158],{"emptyLinePlaceholder":157},[109,21214,21215],{"class":111,"line":611},[109,21216,21217],{"class":115},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[109,21219,21220],{"class":111,"line":616},[109,21221,21222],{"class":115},"\u002F\u002F相当于Person p1 = p;\n",[109,21224,21225,21227,21229,21231,21233,21236],{"class":111,"line":633},[109,21226,1166],{"class":122},[109,21228,20659],{"class":211},[109,21230,714],{"class":126},[109,21232,20219],{"class":211},[109,21234,21235],{"class":6553}," p1",[109,21237,21238],{"class":126},") {}\n",[109,21240,21241,21243,21245],{"class":111,"line":649},[109,21242,1166],{"class":122},[109,21244,1262],{"class":211},[109,21246,215],{"class":126},[109,21248,21249,21251],{"class":111,"line":676},[109,21250,19777],{"class":126},[109,21252,21253],{"class":115}," \u002F\u002F无参构造函数\n",[109,21255,21256,21258],{"class":111,"line":703},[109,21257,20709],{"class":211},[109,21259,20712],{"class":126},[109,21261,21262],{"class":111,"line":708},[109,21263,742],{"class":126},[109,21265,21266],{"class":111,"line":723},[109,21267,158],{"emptyLinePlaceholder":157},[109,21269,21270],{"class":111,"line":728},[109,21271,21272],{"class":115},"\u002F\u002F3. 以值方式返回局部对象\n",[109,21274,21275,21277,21279],{"class":111,"line":739},[109,21276,20219],{"class":211},[109,21278,20728],{"class":211},[109,21280,803],{"class":126},[109,21282,21283],{"class":111,"line":9352},[109,21284,808],{"class":126},[109,21286,21287],{"class":111,"line":9364},[109,21288,20209],{"class":126},[109,21290,21291,21293,21295,21297,21299,21301,21303,21305,21308,21310],{"class":111,"line":9376},[109,21292,272],{"class":126},[109,21294,275],{"class":122},[109,21296,285],{"class":126},[109,21298,123],{"class":122},[109,21300,797],{"class":122},[109,21302,290],{"class":126},[109,21304,293],{"class":122},[109,21306,21307],{"class":126},"p1 ",[109,21309,275],{"class":122},[109,21311,301],{"class":126},[109,21313,21314,21316],{"class":111,"line":11034},[109,21315,731],{"class":122},[109,21317,21318],{"class":126}," p1;\n",[109,21320,21321],{"class":111,"line":11059},[109,21322,742],{"class":126},[109,21324,21325],{"class":111,"line":11082},[109,21326,158],{"emptyLinePlaceholder":157},[109,21328,21329,21331,21333],{"class":111,"line":11106},[109,21330,1166],{"class":122},[109,21332,7060],{"class":211},[109,21334,803],{"class":126},[109,21336,21337],{"class":111,"line":11111},[109,21338,808],{"class":126},[109,21340,21341,21343,21345,21347],{"class":111,"line":11116},[109,21342,20794],{"class":126},[109,21344,130],{"class":122},[109,21346,20728],{"class":211},[109,21348,874],{"class":126},[109,21350,21351,21353,21355,21357,21359,21361,21363,21365,21367,21369],{"class":111,"line":11121},[109,21352,272],{"class":126},[109,21354,275],{"class":122},[109,21356,285],{"class":126},[109,21358,123],{"class":122},[109,21360,797],{"class":122},[109,21362,290],{"class":126},[109,21364,293],{"class":122},[109,21366,867],{"class":126},[109,21368,275],{"class":122},[109,21370,301],{"class":126},[109,21372,21373],{"class":111,"line":11130},[109,21374,742],{"class":126},[109,21376,21377],{"class":111,"line":11135},[109,21378,158],{"emptyLinePlaceholder":157},[109,21380,21381],{"class":111,"line":11141},[109,21382,158],{"emptyLinePlaceholder":157},[109,21384,21385,21387,21389],{"class":111,"line":11162},[109,21386,123],{"class":122},[109,21388,212],{"class":211},[109,21390,215],{"class":126},[109,21392,21393],{"class":111,"line":11168},[109,21394,158],{"emptyLinePlaceholder":157},[109,21396,21397],{"class":111,"line":11182},[109,21398,21399],{"class":115},"    \u002F\u002Ftest01();\n",[109,21401,21402],{"class":111,"line":11188},[109,21403,21404],{"class":115},"    \u002F\u002Ftest02();\n",[109,21406,21407,21409],{"class":111,"line":11215},[109,21408,20864],{"class":211},[109,21410,874],{"class":126},[109,21412,21413],{"class":111,"line":11224},[109,21414,158],{"emptyLinePlaceholder":157},[109,21416,21417,21419,21421,21423],{"class":111,"line":11230},[109,21418,711],{"class":211},[109,21420,714],{"class":126},[109,21422,717],{"class":278},[109,21424,720],{"class":126},[109,21426,21427],{"class":111,"line":11238},[109,21428,158],{"emptyLinePlaceholder":157},[109,21430,21431,21433,21435],{"class":111,"line":11243},[109,21432,731],{"class":122},[109,21434,734],{"class":133},[109,21436,137],{"class":126},[109,21438,21439],{"class":111,"line":17777},[109,21440,742],{"class":126},[51,21442,21444],{"id":21443},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21446,21447],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21449,21450],{},"1．默认构造函数(无参，函数体为空)",[19,21452,21453],{},"2．默认析构函数(无参，函数体为空)",[19,21455,21456],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21458,21459],{},"构造函数调用规则如下：",[27,21461,21462,21465],{},[30,21463,21464],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[30,21466,21467],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[99,21469,21471],{"className":101,"code":21470,"language":103,"meta":104,"style":104},"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",[106,21472,21473,21481,21485,21490,21496,21508,21512,21517,21529,21538,21550,21554,21558,21574,21583,21595,21599,21603,21609,21621,21625,21629,21635,21639,21643,21651,21655,21667,21672,21680,21684,21702,21706,21710,21718,21722,21727,21735,21750,21763,21767,21772,21779,21795,21808,21812,21816,21824,21828,21834,21838,21848,21852,21860],{"__ignoreMap":104},[109,21474,21475,21477,21479],{"class":111,"line":112},[109,21476,15867],{"class":122},[109,21478,16742],{"class":211},[109,21480,16745],{"class":126},[109,21482,21483],{"class":111,"line":119},[109,21484,15889],{"class":122},[109,21486,21487],{"class":111,"line":140},[109,21488,21489],{"class":115},"    \u002F\u002F无参（默认）构造函数\n",[109,21491,21492,21494],{"class":111,"line":154},[109,21493,19692],{"class":211},[109,21495,215],{"class":126},[109,21497,21498,21500,21502,21504,21506],{"class":111,"line":161},[109,21499,10987],{"class":126},[109,21501,275],{"class":122},[109,21503,20983],{"class":278},[109,21505,282],{"class":122},[109,21507,301],{"class":126},[109,21509,21510],{"class":111,"line":167},[109,21511,1361],{"class":126},[109,21513,21514],{"class":111,"line":185},[109,21515,21516],{"class":115},"    \u002F\u002F有参构造函数\n",[109,21518,21519,21521,21523,21525,21527],{"class":111,"line":201},[109,21520,19692],{"class":211},[109,21522,714],{"class":126},[109,21524,123],{"class":122},[109,21526,2791],{"class":6553},[109,21528,13615],{"class":126},[109,21530,21531,21534,21536],{"class":111,"line":206},[109,21532,21533],{"class":126},"        age ",[109,21535,130],{"class":122},[109,21537,2825],{"class":126},[109,21539,21540,21542,21544,21546,21548],{"class":111,"line":218},[109,21541,10987],{"class":126},[109,21543,275],{"class":122},[109,21545,21023],{"class":278},[109,21547,282],{"class":122},[109,21549,301],{"class":126},[109,21551,21552],{"class":111,"line":223},[109,21553,1361],{"class":126},[109,21555,21556],{"class":111,"line":229},[109,21557,20047],{"class":115},[109,21559,21560,21562,21564,21566,21568,21570,21572],{"class":111,"line":244},[109,21561,19692],{"class":211},[109,21563,714],{"class":126},[109,21565,170],{"class":122},[109,21567,16742],{"class":211},[109,21569,293],{"class":122},[109,21571,8151],{"class":6553},[109,21573,13615],{"class":126},[109,21575,21576,21578,21580],{"class":111,"line":258},[109,21577,21533],{"class":126},[109,21579,130],{"class":122},[109,21581,21582],{"class":126}," p.age;\n",[109,21584,21585,21587,21589,21591,21593],{"class":111,"line":263},[109,21586,10987],{"class":126},[109,21588,275],{"class":122},[109,21590,21064],{"class":278},[109,21592,282],{"class":122},[109,21594,301],{"class":126},[109,21596,21597],{"class":111,"line":269},[109,21598,1361],{"class":126},[109,21600,21601],{"class":111,"line":304},[109,21602,19720],{"class":115},[109,21604,21605,21607],{"class":111,"line":331},[109,21606,19725],{"class":211},[109,21608,215],{"class":126},[109,21610,21611,21613,21615,21617,21619],{"class":111,"line":336},[109,21612,10987],{"class":126},[109,21614,275],{"class":122},[109,21616,21101],{"class":278},[109,21618,282],{"class":122},[109,21620,301],{"class":126},[109,21622,21623],{"class":111,"line":364},[109,21624,1361],{"class":126},[109,21626,21627],{"class":111,"line":391},[109,21628,15889],{"class":122},[109,21630,21631,21633],{"class":111,"line":396},[109,21632,232],{"class":122},[109,21634,9123],{"class":126},[109,21636,21637],{"class":111,"line":402},[109,21638,5337],{"class":126},[109,21640,21641],{"class":111,"line":419},[109,21642,158],{"emptyLinePlaceholder":157},[109,21644,21645,21647,21649],{"class":111,"line":435},[109,21646,1166],{"class":122},[109,21648,1169],{"class":211},[109,21650,803],{"class":126},[109,21652,21653],{"class":111,"line":440},[109,21654,808],{"class":126},[109,21656,21657,21659,21661,21663,21665],{"class":111,"line":467},[109,21658,20604],{"class":126},[109,21660,8456],{"class":211},[109,21662,714],{"class":126},[109,21664,2182],{"class":133},[109,21666,720],{"class":126},[109,21668,21669],{"class":111,"line":494},[109,21670,21671],{"class":115},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[109,21673,21674,21676,21678],{"class":111,"line":499},[109,21675,20604],{"class":126},[109,21677,8359],{"class":211},[109,21679,18688],{"class":126},[109,21681,21682],{"class":111,"line":526},[109,21683,158],{"emptyLinePlaceholder":157},[109,21685,21686,21688,21690,21693,21695,21698,21700],{"class":111,"line":552},[109,21687,272],{"class":126},[109,21689,275],{"class":122},[109,21691,21692],{"class":278}," \"p2的年龄为： \"",[109,21694,282],{"class":122},[109,21696,21697],{"class":126}," p2.age ",[109,21699,275],{"class":122},[109,21701,301],{"class":126},[109,21703,21704],{"class":111,"line":557},[109,21705,742],{"class":126},[109,21707,21708],{"class":111,"line":584},[109,21709,158],{"emptyLinePlaceholder":157},[109,21711,21712,21714,21716],{"class":111,"line":611},[109,21713,1166],{"class":122},[109,21715,1262],{"class":211},[109,21717,803],{"class":126},[109,21719,21720],{"class":111,"line":616},[109,21721,808],{"class":126},[109,21723,21724],{"class":111,"line":633},[109,21725,21726],{"class":115},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[109,21728,21729,21732],{"class":111,"line":649},[109,21730,21731],{"class":126},"    Person p1;",[109,21733,21734],{"class":115}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[109,21736,21737,21739,21741,21743,21745,21747],{"class":111,"line":676},[109,21738,20604],{"class":126},[109,21740,8359],{"class":211},[109,21742,714],{"class":126},[109,21744,1008],{"class":133},[109,21746,1154],{"class":126},[109,21748,21749],{"class":115}," \u002F\u002F用户提供的有参\n",[109,21751,21752,21754,21757,21760],{"class":111,"line":703},[109,21753,20604],{"class":126},[109,21755,21756],{"class":211},"p3",[109,21758,21759],{"class":126},"(p2);",[109,21761,21762],{"class":115}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[109,21764,21765],{"class":111,"line":708},[109,21766,158],{"emptyLinePlaceholder":157},[109,21768,21769],{"class":111,"line":723},[109,21770,21771],{"class":115},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[109,21773,21774,21777],{"class":111,"line":728},[109,21775,21776],{"class":126},"    Person p4;",[109,21778,21734],{"class":115},[109,21780,21781,21783,21786,21788,21790,21792],{"class":111,"line":739},[109,21782,20604],{"class":126},[109,21784,21785],{"class":211},"p5",[109,21787,714],{"class":126},[109,21789,1008],{"class":133},[109,21791,1154],{"class":126},[109,21793,21794],{"class":115}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[109,21796,21797,21799,21802,21805],{"class":111,"line":9352},[109,21798,20604],{"class":126},[109,21800,21801],{"class":211},"p6",[109,21803,21804],{"class":126},"(p5);",[109,21806,21807],{"class":115}," \u002F\u002F用户自己提供拷贝构造\n",[109,21809,21810],{"class":111,"line":9364},[109,21811,742],{"class":126},[109,21813,21814],{"class":111,"line":9376},[109,21815,158],{"emptyLinePlaceholder":157},[109,21817,21818,21820,21822],{"class":111,"line":11034},[109,21819,123],{"class":122},[109,21821,212],{"class":211},[109,21823,215],{"class":126},[109,21825,21826],{"class":111,"line":11059},[109,21827,158],{"emptyLinePlaceholder":157},[109,21829,21830,21832],{"class":111,"line":11082},[109,21831,1452],{"class":211},[109,21833,874],{"class":126},[109,21835,21836],{"class":111,"line":11106},[109,21837,158],{"emptyLinePlaceholder":157},[109,21839,21840,21842,21844,21846],{"class":111,"line":11111},[109,21841,711],{"class":211},[109,21843,714],{"class":126},[109,21845,717],{"class":278},[109,21847,720],{"class":126},[109,21849,21850],{"class":111,"line":11116},[109,21851,158],{"emptyLinePlaceholder":157},[109,21853,21854,21856,21858],{"class":111,"line":11121},[109,21855,731],{"class":122},[109,21857,734],{"class":133},[109,21859,137],{"class":126},[109,21861,21862],{"class":111,"line":11130},[109,21863,742],{"class":126},[51,21865,21867],{"id":21866},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21869,21870],{},"浅拷贝：简单的赋值拷贝操作",[19,21872,21873],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[99,21875,21877],{"className":101,"code":21876,"language":103,"meta":104,"style":104},"#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",[106,21878,21879,21885,21895,21901,21905,21909,21914,21920,21924,21937,21941,21945,21952,21956,21966,21981,21994,21998,22003,22008,22024,22028,22041,22046,22051,22056,22065,22070,22085,22089,22093,22097,22103,22107,22112,22127,22131,22142,22156,22160,22169,22173,22179,22191,22195,22203,22207,22224,22255,22263,22291,22295,22299,22307,22311,22317],{"__ignoreMap":104},[109,21880,21881,21883],{"class":111,"line":112},[109,21882,3317],{"class":122},[109,21884,3320],{"class":278},[109,21886,21887,21889,21891,21893],{"class":111,"line":119},[109,21888,3325],{"class":122},[109,21890,3328],{"class":122},[109,21892,3331],{"class":211},[109,21894,137],{"class":126},[109,21896,21897,21899],{"class":111,"line":140},[109,21898,15867],{"class":122},[109,21900,16344],{"class":211},[109,21902,21903],{"class":111,"line":154},[109,21904,808],{"class":126},[109,21906,21907],{"class":111,"line":161},[109,21908,15889],{"class":122},[109,21910,21911],{"class":111,"line":167},[109,21912,21913],{"class":115},"    \u002F\u002F默认构造函数\n",[109,21915,21916,21918],{"class":111,"line":185},[109,21917,19692],{"class":211},[109,21919,803],{"class":126},[109,21921,21922],{"class":111,"line":201},[109,21923,1335],{"class":126},[109,21925,21926,21928,21930,21933,21935],{"class":111,"line":206},[109,21927,1396],{"class":126},[109,21929,275],{"class":122},[109,21931,21932],{"class":278},"\"默认构造函数\"",[109,21934,275],{"class":122},[109,21936,1068],{"class":126},[109,21938,21939],{"class":111,"line":218},[109,21940,1361],{"class":126},[109,21942,21943],{"class":111,"line":223},[109,21944,21516],{"class":115},[109,21946,21947,21949],{"class":111,"line":229},[109,21948,19725],{"class":211},[109,21950,21951],{"class":126},"(int age,int height)\n",[109,21953,21954],{"class":111,"line":244},[109,21955,1335],{"class":126},[109,21957,21958,21961,21963],{"class":111,"line":258},[109,21959,21960],{"class":126},"        m_Age",[109,21962,130],{"class":122},[109,21964,21965],{"class":126},"age;\n",[109,21967,21968,21971,21973,21975,21978],{"class":111,"line":263},[109,21969,21970],{"class":126},"        m_Height",[109,21972,1145],{"class":122},[109,21974,173],{"class":122},[109,21976,21977],{"class":126},"(height);",[109,21979,21980],{"class":115},"\u002F\u002F放到堆区\n",[109,21982,21983,21985,21987,21990,21992],{"class":111,"line":269},[109,21984,1396],{"class":126},[109,21986,275],{"class":122},[109,21988,21989],{"class":278},"\"有参构造函数\"",[109,21991,275],{"class":122},[109,21993,1068],{"class":126},[109,21995,21996],{"class":111,"line":304},[109,21997,1361],{"class":126},[109,21999,22000],{"class":111,"line":331},[109,22001,22002],{"class":115},"    \u002F\u002F深拷贝解决上述问题\n",[109,22004,22005],{"class":111,"line":336},[109,22006,22007],{"class":115},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[109,22009,22010,22012,22014,22016,22018,22020,22022],{"class":111,"line":364},[109,22011,19692],{"class":211},[109,22013,714],{"class":126},[109,22015,170],{"class":122},[109,22017,16742],{"class":211},[109,22019,831],{"class":122},[109,22021,19],{"class":6553},[109,22023,1330],{"class":126},[109,22025,22026],{"class":111,"line":391},[109,22027,1335],{"class":126},[109,22029,22030,22032,22034,22037,22039],{"class":111,"line":396},[109,22031,1396],{"class":126},[109,22033,275],{"class":122},[109,22035,22036],{"class":278},"\"拷贝构造函数\"",[109,22038,275],{"class":122},[109,22040,1068],{"class":126},[109,22042,22043],{"class":111,"line":402},[109,22044,22045],{"class":115},"        \u002F\u002F编译器默认的写如下注释部分\n",[109,22047,22048],{"class":111,"line":419},[109,22049,22050],{"class":115},"        \u002F\u002Fm_Age=p.m_Age;\n",[109,22052,22053],{"class":111,"line":435},[109,22054,22055],{"class":115},"        \u002F\u002Fm_Height=p.m_Height;\n",[109,22057,22058,22060,22062],{"class":111,"line":440},[109,22059,21960],{"class":126},[109,22061,130],{"class":122},[109,22063,22064],{"class":126},"p.m_Age;\n",[109,22066,22067],{"class":111,"line":467},[109,22068,22069],{"class":115},"        \u002F\u002F深拷贝操作\n",[109,22071,22072,22074,22076,22078,22080,22082],{"class":111,"line":494},[109,22073,21970],{"class":126},[109,22075,1145],{"class":122},[109,22077,173],{"class":122},[109,22079,714],{"class":126},[109,22081,1988],{"class":122},[109,22083,22084],{"class":126},"p.m_Height);\n",[109,22086,22087],{"class":111,"line":499},[109,22088,1361],{"class":126},[109,22090,22091],{"class":111,"line":526},[109,22092,158],{"emptyLinePlaceholder":157},[109,22094,22095],{"class":111,"line":552},[109,22096,19720],{"class":115},[109,22098,22099,22101],{"class":111,"line":557},[109,22100,19725],{"class":211},[109,22102,803],{"class":126},[109,22104,22105],{"class":111,"line":584},[109,22106,1335],{"class":126},[109,22108,22109],{"class":111,"line":611},[109,22110,22111],{"class":115},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[109,22113,22114,22116,22119,22122,22125],{"class":111,"line":616},[109,22115,3852],{"class":122},[109,22117,22118],{"class":126},"(m_Height ",[109,22120,22121],{"class":122},"!=",[109,22123,22124],{"class":133}," NULL",[109,22126,1330],{"class":126},[109,22128,22129],{"class":111,"line":633},[109,22130,3865],{"class":126},[109,22132,22133,22136,22139],{"class":111,"line":649},[109,22134,22135],{"class":122},"            delete",[109,22137,22138],{"class":126}," m_Height;",[109,22140,22141],{"class":115}," \u002F\u002F释放堆区内存\n",[109,22143,22144,22147,22149,22151,22153],{"class":111,"line":676},[109,22145,22146],{"class":126},"            m_Height",[109,22148,130],{"class":122},[109,22150,3749],{"class":133},[109,22152,821],{"class":126},[109,22154,22155],{"class":115}," \u002F\u002F防止野指针\n",[109,22157,22158],{"class":111,"line":703},[109,22159,3884],{"class":126},[109,22161,22162,22164,22166],{"class":111,"line":708},[109,22163,1396],{"class":126},[109,22165,275],{"class":122},[109,22167,22168],{"class":278},"\"Person的析构函数调用\"\n",[109,22170,22171],{"class":111,"line":723},[109,22172,1361],{"class":126},[109,22174,22175,22177],{"class":111,"line":728},[109,22176,232],{"class":122},[109,22178,16839],{"class":126},[109,22180,22181,22183,22185,22188],{"class":111,"line":739},[109,22182,232],{"class":122},[109,22184,797],{"class":122},[109,22186,22187],{"class":126},"m_Height;",[109,22189,22190],{"class":115}," \u002F\u002F定义一个指针，指向身高\n",[109,22192,22193],{"class":111,"line":9352},[109,22194,5337],{"class":126},[109,22196,22197,22199,22201],{"class":111,"line":9364},[109,22198,1166],{"class":122},[109,22200,1169],{"class":211},[109,22202,803],{"class":126},[109,22204,22205],{"class":111,"line":9376},[109,22206,808],{"class":126},[109,22208,22209,22211,22213,22215,22217,22219,22222],{"class":111,"line":11034},[109,22210,20604],{"class":126},[109,22212,8456],{"class":211},[109,22214,714],{"class":126},[109,22216,2182],{"class":133},[109,22218,1914],{"class":126},[109,22220,22221],{"class":133},"160",[109,22223,720],{"class":126},[109,22225,22226,22228,22230,22233,22235,22238,22240,22243,22245,22248,22250,22252],{"class":111,"line":11059},[109,22227,1058],{"class":126},[109,22229,275],{"class":122},[109,22231,22232],{"class":278},"\"p1的年龄为:\"",[109,22234,275],{"class":122},[109,22236,22237],{"class":126},"p1.m_Age",[109,22239,275],{"class":122},[109,22241,22242],{"class":278},"\"身高为：\"",[109,22244,1061],{"class":122},[109,22246,22247],{"class":126},"p1.m_Height",[109,22249,275],{"class":122},[109,22251,2635],{"class":126},[109,22253,22254],{"class":115},"  \u002F\u002F18\n",[109,22256,22257,22259,22261],{"class":111,"line":11082},[109,22258,20604],{"class":126},[109,22260,8359],{"class":211},[109,22262,18688],{"class":126},[109,22264,22265,22267,22269,22272,22274,22276,22278,22280,22282,22285,22287,22289],{"class":111,"line":11106},[109,22266,1058],{"class":126},[109,22268,275],{"class":122},[109,22270,22271],{"class":278},"\"p2的年龄为：\"",[109,22273,275],{"class":122},[109,22275,20634],{"class":126},[109,22277,275],{"class":122},[109,22279,22242],{"class":278},[109,22281,1061],{"class":122},[109,22283,22284],{"class":126},"p2.m_Height",[109,22286,275],{"class":122},[109,22288,2635],{"class":126},[109,22290,22254],{"class":115},[109,22292,22293],{"class":111,"line":11111},[109,22294,14383],{"class":126},[109,22296,22297],{"class":111,"line":11116},[109,22298,742],{"class":126},[109,22300,22301,22303,22305],{"class":111,"line":11121},[109,22302,123],{"class":122},[109,22304,212],{"class":211},[109,22306,803],{"class":126},[109,22308,22309],{"class":111,"line":11130},[109,22310,808],{"class":126},[109,22312,22313,22315],{"class":111,"line":11135},[109,22314,1452],{"class":211},[109,22316,874],{"class":126},[109,22318,22319],{"class":111,"line":11141},[109,22320,742],{"class":126},[19,22322,22323],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22325,22326],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22328,22329],{},[938,22330],{"alt":104,"src":22331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22333,22334],{},"浅拷贝问题要使用深拷贝来解决",[19,22336,22337],{},[938,22338],{"alt":104,"src":22339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22341,22342],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[51,22344,22346],{"id":22345},"_826初始化列表","8.2.6初始化列表",[19,22348,22349],{},"作用：初始化属性",[19,22351,6518],{},[99,22353,22356],{"className":22354,"code":22355,"language":6524},[6522],"构造函数():属性1(值1),属性2(值2).....{}\n",[106,22357,22355],{"__ignoreMap":104},[19,22359,22360],{},"例子",[99,22362,22364],{"className":101,"code":22363,"language":103,"meta":104,"style":104},"#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",[106,22365,22366,22372,22382,22388,22392,22397,22401,22406,22411,22416,22421,22426,22431,22435,22440,22445,22488,22497,22515,22533,22551,22555,22559,22566,22573,22580,22584,22588,22596,22600,22604,22624,22633,22637,22641,22651,22655,22663],{"__ignoreMap":104},[109,22367,22368,22370],{"class":111,"line":112},[109,22369,3317],{"class":122},[109,22371,3320],{"class":278},[109,22373,22374,22376,22378,22380],{"class":111,"line":119},[109,22375,3325],{"class":122},[109,22377,3328],{"class":122},[109,22379,3331],{"class":211},[109,22381,137],{"class":126},[109,22383,22384,22386],{"class":111,"line":140},[109,22385,15867],{"class":122},[109,22387,16344],{"class":211},[109,22389,22390],{"class":111,"line":154},[109,22391,808],{"class":126},[109,22393,22394],{"class":111,"line":161},[109,22395,22396],{"class":122},"    public:\n",[109,22398,22399],{"class":111,"line":167},[109,22400,158],{"emptyLinePlaceholder":157},[109,22402,22403],{"class":111,"line":185},[109,22404,22405],{"class":115},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[109,22407,22408],{"class":111,"line":201},[109,22409,22410],{"class":115},"    \u002F\u002FPerson(int a, int b, int c) {\n",[109,22412,22413],{"class":111,"line":206},[109,22414,22415],{"class":115},"    \u002F\u002F  m_A = a;\n",[109,22417,22418],{"class":111,"line":218},[109,22419,22420],{"class":115},"    \u002F\u002F  m_B = b;\n",[109,22422,22423],{"class":111,"line":223},[109,22424,22425],{"class":115},"    \u002F\u002F  m_C = c;\n",[109,22427,22428],{"class":111,"line":229},[109,22429,22430],{"class":115},"    \u002F\u002F}\n",[109,22432,22433],{"class":111,"line":244},[109,22434,158],{"emptyLinePlaceholder":157},[109,22436,22437],{"class":111,"line":258},[109,22438,22439],{"class":115},"    \u002F\u002F初始化列表方式初始化\n",[109,22441,22442],{"class":111,"line":263},[109,22443,22444],{"class":115},"    \u002F\u002F使用有参构造函数\n",[109,22446,22447,22449,22451,22453,22455,22457,22459,22461,22463,22465,22467,22470,22473,22476,22479,22482,22485],{"class":111,"line":269},[109,22448,19692],{"class":211},[109,22450,714],{"class":126},[109,22452,123],{"class":122},[109,22454,2791],{"class":6553},[109,22456,13608],{"class":126},[109,22458,123],{"class":122},[109,22460,4180],{"class":6553},[109,22462,13608],{"class":126},[109,22464,123],{"class":122},[109,22466,4196],{"class":6553},[109,22468,22469],{"class":126},") :",[109,22471,22472],{"class":211},"m_A",[109,22474,22475],{"class":126},"(a), ",[109,22477,22478],{"class":211},"m_B",[109,22480,22481],{"class":126},"(b), ",[109,22483,22484],{"class":211},"m_C",[109,22486,22487],{"class":126},"(c) {}\n",[109,22489,22490,22492,22495],{"class":111,"line":304},[109,22491,16082],{"class":122},[109,22493,22494],{"class":211}," PrintPerson",[109,22496,215],{"class":126},[109,22498,22499,22501,22503,22506,22508,22511,22513],{"class":111,"line":331},[109,22500,10987],{"class":126},[109,22502,275],{"class":122},[109,22504,22505],{"class":278}," \"mA:\"",[109,22507,282],{"class":122},[109,22509,22510],{"class":126}," m_A ",[109,22512,275],{"class":122},[109,22514,301],{"class":126},[109,22516,22517,22519,22521,22524,22526,22529,22531],{"class":111,"line":336},[109,22518,10987],{"class":126},[109,22520,275],{"class":122},[109,22522,22523],{"class":278}," \"mB:\"",[109,22525,282],{"class":122},[109,22527,22528],{"class":126}," m_B ",[109,22530,275],{"class":122},[109,22532,301],{"class":126},[109,22534,22535,22537,22539,22542,22544,22547,22549],{"class":111,"line":364},[109,22536,10987],{"class":126},[109,22538,275],{"class":122},[109,22540,22541],{"class":278}," \"mC:\"",[109,22543,282],{"class":122},[109,22545,22546],{"class":126}," m_C ",[109,22548,275],{"class":122},[109,22550,301],{"class":126},[109,22552,22553],{"class":111,"line":391},[109,22554,1361],{"class":126},[109,22556,22557],{"class":111,"line":396},[109,22558,16395],{"class":122},[109,22560,22561,22563],{"class":111,"line":402},[109,22562,232],{"class":122},[109,22564,22565],{"class":126}," m_A;\n",[109,22567,22568,22570],{"class":111,"line":419},[109,22569,232],{"class":122},[109,22571,22572],{"class":126}," m_B;\n",[109,22574,22575,22577],{"class":111,"line":435},[109,22576,232],{"class":122},[109,22578,22579],{"class":126}," m_C;\n",[109,22581,22582],{"class":111,"line":440},[109,22583,5337],{"class":126},[109,22585,22586],{"class":111,"line":467},[109,22587,158],{"emptyLinePlaceholder":157},[109,22589,22590,22592,22594],{"class":111,"line":494},[109,22591,123],{"class":122},[109,22593,212],{"class":211},[109,22595,7308],{"class":126},[109,22597,22598],{"class":111,"line":499},[109,22599,808],{"class":126},[109,22601,22602],{"class":111,"line":526},[109,22603,158],{"emptyLinePlaceholder":157},[109,22605,22606,22608,22610,22612,22614,22616,22618,22620,22622],{"class":111,"line":552},[109,22607,20604],{"class":126},[109,22609,19],{"class":211},[109,22611,714],{"class":126},[109,22613,1755],{"class":133},[109,22615,13608],{"class":126},[109,22617,1618],{"class":133},[109,22619,13608],{"class":126},[109,22621,1612],{"class":133},[109,22623,720],{"class":126},[109,22625,22626,22628,22631],{"class":111,"line":557},[109,22627,17039],{"class":126},[109,22629,22630],{"class":211},"PrintPerson",[109,22632,874],{"class":126},[109,22634,22635],{"class":111,"line":584},[109,22636,158],{"emptyLinePlaceholder":157},[109,22638,22639],{"class":111,"line":611},[109,22640,158],{"emptyLinePlaceholder":157},[109,22642,22643,22645,22647,22649],{"class":111,"line":616},[109,22644,711],{"class":211},[109,22646,714],{"class":126},[109,22648,717],{"class":278},[109,22650,720],{"class":126},[109,22652,22653],{"class":111,"line":633},[109,22654,158],{"emptyLinePlaceholder":157},[109,22656,22657,22659,22661],{"class":111,"line":649},[109,22658,731],{"class":122},[109,22660,734],{"class":133},[109,22662,137],{"class":126},[109,22664,22665],{"class":111,"line":676},[109,22666,742],{"class":126},[19,22668,22669,22670,22673,22674],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[23,22671,22672],{},"参数名就是定义的对象属性","，",[23,22675,22676],{},"属性后面的值为有参构造函数的形参",[99,22678,22680],{"className":101,"code":22679,"language":103,"meta":104,"style":104},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[106,22681,22682],{"__ignoreMap":104},[109,22683,22684,22686,22688,22690,22693,22695,22698,22700,22703,22705,22708,22710,22713,22715],{"class":111,"line":112},[109,22685,20219],{"class":211},[109,22687,714],{"class":126},[109,22689,123],{"class":122},[109,22691,22692],{"class":126}," a.",[109,22694,123],{"class":122},[109,22696,22697],{"class":126}," b,",[109,22699,123],{"class":122},[109,22701,22702],{"class":126}," b):",[109,22704,22472],{"class":211},[109,22706,22707],{"class":126},"(a),",[109,22709,22478],{"class":211},[109,22711,22712],{"class":126},"(c),",[109,22714,22484],{"class":211},[109,22716,22717],{"class":126},"(b) {}\n",[51,22719,22721],{"id":22720},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22723,22724],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22726,15806],{},[99,22728,22730],{"className":101,"code":22729,"language":103,"meta":104,"style":104},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[106,22731,22732,22737,22742,22746,22751,22755],{"__ignoreMap":104},[109,22733,22734],{"class":111,"line":112},[109,22735,22736],{"class":126},"A{};\n",[109,22738,22739],{"class":111,"line":119},[109,22740,22741],{"class":126},"B\n",[109,22743,22744],{"class":111,"line":140},[109,22745,808],{"class":126},[109,22747,22748],{"class":111,"line":154},[109,22749,22750],{"class":126},"    A a;\n",[109,22752,22753],{"class":111,"line":161},[109,22754,742],{"class":126},[109,22756,22757],{"class":111,"line":167},[109,22758,22759],{"class":115},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22761,22762],{},"案例",[99,22764,22766],{"className":101,"code":22765,"language":103,"meta":104,"style":104},"\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",[106,22767,22768,22773,22780,22784,22789,22794,22808,22812,22822,22833,22837,22844,22848,22861,22865,22870,22875,22879,22885,22889,22893,22897,22928,22932,22943,22947,22953,22957,22970,22974,22978,22982,22987,22992,22996,23004,23008,23025,23044,23048,23056,23060,23066],{"__ignoreMap":104},[109,22769,22770],{"class":111,"line":112},[109,22771,22772],{"class":115},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[109,22774,22775,22777],{"class":111,"line":119},[109,22776,15867],{"class":122},[109,22778,22779],{"class":211}," Phone\n",[109,22781,22782],{"class":111,"line":140},[109,22783,808],{"class":126},[109,22785,22786],{"class":111,"line":154},[109,22787,22788],{"class":126},"public：\n",[109,22790,22791],{"class":111,"line":161},[109,22792,22793],{"class":115},"    \u002F\u002F 赋值(构造函数)\n",[109,22795,22796,22799,22801,22803,22806],{"class":111,"line":167},[109,22797,22798],{"class":211},"    Phone",[109,22800,714],{"class":126},[109,22802,16090],{"class":211},[109,22804,22805],{"class":6553}," pName",[109,22807,1330],{"class":126},[109,22809,22810],{"class":111,"line":185},[109,22811,1335],{"class":126},[109,22813,22814,22817,22819],{"class":111,"line":201},[109,22815,22816],{"class":126},"        m_pName",[109,22818,130],{"class":122},[109,22820,22821],{"class":126},"pName;\n",[109,22823,22824,22826,22828,22831],{"class":111,"line":206},[109,22825,1396],{"class":126},[109,22827,275],{"class":122},[109,22829,22830],{"class":278},"\"Phone的构造函数调用\"",[109,22832,137],{"class":126},[109,22834,22835],{"class":111,"line":218},[109,22836,1361],{"class":126},[109,22838,22839,22842],{"class":111,"line":223},[109,22840,22841],{"class":211},"    ~Phone",[109,22843,803],{"class":126},[109,22845,22846],{"class":111,"line":229},[109,22847,1335],{"class":126},[109,22849,22850,22852,22854,22857,22859],{"class":111,"line":244},[109,22851,1396],{"class":126},[109,22853,275],{"class":122},[109,22855,22856],{"class":278},"\"Phone析构函数调用\"",[109,22858,275],{"class":122},[109,22860,1068],{"class":126},[109,22862,22863],{"class":111,"line":258},[109,22864,1361],{"class":126},[109,22866,22867],{"class":111,"line":263},[109,22868,22869],{"class":115},"    \u002F\u002F\n",[109,22871,22872],{"class":111,"line":269},[109,22873,22874],{"class":126},"    string m_PName;\n",[109,22876,22877],{"class":111,"line":304},[109,22878,5337],{"class":126},[109,22880,22881,22883],{"class":111,"line":331},[109,22882,15867],{"class":122},[109,22884,16344],{"class":211},[109,22886,22887],{"class":111,"line":336},[109,22888,808],{"class":126},[109,22890,22891],{"class":111,"line":364},[109,22892,15889],{"class":122},[109,22894,22895],{"class":111,"line":391},[109,22896,18167],{"class":115},[109,22898,22899,22901,22903,22905,22907,22909,22911,22914,22917,22919,22922,22925],{"class":111,"line":396},[109,22900,19692],{"class":211},[109,22902,714],{"class":126},[109,22904,16090],{"class":211},[109,22906,16093],{"class":6553},[109,22908,1914],{"class":126},[109,22910,16090],{"class":211},[109,22912,22913],{"class":6553}," pname",[109,22915,22916],{"class":126},"):",[109,22918,16183],{"class":211},[109,22920,22921],{"class":126},"(name),m_phone.",[109,22923,22924],{"class":211},"m_PName",[109,22926,22927],{"class":126},"(pname) \n",[109,22929,22930],{"class":111,"line":402},[109,22931,1335],{"class":126},[109,22933,22934,22936,22938,22941],{"class":111,"line":419},[109,22935,1396],{"class":126},[109,22937,275],{"class":122},[109,22939,22940],{"class":278},"\"Person的构造函数调用\"",[109,22942,137],{"class":126},[109,22944,22945],{"class":111,"line":435},[109,22946,1361],{"class":126},[109,22948,22949,22951],{"class":111,"line":440},[109,22950,19725],{"class":211},[109,22952,803],{"class":126},[109,22954,22955],{"class":111,"line":467},[109,22956,1335],{"class":126},[109,22958,22959,22961,22963,22966,22968],{"class":111,"line":494},[109,22960,1396],{"class":126},[109,22962,275],{"class":122},[109,22964,22965],{"class":278},"\"Person析构函数调用\"",[109,22967,275],{"class":122},[109,22969,1068],{"class":126},[109,22971,22972],{"class":111,"line":499},[109,22973,1361],{"class":126},[109,22975,22976],{"class":111,"line":526},[109,22977,9106],{"class":115},[109,22979,22980],{"class":111,"line":552},[109,22981,16065],{"class":126},[109,22983,22984],{"class":111,"line":557},[109,22985,22986],{"class":115},"    \u002F\u002F手机\n",[109,22988,22989],{"class":111,"line":584},[109,22990,22991],{"class":126},"    Phone m_Phone;\n",[109,22993,22994],{"class":111,"line":611},[109,22995,5337],{"class":126},[109,22997,22998,23000,23002],{"class":111,"line":616},[109,22999,1166],{"class":122},[109,23001,1169],{"class":211},[109,23003,803],{"class":126},[109,23005,23006],{"class":111,"line":633},[109,23007,808],{"class":126},[109,23009,23010,23012,23014,23016,23018,23020,23023],{"class":111,"line":649},[109,23011,20604],{"class":126},[109,23013,19],{"class":211},[109,23015,714],{"class":126},[109,23017,9242],{"class":278},[109,23019,1914],{"class":126},[109,23021,23022],{"class":278},"\"安卓\"",[109,23024,720],{"class":126},[109,23026,23027,23029,23031,23034,23036,23039,23041],{"class":111,"line":676},[109,23028,1058],{"class":126},[109,23030,275],{"class":122},[109,23032,23033],{"class":126},"p.Name",[109,23035,275],{"class":122},[109,23037,23038],{"class":278},"\"拿着：\"",[109,23040,275],{"class":122},[109,23042,23043],{"class":126},"p.m_phone.m_PName;\n",[109,23045,23046],{"class":111,"line":703},[109,23047,742],{"class":126},[109,23049,23050,23052,23054],{"class":111,"line":708},[109,23051,123],{"class":122},[109,23053,212],{"class":211},[109,23055,803],{"class":126},[109,23057,23058],{"class":111,"line":723},[109,23059,808],{"class":126},[109,23061,23062,23064],{"class":111,"line":728},[109,23063,1452],{"class":211},[109,23065,874],{"class":126},[109,23067,23068],{"class":111,"line":739},[109,23069,742],{"class":126},[19,23071,10343],{},[99,23073,23075],{"className":101,"code":23074,"language":103,"meta":104,"style":104},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[106,23076,23077,23082],{"__ignoreMap":104},[109,23078,23079],{"class":111,"line":112},[109,23080,23081],{"class":115},"    \u002F\u002F不需要写这个：\n",[109,23083,23084],{"class":111,"line":119},[109,23085,23086],{"class":115},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23088,23089],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[99,23091,23093],{"className":101,"code":23092,"language":103,"meta":104,"style":104},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[106,23094,23095],{"__ignoreMap":104},[109,23096,23097,23099,23102,23104,23107,23110],{"class":111,"line":112},[109,23098,20219],{"class":211},[109,23100,23101],{"class":126},"(string name.string pname):",[109,23103,16183],{"class":211},[109,23105,23106],{"class":126},"(name),",[109,23108,23109],{"class":211},"m_phone",[109,23111,23112],{"class":126},"(pname) {}\n",[19,23114,23115,23116,130,23119],{},"采用的是隐式转换法，实际为如下：\n",[106,23117,23118],{},"m_phone(pname)",[106,23120,23121],{},"Phone m_phone=pname",[19,23123,23124,23127],{},[23,23125,23126],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23129,23130],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[51,23132,23134],{"id":23133},"_828静态对象","8.2.8静态对象",[19,23136,23137],{},"静态对象在成员对象前static，称为静态对象",[19,23139,23140],{},"静态对象分为两类：",[765,23142,23143],{},[30,23144,23145],{},"静态成员变量",[27,23147,23148,23151,23154],{},[30,23149,23150],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[30,23152,23153],{},"②在编译阶段分配内存",[30,23155,23156],{},"③类内声明，类外初始化",[765,23158,23159],{"start":119},[30,23160,23161],{},"静态成员函数",[27,23163,23164,23167],{},[30,23165,23166],{},"①所有对象共享同一个函数",[30,23168,23169],{},"②静态成员函数只能访问静态成员变量",[23171,23172,23174],"h4",{"id":23173},"_8281静态成员变量","8.2.8.1静态成员变量",[99,23176,23178],{"className":101,"code":23177,"language":103,"meta":104,"style":104},"#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",[106,23179,23180,23186,23196,23202,23206,23210,23215,23220,23225,23233,23237,23241,23245,23253,23257,23261,23266,23279,23283,23291,23295,23301],{"__ignoreMap":104},[109,23181,23182,23184],{"class":111,"line":112},[109,23183,3317],{"class":122},[109,23185,3320],{"class":278},[109,23187,23188,23190,23192,23194],{"class":111,"line":119},[109,23189,3325],{"class":122},[109,23191,3328],{"class":122},[109,23193,3331],{"class":211},[109,23195,137],{"class":126},[109,23197,23198,23200],{"class":111,"line":140},[109,23199,15867],{"class":122},[109,23201,16344],{"class":211},[109,23203,23204],{"class":111,"line":154},[109,23205,808],{"class":126},[109,23207,23208],{"class":111,"line":161},[109,23209,15889],{"class":122},[109,23211,23212],{"class":111,"line":167},[109,23213,23214],{"class":115},"    \u002F\u002F非静态成员变量\n",[109,23216,23217],{"class":111,"line":185},[109,23218,23219],{"class":115},"    \u002F\u002F int m_A;\n",[109,23221,23222],{"class":111,"line":201},[109,23223,23224],{"class":115},"    \u002F\u002F定义静态成员变量\n",[109,23226,23227,23229,23231],{"class":111,"line":206},[109,23228,405],{"class":122},[109,23230,173],{"class":122},[109,23232,22565],{"class":126},[109,23234,23235],{"class":111,"line":218},[109,23236,158],{"emptyLinePlaceholder":157},[109,23238,23239],{"class":111,"line":223},[109,23240,158],{"emptyLinePlaceholder":157},[109,23242,23243],{"class":111,"line":229},[109,23244,5337],{"class":126},[109,23246,23247,23249,23251],{"class":111,"line":244},[109,23248,1166],{"class":122},[109,23250,1169],{"class":211},[109,23252,803],{"class":126},[109,23254,23255],{"class":111,"line":258},[109,23256,808],{"class":126},[109,23258,23259],{"class":111,"line":263},[109,23260,16486],{"class":126},[109,23262,23263],{"class":111,"line":269},[109,23264,23265],{"class":115},"    \u002F\u002F输出类成员变量这块内存\n",[109,23267,23268,23270,23272,23275,23277],{"class":111,"line":304},[109,23269,1058],{"class":126},[109,23271,275],{"class":122},[109,23273,23274],{"class":126},"p.m_A",[109,23276,275],{"class":122},[109,23278,1068],{"class":126},[109,23280,23281],{"class":111,"line":331},[109,23282,742],{"class":126},[109,23284,23285,23287,23289],{"class":111,"line":336},[109,23286,123],{"class":122},[109,23288,212],{"class":211},[109,23290,803],{"class":126},[109,23292,23293],{"class":111,"line":364},[109,23294,808],{"class":126},[109,23296,23297,23299],{"class":111,"line":391},[109,23298,1452],{"class":211},[109,23300,803],{"class":126},[109,23302,23303],{"class":111,"line":396},[109,23304,742],{"class":126},[19,23306,23307],{},"此时输出是报错的：无法解析外部命令",[19,23309,23310],{},"解决这一问题：必须用到类内声明，类外初始化操作",[99,23312,23314],{"className":101,"code":23313,"language":103,"meta":104,"style":104},"#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",[106,23315,23316,23322,23332,23338,23342,23346,23351,23359,23363,23368,23383,23391,23395,23399,23404,23409,23421,23426,23437,23442,23447,23460,23464,23472,23476,23482],{"__ignoreMap":104},[109,23317,23318,23320],{"class":111,"line":112},[109,23319,3317],{"class":122},[109,23321,3320],{"class":278},[109,23323,23324,23326,23328,23330],{"class":111,"line":119},[109,23325,3325],{"class":122},[109,23327,3328],{"class":122},[109,23329,3331],{"class":211},[109,23331,137],{"class":126},[109,23333,23334,23336],{"class":111,"line":140},[109,23335,15867],{"class":122},[109,23337,16344],{"class":211},[109,23339,23340],{"class":111,"line":154},[109,23341,808],{"class":126},[109,23343,23344],{"class":111,"line":161},[109,23345,15889],{"class":122},[109,23347,23348],{"class":111,"line":167},[109,23349,23350],{"class":115},"    \u002F\u002F类内声明\n",[109,23352,23353,23355,23357],{"class":111,"line":185},[109,23354,405],{"class":122},[109,23356,173],{"class":122},[109,23358,22565],{"class":126},[109,23360,23361],{"class":111,"line":201},[109,23362,5337],{"class":126},[109,23364,23365],{"class":111,"line":206},[109,23366,23367],{"class":115},"\u002F\u002F类外初始化\n",[109,23369,23370,23372,23374,23377,23379,23381],{"class":111,"line":218},[109,23371,123],{"class":122},[109,23373,16742],{"class":211},[109,23375,23376],{"class":126},"::m_A",[109,23378,130],{"class":122},[109,23380,1008],{"class":133},[109,23382,137],{"class":126},[109,23384,23385,23387,23389],{"class":111,"line":223},[109,23386,1166],{"class":122},[109,23388,1169],{"class":211},[109,23390,803],{"class":126},[109,23392,23393],{"class":111,"line":229},[109,23394,808],{"class":126},[109,23396,23397],{"class":111,"line":244},[109,23398,16486],{"class":126},[109,23400,23401],{"class":111,"line":258},[109,23402,23403],{"class":115},"    \u002F\u002F访问变量的原内存空间\n",[109,23405,23406],{"class":111,"line":263},[109,23407,23408],{"class":115},"    \u002F\u002F100\n",[109,23410,23411,23413,23415,23417,23419],{"class":111,"line":269},[109,23412,1058],{"class":126},[109,23414,275],{"class":122},[109,23416,23274],{"class":126},[109,23418,275],{"class":122},[109,23420,1068],{"class":126},[109,23422,23423],{"class":111,"line":304},[109,23424,23425],{"class":126},"    Person p2;\n",[109,23427,23428,23431,23433,23435],{"class":111,"line":331},[109,23429,23430],{"class":126},"    p2.m_A",[109,23432,130],{"class":122},[109,23434,3098],{"class":133},[109,23436,137],{"class":126},[109,23438,23439],{"class":111,"line":336},[109,23440,23441],{"class":115},"    \u002F\u002F继续访问这片空间\n",[109,23443,23444],{"class":111,"line":364},[109,23445,23446],{"class":115},"    \u002F\u002F200\n",[109,23448,23449,23451,23453,23456,23458],{"class":111,"line":391},[109,23450,1058],{"class":126},[109,23452,275],{"class":122},[109,23454,23455],{"class":126},"p2.m_A",[109,23457,275],{"class":122},[109,23459,1068],{"class":126},[109,23461,23462],{"class":111,"line":396},[109,23463,742],{"class":126},[109,23465,23466,23468,23470],{"class":111,"line":402},[109,23467,123],{"class":122},[109,23469,212],{"class":211},[109,23471,803],{"class":126},[109,23473,23474],{"class":111,"line":419},[109,23475,808],{"class":126},[109,23477,23478,23480],{"class":111,"line":435},[109,23479,1452],{"class":211},[109,23481,874],{"class":126},[109,23483,23484],{"class":111,"line":440},[109,23485,742],{"class":126},[19,23487,23488],{},[23,23489,23490],{},"静态变量的访问",[99,23492,23494],{"className":101,"code":23493,"language":103,"meta":104,"style":104},"#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",[106,23495,23496,23502,23512,23518,23522,23526,23530,23538,23542,23547,23555,23559,23563,23577,23592,23600,23604,23609,23614,23619,23624,23636,23641,23646,23660,23677,23681,23689,23693,23699],{"__ignoreMap":104},[109,23497,23498,23500],{"class":111,"line":112},[109,23499,3317],{"class":122},[109,23501,3320],{"class":278},[109,23503,23504,23506,23508,23510],{"class":111,"line":119},[109,23505,3325],{"class":122},[109,23507,3328],{"class":122},[109,23509,3331],{"class":211},[109,23511,137],{"class":126},[109,23513,23514,23516],{"class":111,"line":140},[109,23515,15867],{"class":122},[109,23517,16344],{"class":211},[109,23519,23520],{"class":111,"line":154},[109,23521,808],{"class":126},[109,23523,23524],{"class":111,"line":161},[109,23525,15889],{"class":122},[109,23527,23528],{"class":111,"line":167},[109,23529,23350],{"class":115},[109,23531,23532,23534,23536],{"class":111,"line":185},[109,23533,405],{"class":122},[109,23535,173],{"class":122},[109,23537,22565],{"class":126},[109,23539,23540],{"class":111,"line":201},[109,23541,16395],{"class":122},[109,23543,23544],{"class":111,"line":206},[109,23545,23546],{"class":115},"    \u002F\u002F静态成员变量也是有访问权限的\n",[109,23548,23549,23551,23553],{"class":111,"line":218},[109,23550,405],{"class":122},[109,23552,173],{"class":122},[109,23554,22572],{"class":126},[109,23556,23557],{"class":111,"line":223},[109,23558,5337],{"class":126},[109,23560,23561],{"class":111,"line":229},[109,23562,23367],{"class":115},[109,23564,23565,23567,23569,23571,23573,23575],{"class":111,"line":244},[109,23566,123],{"class":122},[109,23568,16742],{"class":211},[109,23570,23376],{"class":126},[109,23572,130],{"class":122},[109,23574,1008],{"class":133},[109,23576,137],{"class":126},[109,23578,23579,23581,23583,23586,23588,23590],{"class":111,"line":258},[109,23580,123],{"class":122},[109,23582,16742],{"class":211},[109,23584,23585],{"class":126},"::m_B",[109,23587,130],{"class":122},[109,23589,2232],{"class":133},[109,23591,137],{"class":126},[109,23593,23594,23596,23598],{"class":111,"line":263},[109,23595,1166],{"class":122},[109,23597,1262],{"class":211},[109,23599,803],{"class":126},[109,23601,23602],{"class":111,"line":269},[109,23603,808],{"class":126},[109,23605,23606],{"class":111,"line":304},[109,23607,23608],{"class":115},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[109,23610,23611],{"class":111,"line":331},[109,23612,23613],{"class":115},"    \u002F\u002F静态成员变量有两种访问方式：\n",[109,23615,23616],{"class":111,"line":336},[109,23617,23618],{"class":115},"    \u002F\u002F1.通过对象进行访问\n",[109,23620,23621],{"class":111,"line":364},[109,23622,23623],{"class":126},"    Person p;  \n",[109,23625,23626,23628,23630,23632,23634],{"class":111,"line":391},[109,23627,1058],{"class":126},[109,23629,275],{"class":122},[109,23631,23274],{"class":126},[109,23633,275],{"class":122},[109,23635,1068],{"class":126},[109,23637,23638],{"class":111,"line":396},[109,23639,23640],{"class":115},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[109,23642,23643],{"class":111,"line":402},[109,23644,23645],{"class":115},"    \u002F\u002F2.通过类名进行访问\n",[109,23647,23648,23650,23652,23654,23656,23658],{"class":111,"line":419},[109,23649,1058],{"class":126},[109,23651,275],{"class":122},[109,23653,20219],{"class":211},[109,23655,23376],{"class":126},[109,23657,275],{"class":122},[109,23659,1068],{"class":126},[109,23661,23662,23664,23666,23668,23670,23672,23674],{"class":111,"line":435},[109,23663,1058],{"class":126},[109,23665,275],{"class":122},[109,23667,20219],{"class":211},[109,23669,23585],{"class":126},[109,23671,275],{"class":122},[109,23673,2635],{"class":126},[109,23675,23676],{"class":115}," \u002F\u002F没有访问权限，报错\n",[109,23678,23679],{"class":111,"line":440},[109,23680,742],{"class":126},[109,23682,23683,23685,23687],{"class":111,"line":467},[109,23684,123],{"class":122},[109,23686,212],{"class":211},[109,23688,803],{"class":126},[109,23690,23691],{"class":111,"line":494},[109,23692,808],{"class":126},[109,23694,23695,23697],{"class":111,"line":499},[109,23696,1459],{"class":211},[109,23698,874],{"class":126},[109,23700,23701],{"class":111,"line":526},[109,23702,742],{"class":126},[23171,23704,23706],{"id":23705},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23708,23709],{},"1.静态成员函数定义与访问",[99,23711,23713],{"className":101,"code":23712,"language":103,"meta":104,"style":104},"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",[106,23714,23715,23721,23725,23729,23734,23745,23749,23763,23767,23771,23779,23783,23788,23793,23797,23805,23810,23820],{"__ignoreMap":104},[109,23716,23717,23719],{"class":111,"line":112},[109,23718,15867],{"class":122},[109,23720,16344],{"class":211},[109,23722,23723],{"class":111,"line":119},[109,23724,808],{"class":126},[109,23726,23727],{"class":111,"line":140},[109,23728,15889],{"class":122},[109,23730,23731],{"class":111,"line":154},[109,23732,23733],{"class":115},"    \u002F\u002F在公共权限下定义静态成员函数\n",[109,23735,23736,23738,23741,23743],{"class":111,"line":161},[109,23737,405],{"class":122},[109,23739,23740],{"class":122}," void",[109,23742,800],{"class":211},[109,23744,803],{"class":126},[109,23746,23747],{"class":111,"line":167},[109,23748,1335],{"class":126},[109,23750,23751,23754,23756,23759,23761],{"class":111,"line":185},[109,23752,23753],{"class":126},"        coout",[109,23755,275],{"class":122},[109,23757,23758],{"class":278},"\"静态成员函数的调用\"",[109,23760,275],{"class":122},[109,23762,1068],{"class":126},[109,23764,23765],{"class":111,"line":201},[109,23766,1361],{"class":126},[109,23768,23769],{"class":111,"line":206},[109,23770,5337],{"class":126},[109,23772,23773,23775,23777],{"class":111,"line":218},[109,23774,1166],{"class":122},[109,23776,1169],{"class":211},[109,23778,803],{"class":126},[109,23780,23781],{"class":111,"line":223},[109,23782,808],{"class":126},[109,23784,23785],{"class":111,"line":229},[109,23786,23787],{"class":115},"    \u002F\u002F静态成员函数的调用方式:\n",[109,23789,23790],{"class":111,"line":244},[109,23791,23792],{"class":115},"    \u002F\u002F1.通过对象访问\n",[109,23794,23795],{"class":111,"line":258},[109,23796,16486],{"class":126},[109,23798,23799,23801,23803],{"class":111,"line":263},[109,23800,17039],{"class":126},[109,23802,972],{"class":211},[109,23804,874],{"class":126},[109,23806,23807],{"class":111,"line":269},[109,23808,23809],{"class":115},"    \u002F\u002F2.通过类名访问\n",[109,23811,23812,23814,23816,23818],{"class":111,"line":304},[109,23813,19692],{"class":211},[109,23815,18905],{"class":126},[109,23817,972],{"class":211},[109,23819,874],{"class":126},[109,23821,23822],{"class":111,"line":331},[109,23823,742],{"class":126},[765,23825,23826],{"start":119},[30,23827,23828],{},"静态成员函数只能访问静态成员变量",[99,23830,23832],{"className":101,"code":23831,"language":103,"meta":104,"style":104},"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",[106,23833,23834,23840,23844,23848,23852,23862,23866,23880,23885,23897,23901,23912,23922,23926,23930,23934,23944,23948,23961,23965,23969,23973,23977,23991,23999,24003,24007,24011,24015,24023,24027,24037,24042,24046,24054,24058,24064],{"__ignoreMap":104},[109,23835,23836,23838],{"class":111,"line":112},[109,23837,15867],{"class":122},[109,23839,16344],{"class":211},[109,23841,23842],{"class":111,"line":119},[109,23843,808],{"class":126},[109,23845,23846],{"class":111,"line":140},[109,23847,15889],{"class":122},[109,23849,23850],{"class":111,"line":154},[109,23851,23733],{"class":115},[109,23853,23854,23856,23858,23860],{"class":111,"line":161},[109,23855,405],{"class":122},[109,23857,23740],{"class":122},[109,23859,800],{"class":211},[109,23861,803],{"class":126},[109,23863,23864],{"class":111,"line":167},[109,23865,1335],{"class":126},[109,23867,23868,23871,23873,23875,23877],{"class":111,"line":185},[109,23869,23870],{"class":126},"        m_A",[109,23872,130],{"class":122},[109,23874,1351],{"class":133},[109,23876,821],{"class":126},[109,23878,23879],{"class":115}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[109,23881,23882],{"class":111,"line":201},[109,23883,23884],{"class":115},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[109,23886,23887,23889,23891,23893,23895],{"class":111,"line":206},[109,23888,23753],{"class":126},[109,23890,275],{"class":122},[109,23892,23758],{"class":278},[109,23894,275],{"class":122},[109,23896,1068],{"class":126},[109,23898,23899],{"class":111,"line":218},[109,23900,1361],{"class":126},[109,23902,23903,23905,23907,23909],{"class":111,"line":223},[109,23904,405],{"class":122},[109,23906,173],{"class":122},[109,23908,16621],{"class":126},[109,23910,23911],{"class":115}," \u002F\u002F静态成员变量\n",[109,23913,23914,23916,23919],{"class":111,"line":229},[109,23915,232],{"class":122},[109,23917,23918],{"class":126}," m_B;",[109,23920,23921],{"class":115}," \u002F\u002F非静态成员变量\n",[109,23923,23924],{"class":111,"line":244},[109,23925,158],{"emptyLinePlaceholder":157},[109,23927,23928],{"class":111,"line":258},[109,23929,16395],{"class":122},[109,23931,23932],{"class":111,"line":263},[109,23933,23546],{"class":115},[109,23935,23936,23938,23940,23942],{"class":111,"line":269},[109,23937,405],{"class":122},[109,23939,23740],{"class":122},[109,23941,14791],{"class":211},[109,23943,803],{"class":126},[109,23945,23946],{"class":111,"line":304},[109,23947,1335],{"class":126},[109,23949,23950,23952,23954,23957,23959],{"class":111,"line":331},[109,23951,1396],{"class":126},[109,23953,275],{"class":122},[109,23955,23956],{"class":278},"\"这是私有权限下的静态函数调用\"",[109,23958,275],{"class":122},[109,23960,1068],{"class":126},[109,23962,23963],{"class":111,"line":336},[109,23964,1361],{"class":126},[109,23966,23967],{"class":111,"line":364},[109,23968,158],{"emptyLinePlaceholder":157},[109,23970,23971],{"class":111,"line":391},[109,23972,158],{"emptyLinePlaceholder":157},[109,23974,23975],{"class":111,"line":396},[109,23976,5337],{"class":126},[109,23978,23979,23981,23983,23985,23987,23989],{"class":111,"line":402},[109,23980,123],{"class":122},[109,23982,16742],{"class":211},[109,23984,23376],{"class":126},[109,23986,130],{"class":122},[109,23988,1314],{"class":133},[109,23990,137],{"class":126},[109,23992,23993,23995,23997],{"class":111,"line":419},[109,23994,1166],{"class":122},[109,23996,1169],{"class":211},[109,23998,803],{"class":126},[109,24000,24001],{"class":111,"line":435},[109,24002,808],{"class":126},[109,24004,24005],{"class":111,"line":440},[109,24006,23787],{"class":115},[109,24008,24009],{"class":111,"line":467},[109,24010,23792],{"class":115},[109,24012,24013],{"class":111,"line":494},[109,24014,16486],{"class":126},[109,24016,24017,24019,24021],{"class":111,"line":499},[109,24018,17039],{"class":126},[109,24020,972],{"class":211},[109,24022,874],{"class":126},[109,24024,24025],{"class":111,"line":526},[109,24026,23809],{"class":115},[109,24028,24029,24031,24033,24035],{"class":111,"line":552},[109,24030,19692],{"class":211},[109,24032,18905],{"class":126},[109,24034,972],{"class":211},[109,24036,874],{"class":126},[109,24038,24039],{"class":111,"line":557},[109,24040,24041],{"class":115},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[109,24043,24044],{"class":111,"line":584},[109,24045,742],{"class":126},[109,24047,24048,24050,24052],{"class":111,"line":611},[109,24049,123],{"class":122},[109,24051,212],{"class":211},[109,24053,803],{"class":126},[109,24055,24056],{"class":111,"line":616},[109,24057,808],{"class":126},[109,24059,24060,24062],{"class":111,"line":633},[109,24061,1452],{"class":211},[109,24063,874],{"class":126},[109,24065,24066],{"class":111,"line":649},[109,24067,742],{"class":126},[51,24069,24071],{"id":24070},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23171,24073,24075],{"id":24074},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24077,24078],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24080,24081],{},"只有非静态成员变量才属于类的对象上",[24083,24084,24086],"h5",{"id":24085},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[99,24088,24090],{"className":101,"code":24089,"language":103,"meta":104,"style":104},"#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",[106,24091,24092,24099,24109,24115,24119,24123,24127,24135,24139,24143,24166,24170,24178,24182,24188],{"__ignoreMap":104},[109,24093,24094,24096],{"class":111,"line":112},[109,24095,3317],{"class":122},[109,24097,24098],{"class":278},"\u003Ciostraem>\n",[109,24100,24101,24103,24105,24107],{"class":111,"line":119},[109,24102,3325],{"class":122},[109,24104,3328],{"class":122},[109,24106,3331],{"class":211},[109,24108,137],{"class":126},[109,24110,24111,24113],{"class":111,"line":140},[109,24112,15867],{"class":122},[109,24114,16344],{"class":211},[109,24116,24117],{"class":111,"line":154},[109,24118,808],{"class":126},[109,24120,24121],{"class":111,"line":161},[109,24122,158],{"emptyLinePlaceholder":157},[109,24124,24125],{"class":111,"line":167},[109,24126,5337],{"class":126},[109,24128,24129,24131,24133],{"class":111,"line":185},[109,24130,1166],{"class":122},[109,24132,1169],{"class":211},[109,24134,803],{"class":126},[109,24136,24137],{"class":111,"line":201},[109,24138,808],{"class":126},[109,24140,24141],{"class":111,"line":206},[109,24142,16486],{"class":126},[109,24144,24145,24147,24149,24152,24154,24157,24159,24161,24163],{"class":111,"line":218},[109,24146,1058],{"class":126},[109,24148,275],{"class":122},[109,24150,24151],{"class":278},"\"size of p=\"",[109,24153,275],{"class":122},[109,24155,24156],{"class":211},"sizeoif",[109,24158,7866],{"class":126},[109,24160,275],{"class":122},[109,24162,2635],{"class":126},[109,24164,24165],{"class":115}," \u002F\u002F查看这个空类的占用的内存空间\n",[109,24167,24168],{"class":111,"line":223},[109,24169,742],{"class":126},[109,24171,24172,24174,24176],{"class":111,"line":229},[109,24173,123],{"class":122},[109,24175,212],{"class":211},[109,24177,803],{"class":126},[109,24179,24180],{"class":111,"line":244},[109,24181,808],{"class":126},[109,24183,24184,24186],{"class":111,"line":258},[109,24185,1452],{"class":211},[109,24187,874],{"class":126},[109,24189,24190],{"class":111,"line":263},[109,24191,742],{"class":126},[19,24193,24194],{},"输出结果为：size of p=1",[19,24196,24197],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24199,24200],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24083,24202,24204],{"id":24203},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[99,24206,24208],{"className":101,"code":24207,"language":103,"meta":104,"style":104},"#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",[106,24209,24210,24216,24226,24234,24238,24247,24251,24259,24263,24267,24286,24290,24294,24302,24306,24312],{"__ignoreMap":104},[109,24211,24212,24214],{"class":111,"line":112},[109,24213,3317],{"class":122},[109,24215,3320],{"class":278},[109,24217,24218,24220,24222,24224],{"class":111,"line":119},[109,24219,3325],{"class":122},[109,24221,3328],{"class":122},[109,24223,3331],{"class":211},[109,24225,137],{"class":126},[109,24227,24228,24230,24232],{"class":111,"line":140},[109,24229,15867],{"class":122},[109,24231,16742],{"class":211},[109,24233,4022],{"class":126},[109,24235,24236],{"class":111,"line":154},[109,24237,808],{"class":126},[109,24239,24240,24242,24244],{"class":111,"line":161},[109,24241,232],{"class":122},[109,24243,16621],{"class":126},[109,24245,24246],{"class":115},"\u002F\u002F非静态成员变量\n",[109,24248,24249],{"class":111,"line":167},[109,24250,5337],{"class":126},[109,24252,24253,24255,24257],{"class":111,"line":185},[109,24254,1166],{"class":122},[109,24256,1169],{"class":211},[109,24258,803],{"class":126},[109,24260,24261],{"class":111,"line":201},[109,24262,808],{"class":126},[109,24264,24265],{"class":111,"line":206},[109,24266,16486],{"class":126},[109,24268,24269,24271,24273,24275,24277,24279,24281,24283],{"class":111,"line":218},[109,24270,1058],{"class":126},[109,24272,275],{"class":122},[109,24274,24151],{"class":278},[109,24276,2765],{"class":122},[109,24278,7866],{"class":126},[109,24280,275],{"class":122},[109,24282,2635],{"class":126},[109,24284,24285],{"class":115}," \u002F\u002F查看不是空对象时占用多少内存\n",[109,24287,24288],{"class":111,"line":223},[109,24289,158],{"emptyLinePlaceholder":157},[109,24291,24292],{"class":111,"line":229},[109,24293,742],{"class":126},[109,24295,24296,24298,24300],{"class":111,"line":244},[109,24297,123],{"class":122},[109,24299,212],{"class":211},[109,24301,803],{"class":126},[109,24303,24304],{"class":111,"line":258},[109,24305,808],{"class":126},[109,24307,24308,24310],{"class":111,"line":263},[109,24309,1452],{"class":211},[109,24311,874],{"class":126},[109,24313,24314],{"class":111,"line":269},[109,24315,742],{"class":126},[19,24317,24318],{},"输出结果：size of p=4",[19,24320,24321],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[765,24323,24324],{},[30,24325,24326],{},"如果加上非静态成员变量，Person类修改如下",[99,24328,24330],{"className":101,"code":24329,"language":103,"meta":104,"style":104},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[106,24331,24332,24338,24342,24348,24356,24360,24365],{"__ignoreMap":104},[109,24333,24334,24336],{"class":111,"line":112},[109,24335,15867],{"class":122},[109,24337,16344],{"class":211},[109,24339,24340],{"class":111,"line":119},[109,24341,808],{"class":126},[109,24343,24344,24346],{"class":111,"line":140},[109,24345,232],{"class":122},[109,24347,22565],{"class":126},[109,24349,24350,24352,24354],{"class":111,"line":154},[109,24351,405],{"class":122},[109,24353,173],{"class":122},[109,24355,22572],{"class":126},[109,24357,24358],{"class":111,"line":161},[109,24359,5337],{"class":126},[109,24361,24362],{"class":111,"line":167},[109,24363,24364],{"class":115},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[109,24366,24367,24369,24371,24373,24375,24377],{"class":111,"line":185},[109,24368,123],{"class":122},[109,24370,16742],{"class":211},[109,24372,23585],{"class":126},[109,24374,130],{"class":122},[109,24376,1314],{"class":133},[109,24378,137],{"class":126},[19,24380,24381],{},"输出结果：4",[19,24383,24384],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[765,24386,24387],{"start":119},[30,24388,24389],{},"加上非静态成员函数",[99,24391,24393],{"className":101,"code":24392,"language":103,"meta":104,"style":104},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[106,24394,24395,24402,24406,24412,24420,24424,24428,24432],{"__ignoreMap":104},[109,24396,24397,24399],{"class":111,"line":112},[109,24398,15867],{"class":122},[109,24400,24401],{"class":211},"  Person\n",[109,24403,24404],{"class":111,"line":119},[109,24405,808],{"class":126},[109,24407,24408,24410],{"class":111,"line":140},[109,24409,232],{"class":122},[109,24411,22565],{"class":126},[109,24413,24414,24416,24418],{"class":111,"line":154},[109,24415,16082],{"class":122},[109,24417,800],{"class":211},[109,24419,803],{"class":126},[109,24421,24422],{"class":111,"line":161},[109,24423,1335],{"class":126},[109,24425,24426],{"class":111,"line":167},[109,24427,158],{"emptyLinePlaceholder":157},[109,24429,24430],{"class":111,"line":185},[109,24431,1361],{"class":126},[109,24433,24434],{"class":111,"line":201},[109,24435,5337],{"class":126},[19,24437,24438],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[765,24440,24441],{"start":140},[30,24442,24443],{},"加上静态成员函数",[99,24445,24447],{"className":101,"code":24446,"language":103,"meta":104,"style":104},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[106,24448,24449,24455,24459,24465,24473,24477,24481,24485,24496,24500,24504,24508],{"__ignoreMap":104},[109,24450,24451,24453],{"class":111,"line":112},[109,24452,15867],{"class":122},[109,24454,24401],{"class":211},[109,24456,24457],{"class":111,"line":119},[109,24458,808],{"class":126},[109,24460,24461,24463],{"class":111,"line":140},[109,24462,232],{"class":122},[109,24464,22565],{"class":126},[109,24466,24467,24469,24471],{"class":111,"line":154},[109,24468,16082],{"class":122},[109,24470,800],{"class":211},[109,24472,803],{"class":126},[109,24474,24475],{"class":111,"line":161},[109,24476,1335],{"class":126},[109,24478,24479],{"class":111,"line":167},[109,24480,158],{"emptyLinePlaceholder":157},[109,24482,24483],{"class":111,"line":185},[109,24484,1361],{"class":126},[109,24486,24487,24489,24491,24494],{"class":111,"line":201},[109,24488,405],{"class":122},[109,24490,23740],{"class":122},[109,24492,24493],{"class":211}," func1",[109,24495,803],{"class":126},[109,24497,24498],{"class":111,"line":206},[109,24499,1335],{"class":126},[109,24501,24502],{"class":111,"line":218},[109,24503,158],{"emptyLinePlaceholder":157},[109,24505,24506],{"class":111,"line":223},[109,24507,1361],{"class":126},[109,24509,24510],{"class":111,"line":229},[109,24511,5337],{"class":126},[19,24513,24381],{},[19,24515,24516],{},"解释：静态成员函数也不属于类上",[1467,24518,9000],{},{"title":104,"searchDepth":119,"depth":119,"links":24520},[24521,24527],{"id":15818,"depth":119,"text":15819,"children":24522},[24523,24524,24525,24526],{"id":15822,"depth":140,"text":15823},{"id":16547,"depth":140,"text":16548},{"id":16719,"depth":140,"text":16720},{"id":17178,"depth":140,"text":17179},{"id":19550,"depth":119,"text":19551,"children":24528},[24529,24530,24531,24532,24533,24534,24535,24536,24537],{"id":19562,"depth":140,"text":19563},{"id":19855,"depth":140,"text":19856},{"id":20346,"depth":140,"text":20347},{"id":21443,"depth":140,"text":21444},{"id":21866,"depth":140,"text":21867},{"id":22345,"depth":140,"text":22346},{"id":22720,"depth":140,"text":22721},{"id":23133,"depth":140,"text":23134},{"id":24070,"depth":140,"text":24071},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15783,"description":24538},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24545,"title":103,"body":24546,"description":24550,"extension":1476,"meta":24551,"navigation":157,"path":24553,"seo":24554,"stem":24555,"__hash__":24556},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24547,"toc":24548},[],{"title":104,"searchDepth":119,"depth":119,"links":24549},[],null,{"category":24552},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":103,"description":24550},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24558,"title":24559,"body":24560,"description":104,"extension":1476,"meta":25151,"navigation":157,"path":25152,"seo":25153,"stem":25154,"__hash__":25155},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24561,"toc":25133},[24562,24565,24569,24572,24575,24578,24596,24601,24604,24607,24610,24613,24618,24621,24626,24629,24632,24636,24639,24642,24648,24651,24669,24673,24677,24680,24685,24688,24692,24695,24708,24711,24715,24718,24721,24724,24749,24752,24761,24772,24787,24819,24823,24830,24838,24842,24845,24848,24853,24857,24860,24863,24868,24871,24875,24878,24881,24886,24889,24893,24898,24902,24969,24973,24976,24979,24982,24985,24988,24994,25015,25018,25032,25041,25045,25048,25051,25056,25059,25064,25069,25072,25075,25080,25085,25088,25093,25098,25101,25106,25111,25114,25117,25122,25125,25130],[10,24563,24559],{"id":24564},"_1强化学习基本认识",[14,24566,24568],{"id":24567},"_11什么是强化学习","1.1.什么是强化学习",[19,24570,24571],{},"强化学习有两部分组成：智能体和环境；",[19,24573,24574],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24576,24577],{},"强化学习与监督学习的区别:",[765,24579,24580,24583,24586,24589],{},[30,24581,24582],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[30,24584,24585],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[30,24587,24588],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[30,24590,24591,24592,24595],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[23,24593,24594],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24597,24598],{},[938,24599],{"alt":104,"src":24600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24602,24603],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24605,24606],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24608,24609],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24611,24612],{},"获取奖励",[19,24614,24615],{},[938,24616],{"alt":104,"src":24617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24619,24620],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24622,24623],{},[938,24624],{"alt":104,"src":24625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24627,24628],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24630,24631],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24633,24635],{"id":24634},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24637,24638],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24640,24641],{},"具身智能中的应用",[19,24643,24644,24647],{},[23,24645,24646],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24649,24650],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24652,24653,24654,24657,24658,24661,24662,24665,24666],{},"机器人是",[23,24655,24656],{},"躯体","，深度学习是",[23,24659,24660],{},"神经元****网络","，VLA是",[23,24663,24664],{},"通用的行为逻辑","，而强化学习是",[23,24667,24668],{},"教练",[14,24670,24672],{"id":24671},"_13序列决策","1.3.序列决策",[51,24674,24676],{"id":24675},"_131智能体与环境","1.3.1.智能体与环境",[19,24678,24679],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24681,24682],{},[938,24683],{"alt":104,"src":24684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24686,24687],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[51,24689,24691],{"id":24690},"_132奖励","1.3.2.奖励",[19,24693,24694],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24696,24697,24698,24707],{},"取某个策略的表现如何。强化学习的目的就是",[23,24699,24700,24701,24706],{},"最大化",[23,24702,24703],{},[23,24704,24705],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24709,24710],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[51,24712,24714],{"id":24713},"_133序列决策","1.3.3.序列决策",[19,24716,24717],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24719,24720],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24722,24723],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24725,24726,24730,24731,24733,24734,24736,24737,24739,24740,14968,24743,14968,24746],{},[24727,24728,24729],"em",{},"Ht"," = ",[24727,24732,2128],{},"1*, a",[24727,24735,1755],{},", r",[24727,24738,1755],{},", . . . ,* ",[24727,24741,24742],{},"ot",[24727,24744,24745],{},", at ,",[24727,24747,24748],{},"rt",[19,24750,24751],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24753,24754,24730,24757,285,24759,290],{},[24727,24755,24756],{},"st",[24727,24758,1595],{},[24727,24760,24729],{},[19,24762,24763,24764,24767,24768,24771],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[23,24765,24766],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[23,24769,24770],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24773,24774,24775,24778,24779,24782,24783,24786],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[23,24776,24777],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[23,24780,24781],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24727,24784,24785],{},"S, A, T, R, Ω, O, γ",")。",[19,24788,24789,24790,24792,24793,24795,24796,714,24798,24801,24802,24804,24805,714,24808,24811,24812,24814,24815,24818],{},"其中 ",[24727,24791,2221],{}," 表示状态空间，为隐变量，",[24727,24794,1770],{}," 为动作空间，",[24727,24797,2246],{},[24727,24799,24800],{},"s ′ |s, a",") 为状态转移概率，",[24727,24803,2196],{}," 为奖励函数，",[24727,24806,24807],{},"Ω",[24727,24809,24810],{},"o|s, a",") 为观测概率，",[24727,24813,2122],{}," 为观测空间，",[24727,24816,24817],{},"γ"," 为折扣因子。",[14,24820,24822],{"id":24821},"_14动作空间","1.4.动作空间",[19,24824,24825,24826,24829],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[23,24827,24828],{},"动作空间"," ，动作空间分为:",[765,24831,24832,24835],{},[30,24833,24834],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[30,24836,24837],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24839,24841],{"id":24840},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24843,24844],{},"由策略、价值函数、模型三部分组成",[19,24846,24847],{},"这三者组成马尔可夫决策过程",[19,24849,24850],{},[938,24851],{"alt":104,"src":24852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[51,24854,24856],{"id":24855},"_151策略","1.5.1.策略",[19,24858,24859],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24861,24862],{},"策略可分为两种：",[19,24864,24865],{},[938,24866],{"alt":104,"src":24867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24869,24870],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[51,24872,24874],{"id":24873},"_152价值函数","1.5.2.价值函数",[19,24876,24877],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24879,24880],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24882,24883],{},[938,24884],{"alt":104,"src":24885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24887,24888],{},"进入某个状态采取的最优动作可以通过Q函数得到",[51,24890,24892],{"id":24891},"_153模型","1.5.3.模型",[19,24894,24895],{},[938,24896],{"alt":104,"src":24897},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24899,24901],{"id":24900},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1677,24903,24904,24915],{},[1680,24905,24906],{},[1683,24907,24908,24912],{},[1686,24909,24911],{"align":24910},"left","类型",[1686,24913,24914],{"align":24910},"特点",[1723,24916,24917,24927,24937,24947,24959],{},[1683,24918,24919,24924],{},[1728,24920,24921],{"align":24910},[23,24922,24923],{},"基于价值的智能体",[1728,24925,24926],{"align":24910},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1683,24928,24929,24934],{},[1728,24930,24931],{"align":24910},[23,24932,24933],{},"基于策略的智能体",[1728,24935,24936],{"align":24910},"直接学习策略，没有学习价值函数",[1683,24938,24939,24944],{},[1728,24940,24941],{"align":24910},[23,24942,24943],{},"演员-评论员智能体",[1728,24945,24946],{"align":24910},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1683,24948,24949,24954],{},[1728,24950,24951],{"align":24910},[23,24952,24953],{},"有模型强化学习智能体",[1728,24955,24956],{"align":24910},[938,24957],{"alt":104,"src":24958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1683,24960,24961,24966],{},[1728,24962,24963],{"align":24910},[23,24964,24965],{},"免模型强化学习智能体",[1728,24967,24968],{"align":24910},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24970,24972],{"id":24971},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24974,24975],{},"学习和规划是序列决策的两个基本问题",[19,24977,24978],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24980,24981],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24983,24984],{},"强化学习用到的库：Gym",[19,24986,24987],{},"Gym可以检验强化学习算法的优劣",[19,24989,24990,24993],{},[23,24991,24992],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[99,24995,24999],{"className":24996,"code":24997,"language":24998,"meta":104,"style":104},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[106,25000,25001],{"__ignoreMap":104},[109,25002,25003,25006,25009,25012],{"class":111,"line":112},[109,25004,25005],{"class":211},"pip",[109,25007,25008],{"class":278}," install",[109,25010,25011],{"class":278}," gym==",[109,25013,25014],{"class":133},"0.25.2\n",[19,25016,25017],{},"显示图形界面需要",[99,25019,25021],{"className":24996,"code":25020,"language":24998,"meta":104,"style":104},"pip install pygame\n",[106,25022,25023],{"__ignoreMap":104},[109,25024,25025,25027,25029],{"class":111,"line":112},[109,25026,25005],{"class":211},[109,25028,25008],{"class":278},[109,25030,25031],{"class":278}," pygame\n",[19,25033,25034,25035],{},"有关Gym库的相关文档介绍：",[1776,25036,25040],{"href":25037,"rel":25038},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25039],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25042,25044],{"id":25043},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25046,25047],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25049,25050],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25052,25053],{},[938,25054],{"alt":104,"src":25055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25057,25058],{},"折扣率需要自己来设定",[19,25060,25061],{},[938,25062],{"alt":104,"src":25063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[765,25065,25066],{},[30,25067,25068],{},"状态转移函数：",[19,25070,25071],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25073,25074],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25076,25077],{},[938,25078],{"alt":104,"src":25079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[765,25081,25082],{"start":119},[30,25083,25084],{},"动作价值函数：",[19,25086,25087],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25089,25090],{},[938,25091],{"alt":104,"src":25092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[765,25094,25095],{"start":140},[30,25096,25097],{},"最优动作价值函数：",[19,25099,25100],{},"这个函数是对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,25102,25103],{},[938,25104],{"alt":104,"src":25105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[765,25107,25108],{"start":154},[30,25109,25110],{},"状态价值函数:",[19,25112,25113],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25115,25116],{},"它衡量的是“一个具体动作”的长期价值",[19,25118,25119],{},[938,25120],{"alt":104,"src":25121},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25123,25124],{},"几个价值函数之间的比较：",[19,25126,25127],{},[938,25128],{"alt":104,"src":25129},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1467,25131,25132],{},"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":104,"searchDepth":119,"depth":119,"links":25134},[25135,25136,25137,25142,25143,25148,25149,25150],{"id":24567,"depth":119,"text":24568},{"id":24634,"depth":119,"text":24635},{"id":24671,"depth":119,"text":24672,"children":25138},[25139,25140,25141],{"id":24675,"depth":140,"text":24676},{"id":24690,"depth":140,"text":24691},{"id":24713,"depth":140,"text":24714},{"id":24821,"depth":119,"text":24822},{"id":24840,"depth":119,"text":24841,"children":25144},[25145,25146,25147],{"id":24855,"depth":140,"text":24856},{"id":24873,"depth":140,"text":24874},{"id":24891,"depth":140,"text":24892},{"id":24900,"depth":119,"text":24901},{"id":24971,"depth":119,"text":24972},{"id":25043,"depth":119,"text":25044},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24559,"description":104},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25157,"title":25158,"body":25159,"description":25166,"extension":1476,"meta":25177,"navigation":157,"path":25178,"seo":25179,"stem":25180,"__hash__":25181},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25160,"toc":25175},[25161,25164,25167,25172],[10,25162,25158],{"id":25163},"_2马尔可夫决策过程",[19,25165,25166],{},"这是强化学习的基本框架",[19,25168,25169],{},[938,25170],{"alt":104,"src":25171},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25173,25174],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":104,"searchDepth":119,"depth":119,"links":25176},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25158,"description":25166},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25183,"title":25184,"body":25185,"description":104,"extension":1476,"meta":25301,"navigation":157,"path":25302,"seo":25303,"stem":25304,"__hash__":25305},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25186,"toc":25296},[25187,25190,25194,25197,25202,25207,25210,25215,25218,25223,25226,25230,25235,25238,25243,25248,25253,25256,25260,25265,25268,25273,25278,25283,25288,25291],[10,25188,25184],{"id":25189},"_3动作价值函数",[14,25191,25193],{"id":25192},"_31dqn","3.1.DQN",[19,25195,25196],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25198,25199],{},[938,25200],{"alt":104,"src":25201},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25203,25204],{},[938,25205],{"alt":104,"src":25206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25208,25209],{},"DQN算法的描述：",[19,25211,25212],{},[938,25213],{"alt":104,"src":25214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25216,25217],{},"这里的Dense指的是全连接层",[19,25219,25220],{},[938,25221],{"alt":104,"src":25222},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25224,25225],{},"当前观测的状态为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,25227,25229],{"id":25228},"_32dqn的举例","3.2.DQN的举例",[19,25231,25232],{},[938,25233],{"alt":104,"src":25234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25236,25237],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25239,25240],{},[938,25241],{"alt":104,"src":25242},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25244,25245],{},[938,25246],{"alt":104,"src":25247},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25249,25250],{},[938,25251],{"alt":104,"src":25252},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25254,25255],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25257,25259],{"id":25258},"_33td算法","3.3.TD算法",[19,25261,25262],{},[938,25263],{"alt":104,"src":25264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25266,25267],{},"强化学习TD算法公式的粗略解释：",[19,25269,25270],{},[938,25271],{"alt":104,"src":25272},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25274,25275],{},[938,25276],{"alt":104,"src":25277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25279,25280],{},[938,25281],{"alt":104,"src":25282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25284,25285],{},[938,25286],{"alt":104,"src":25287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25289,25290],{},"TD算法总结：",[19,25292,25293],{},[938,25294],{"alt":104,"src":25295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":104,"searchDepth":119,"depth":119,"links":25297},[25298,25299,25300],{"id":25192,"depth":119,"text":25193},{"id":25228,"depth":119,"text":25229},{"id":25258,"depth":119,"text":25259},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25184,"description":104},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25307,"title":25308,"body":25309,"description":104,"extension":1476,"meta":25542,"navigation":157,"path":25543,"seo":25544,"stem":25545,"__hash__":25546},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25310,"toc":25538},[25311,25314,25318,25321,25324,25329,25334,25337,25342,25347,25350,25355,25358,25363,25366,25371,25374,25379,25382,25387,25392,25395,25400,25403,25406,25411,25414,25419,25424,25428,25431,25434,25439,25444,25447,25452,25457,25460,25465,25468,25471,25476,25479,25484,25487,25492,25497,25500,25505,25510,25513,25518,25521,25526,25529],[10,25312,25308],{"id":25313},"_4策略学习",[14,25315,25317],{"id":25316},"_41概念描述","4.1.概念描述",[19,25319,25320],{},"用神经网络（策略网络）近似策略函数",[19,25322,25323],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25325,25326],{},[938,25327],{"alt":104,"src":25328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25330,25331],{},[938,25332],{"alt":104,"src":25333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25335,25336],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25338,25339],{},[938,25340],{"alt":104,"src":25341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25343,25344],{},[938,25345],{"alt":104,"src":25346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25348,25349],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25351,25352],{},[938,25353],{"alt":104,"src":25354},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25356,25357],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25359,25360],{},[938,25361],{"alt":104,"src":25362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25364,25365],{},"改进theta要用到策略梯度算法",[19,25367,25368],{},[938,25369],{"alt":104,"src":25370},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25372,25373],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25375,25376],{},[938,25377],{"alt":104,"src":25378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25380,25381],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25383,25384],{},[938,25385],{"alt":104,"src":25386},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25388,25389],{},[938,25390],{"alt":104,"src":25391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25393,25394],{},"梯度公式总结：",[19,25396,25397],{},[938,25398],{"alt":104,"src":25399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25401,25402],{},"两个公式的分别应用场景：",[19,25404,25405],{},"对于离散的动作：",[19,25407,25408],{},[938,25409],{"alt":104,"src":25410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25412,25413],{},"对于连续的动作：",[19,25415,25416],{},[938,25417],{"alt":104,"src":25418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25420,25421],{},[938,25422],{"alt":104,"src":25423},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25425,25427],{"id":25426},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25429,25430],{},"使用蒙特卡洛来近似计算策略梯度",[19,25432,25433],{},"蒙特卡洛法的解释如下：",[19,25435,25436],{},[938,25437],{"alt":104,"src":25438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25440,25441],{},[938,25442],{"alt":104,"src":25443},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25445,25446],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[765,25448,25449],{},[30,25450,25451],{},"方法一：reinforce算法",[19,25453,25454],{},[938,25455],{"alt":104,"src":25456},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25458,25459],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[765,25461,25462],{"start":119},[30,25463,25464],{},"方法二：actor-critic算法",[19,25466,25467],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25469,25470],{},"两个网络的构建：",[19,25472,25473],{},[938,25474],{"alt":104,"src":25475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25477,25478],{},"actor网路：",[19,25480,25481],{},[938,25482],{"alt":104,"src":25483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25485,25486],{},"critic网络",[19,25488,25489],{},[938,25490],{"alt":104,"src":25491},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[765,25493,25494],{"start":140},[30,25495,25496],{},"网络的训练",[19,25498,25499],{},"网络描述",[19,25501,25502],{},[938,25503],{"alt":104,"src":25504},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25506,25507],{},[938,25508],{"alt":104,"src":25509},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25511,25512],{},"TD算法更新梯度：",[19,25514,25515],{},[938,25516],{"alt":104,"src":25517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25519,25520],{},"策略网络更新梯度：",[19,25522,25523],{},[938,25524],{"alt":104,"src":25525},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25527,25528],{},"训练整个流程的具体描述：",[19,25530,25531,25534,25535],{},[938,25532],{"alt":104,"src":25533},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[938,25536],{"alt":104,"src":25537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":104,"searchDepth":119,"depth":119,"links":25539},[25540,25541],{"id":25316,"depth":119,"text":25317},{"id":25426,"depth":119,"text":25427},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25308,"description":104},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25548,"title":25549,"body":25550,"description":25557,"extension":1476,"meta":25607,"navigation":157,"path":25608,"seo":25609,"stem":25610,"__hash__":25611},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25551,"toc":25603},[25552,25555,25558,25562,25565,25570,25574,25577,25582,25585,25590,25595,25598],[10,25553,25549],{"id":25554},"_5alphago算法",[19,25556,25557],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25559,25561],{"id":25560},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25563,25564],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25566,25567],{},[938,25568],{"alt":104,"src":25569},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25571,25573],{"id":25572},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25575,25576],{},"采用强化学习的方式训练策略网络",[19,25578,25579],{},[938,25580],{"alt":104,"src":25581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25583,25584],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25586,25587],{},[938,25588],{"alt":104,"src":25589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25591,25592],{},[938,25593],{"alt":104,"src":25594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25596,25597],{},"强化学习训练策略网络的总结：",[19,25599,25600],{},[938,25601],{"alt":104,"src":25602},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":104,"searchDepth":119,"depth":119,"links":25604},[25605,25606],{"id":25560,"depth":119,"text":25561},{"id":25572,"depth":119,"text":25573},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25549,"description":25557},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25613,"title":25614,"body":25615,"description":25622,"extension":1476,"meta":25625,"navigation":157,"path":25626,"seo":25627,"stem":25628,"__hash__":25629},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25616,"toc":25623},[25617,25620],[10,25618,25614],{"id":25619},"_6价值网络",[19,25621,25622],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":104,"searchDepth":119,"depth":119,"links":25624},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25614,"description":25622},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25631,"title":25632,"body":25633,"description":25637,"extension":1476,"meta":25638,"navigation":157,"path":25639,"seo":25640,"stem":25641,"__hash__":25642},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25634,"toc":25635},[],{"title":104,"searchDepth":119,"depth":119,"links":25636},[],"记录自己的强化学习笔记。",{"category":24552},"\u002Fwiki\u002F2025-12-04",{"title":25632,"description":25637},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25644,"title":25645,"body":25646,"description":24550,"extension":1476,"meta":25685,"navigation":157,"path":25686,"seo":25687,"stem":25688,"__hash__":25689},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25647,"toc":25683},[25648,25651,25654,25660,25663,25669,25672,25677,25680],[10,25649,25645],{"id":25650},"_1-项目概览与官方资源",[19,25652,25653],{},"官方文档：",[19,25655,25656],{},[1776,25657,25658],{"href":25658,"rel":25659},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25039],[19,25661,25662],{},"官方代码仓库：",[19,25664,25665],{},[1776,25666,25667],{"href":25667,"rel":25668},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25039],[19,25670,25671],{},"复现大体流程：",[19,25673,25674],{},[938,25675],{"alt":104,"src":25676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25678,25679],{},"本教程的目标是打通这条链路：",[19,25681,25682],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":104,"searchDepth":119,"depth":119,"links":25684},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25645,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25691,"title":25692,"body":25693,"description":24550,"extension":1476,"meta":25809,"navigation":157,"path":25810,"seo":25811,"stem":25812,"__hash__":25813},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25694,"toc":25804},[25695,25698,25702,25705,25712,25716,25719,25728,25738,25742,25772,25775,25801],[10,25696,25692],{"id":25697},"_2-环境准备与设备连接",[14,25699,25701],{"id":25700},"_21-系统与环境","2.1 系统与环境",[19,25703,25704],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25706,25707,25708,25711],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[106,25709,25710],{},"lerobot"," 依赖。",[14,25713,25715],{"id":25714},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25717,25718],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[99,25720,25722],{"className":24996,"code":25721,"language":24998,"meta":104,"style":104},"lerobot-find-out\n",[106,25723,25724],{"__ignoreMap":104},[109,25725,25726],{"class":111,"line":112},[109,25727,25721],{"class":211},[19,25729,25730,25731,1750,25734,25737],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[106,25732,25733],{},"\u002Fdev\u002FttyACM0",[106,25735,25736],{},"\u002Fdev\u002FttyACM1","）。",[14,25739,25741],{"id":25740},"_23-串口授权","2.3 串口授权",[99,25743,25745],{"className":24996,"code":25744,"language":24998,"meta":104,"style":104},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[106,25746,25747,25761],{"__ignoreMap":104},[109,25748,25749,25752,25755,25758],{"class":111,"line":112},[109,25750,25751],{"class":211},"sudo",[109,25753,25754],{"class":278}," chmod",[109,25756,25757],{"class":133}," 666",[109,25759,25760],{"class":278}," \u002Fdev\u002FttyACM0\n",[109,25762,25763,25765,25767,25769],{"class":111,"line":119},[109,25764,25751],{"class":211},[109,25766,25754],{"class":278},[109,25768,25757],{"class":133},[109,25770,25771],{"class":278}," \u002Fdev\u002FttyACM1\n",[19,25773,25774],{},"说明：",[27,25776,25777,25782,25788,25798],{},[30,25778,25779,25781],{},[106,25780,25751],{},"：以 root 权限执行命令。",[30,25783,25784,25787],{},[106,25785,25786],{},"chmod","：修改设备节点权限。",[30,25789,25790,25793,25794,25797],{},[106,25791,25792],{},"666","：",[106,25795,25796],{},"rw-rw-rw-","，所有用户可读写。",[30,25799,25800],{},"串口号必须替换为你机器上的真实端口。",[1467,25802,25803],{},"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":104,"searchDepth":119,"depth":119,"links":25805},[25806,25807,25808],{"id":25700,"depth":119,"text":25701},{"id":25714,"depth":119,"text":25715},{"id":25740,"depth":119,"text":25741},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25692,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25815,"title":25816,"body":25817,"description":24550,"extension":1476,"meta":25978,"navigation":157,"path":25979,"seo":25980,"stem":25981,"__hash__":25982},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25818,"toc":25974},[25819,25823,25827,25833,25836,25893,25896,25900,25903,25971],[10,25820,25822],{"id":25821},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25824,25826],{"id":25825},"_31-配置电机-id","3.1 配置电机 ID",[19,25828,25829,25830,25832],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[106,25831,1755],{},"，需要改成机械臂链路里不冲突的编号。",[19,25834,25835],{},"方式一：用 LeRobot 命令逐步写入。",[99,25837,25839],{"className":24996,"code":25838,"language":24998,"meta":104,"style":104},"# 主臂舵机配置 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",[106,25840,25841,25846,25854,25861,25866,25870,25875,25881,25888],{"__ignoreMap":104},[109,25842,25843],{"class":111,"line":112},[109,25844,25845],{"class":115},"# 主臂舵机配置 ID\n",[109,25847,25848,25851],{"class":111,"line":119},[109,25849,25850],{"class":211},"lerobot-setup-motors",[109,25852,25853],{"class":133}," \\\n",[109,25855,25856,25859],{"class":111,"line":140},[109,25857,25858],{"class":133},"  --teleop.type=so101_leader",[109,25860,25853],{"class":133},[109,25862,25863],{"class":111,"line":154},[109,25864,25865],{"class":133},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[109,25867,25868],{"class":111,"line":161},[109,25869,158],{"emptyLinePlaceholder":157},[109,25871,25872],{"class":111,"line":167},[109,25873,25874],{"class":115},"# 从臂舵机配置 ID\n",[109,25876,25877,25879],{"class":111,"line":185},[109,25878,25850],{"class":211},[109,25880,25853],{"class":133},[109,25882,25883,25886],{"class":111,"line":201},[109,25884,25885],{"class":133},"  --robot.type=so101_follower",[109,25887,25853],{"class":133},[109,25889,25890],{"class":111,"line":206},[109,25891,25892],{"class":133},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25894,25895],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25897,25899],{"id":25898},"_32-机械臂校准","3.2 机械臂校准",[19,25901,25902],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[99,25904,25906],{"className":24996,"code":25905,"language":24998,"meta":104,"style":104},"# 主臂校准\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",[106,25907,25908,25913,25920,25926,25933,25938,25942,25947,25953,25959,25966],{"__ignoreMap":104},[109,25909,25910],{"class":111,"line":112},[109,25911,25912],{"class":115},"# 主臂校准\n",[109,25914,25915,25918],{"class":111,"line":119},[109,25916,25917],{"class":211},"lerobot-calibrate",[109,25919,25853],{"class":133},[109,25921,25922,25924],{"class":111,"line":140},[109,25923,25858],{"class":133},[109,25925,25853],{"class":133},[109,25927,25928,25931],{"class":111,"line":154},[109,25929,25930],{"class":133},"  --teleop.port=\u002Fdev\u002FttyACM0",[109,25932,25853],{"class":133},[109,25934,25935],{"class":111,"line":161},[109,25936,25937],{"class":133},"  --teleop.id=my_awesome_leader_arm\n",[109,25939,25940],{"class":111,"line":167},[109,25941,158],{"emptyLinePlaceholder":157},[109,25943,25944],{"class":111,"line":185},[109,25945,25946],{"class":115},"# 从臂校准\n",[109,25948,25949,25951],{"class":111,"line":201},[109,25950,25917],{"class":211},[109,25952,25853],{"class":133},[109,25954,25955,25957],{"class":111,"line":206},[109,25956,25885],{"class":133},[109,25958,25853],{"class":133},[109,25960,25961,25964],{"class":111,"line":218},[109,25962,25963],{"class":133},"  --robot.port=\u002Fdev\u002FttyACM1",[109,25965,25853],{"class":133},[109,25967,25968],{"class":111,"line":223},[109,25969,25970],{"class":133},"  --robot.id=my_awesome_follower_arm\n",[1467,25972,25973],{},"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":104,"searchDepth":119,"depth":119,"links":25975},[25976,25977],{"id":25825,"depth":119,"text":25826},{"id":25898,"depth":119,"text":25899},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25816,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25984,"title":25985,"body":25986,"description":24550,"extension":1476,"meta":26177,"navigation":157,"path":26178,"seo":26179,"stem":26180,"__hash__":26181},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25987,"toc":26173},[25988,25991,25995,26042,26046,26059,26122,26125,26170],[10,25989,25985],{"id":25990},"_4-遥操与相机接入",[14,25992,25994],{"id":25993},"_41-不带相机遥操","4.1 不带相机遥操",[99,25996,25998],{"className":24996,"code":25997,"language":24998,"meta":104,"style":104},"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",[106,25999,26000,26007,26013,26019,26026,26032,26038],{"__ignoreMap":104},[109,26001,26002,26005],{"class":111,"line":112},[109,26003,26004],{"class":211},"lerobot-teleoperate",[109,26006,25853],{"class":133},[109,26008,26009,26011],{"class":111,"line":119},[109,26010,25885],{"class":133},[109,26012,25853],{"class":133},[109,26014,26015,26017],{"class":111,"line":140},[109,26016,25963],{"class":133},[109,26018,25853],{"class":133},[109,26020,26021,26024],{"class":111,"line":154},[109,26022,26023],{"class":133},"  --robot.id=my_awesome_follower_arm",[109,26025,25853],{"class":133},[109,26027,26028,26030],{"class":111,"line":161},[109,26029,25858],{"class":133},[109,26031,25853],{"class":133},[109,26033,26034,26036],{"class":111,"line":167},[109,26035,25930],{"class":133},[109,26037,25853],{"class":133},[109,26039,26040],{"class":111,"line":185},[109,26041,25937],{"class":133},[14,26043,26045],{"id":26044},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[99,26047,26049],{"className":24996,"code":26048,"language":24998,"meta":104,"style":104},"lerobot-find-cameras opencv\n",[106,26050,26051],{"__ignoreMap":104},[109,26052,26053,26056],{"class":111,"line":112},[109,26054,26055],{"class":211},"lerobot-find-cameras",[109,26057,26058],{"class":278}," opencv\n",[99,26060,26062],{"className":24996,"code":26061,"language":24998,"meta":104,"style":104},"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",[106,26063,26064,26070,26076,26082,26088,26098,26104,26110,26117],{"__ignoreMap":104},[109,26065,26066,26068],{"class":111,"line":112},[109,26067,26004],{"class":211},[109,26069,25853],{"class":133},[109,26071,26072,26074],{"class":111,"line":119},[109,26073,25885],{"class":133},[109,26075,25853],{"class":133},[109,26077,26078,26080],{"class":111,"line":140},[109,26079,25963],{"class":133},[109,26081,25853],{"class":133},[109,26083,26084,26086],{"class":111,"line":154},[109,26085,26023],{"class":133},[109,26087,25853],{"class":133},[109,26089,26090,26093,26096],{"class":111,"line":161},[109,26091,26092],{"class":133},"  --robot.cameras=",[109,26094,26095],{"class":278},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[109,26097,25853],{"class":133},[109,26099,26100,26102],{"class":111,"line":167},[109,26101,25858],{"class":133},[109,26103,25853],{"class":133},[109,26105,26106,26108],{"class":111,"line":185},[109,26107,25930],{"class":133},[109,26109,25853],{"class":133},[109,26111,26112,26115],{"class":111,"line":201},[109,26113,26114],{"class":133},"  --teleop.id=my_awesome_leader_arm",[109,26116,25853],{"class":133},[109,26118,26119],{"class":111,"line":206},[109,26120,26121],{"class":133},"  --display_data=true\n",[19,26123,26124],{},"相机参数说明：",[27,26126,26127,26133,26139,26148,26158,26164],{},[30,26128,26129,26132],{},[106,26130,26131],{},"front","：相机名称。",[30,26134,26135,26138],{},[106,26136,26137],{},"type: opencv","：相机驱动类型。",[30,26140,26141,26144,26145,25737],{},[106,26142,26143],{},"index_or_path","：设备编号或设备路径（如 ",[106,26146,26147],{},"\u002Fdev\u002Fvideo4",[30,26149,26150,26153,26154,26157],{},[106,26151,26152],{},"width"," \u002F ",[106,26155,26156],{},"height","：图像分辨率。",[30,26159,26160,26163],{},[106,26161,26162],{},"fps","：采样帧率。",[30,26165,26166,26169],{},[106,26167,26168],{},"--display_data=true","：启用实时可视化。",[1467,26171,26172],{},"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":104,"searchDepth":119,"depth":119,"links":26174},[26175,26176],{"id":25993,"depth":119,"text":25994},{"id":26044,"depth":119,"text":26045},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25985,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26183,"title":26184,"body":26185,"description":24550,"extension":1476,"meta":26357,"navigation":157,"path":26358,"seo":26359,"stem":26360,"__hash__":26361},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26186,"toc":26352},[26187,26191,26195,26200,26205,26208,26250,26256,26260,26309,26314,26318,26321,26329,26334,26339,26344,26349],[10,26188,26190],{"id":26189},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26192,26194],{"id":26193},"_51-生成访问令牌","5.1 生成访问令牌",[19,26196,26197],{},[938,26198],{"alt":104,"src":26199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26201,26202],{},[938,26203],{"alt":104,"src":26204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26206,26207],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[99,26209,26211],{"className":24996,"code":26210,"language":24998,"meta":104,"style":104},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[106,26212,26213,26226],{"__ignoreMap":104},[109,26214,26215,26218,26221,26223],{"class":111,"line":112},[109,26216,26217],{"class":122},"export",[109,26219,26220],{"class":126}," HF_TOKEN",[109,26222,130],{"class":122},[109,26224,26225],{"class":278},"\"your_huggingface_token\"\n",[109,26227,26228,26231,26234,26237,26240,26242,26245,26247],{"class":111,"line":119},[109,26229,26230],{"class":211},"hf",[109,26232,26233],{"class":278}," auth",[109,26235,26236],{"class":278}," login",[109,26238,26239],{"class":133}," --token",[109,26241,11042],{"class":278},[109,26243,26244],{"class":126},"$HF_TOKEN",[109,26246,1789],{"class":278},[109,26248,26249],{"class":133}," --add-to-git-credential\n",[19,26251,26252,26255],{},[106,26253,26254],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26257,26259],{"id":26258},"_52-验证登录","5.2 验证登录",[99,26261,26263],{"className":24996,"code":26262,"language":24998,"meta":104,"style":104},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[106,26264,26265,26296],{"__ignoreMap":104},[109,26266,26267,26270,26272,26275,26277,26279,26282,26285,26288,26291,26294],{"class":111,"line":112},[109,26268,26269],{"class":126},"HF_USER",[109,26271,130],{"class":122},[109,26273,26274],{"class":126},"$(",[109,26276,26230],{"class":211},[109,26278,26233],{"class":278},[109,26280,26281],{"class":278}," whoami",[109,26283,26284],{"class":122}," |",[109,26286,26287],{"class":211}," head",[109,26289,26290],{"class":133}," -n",[109,26292,26293],{"class":133}," 1",[109,26295,1330],{"class":126},[109,26297,26298,26301,26303,26306],{"class":111,"line":119},[109,26299,26300],{"class":133},"echo",[109,26302,11042],{"class":278},[109,26304,26305],{"class":126},"$HF_USER",[109,26307,26308],{"class":278},"\"\n",[19,26310,26311],{},[938,26312],{"alt":104,"src":26313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26315,26317],{"id":26316},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26319,26320],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[27,26322,26323,26326],{},[30,26324,26325],{},"Dataset Repo（用于上传演示数据）",[30,26327,26328],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26330,26331],{},[938,26332],{"alt":104,"src":26333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26335,26336],{},[938,26337],{"alt":104,"src":26338},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26340,26341],{},[938,26342],{"alt":104,"src":26343},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26345,26346],{},[938,26347],{"alt":104,"src":26348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1467,26350,26351],{},"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":104,"searchDepth":119,"depth":119,"links":26353},[26354,26355,26356],{"id":26193,"depth":119,"text":26194},{"id":26258,"depth":119,"text":26259},{"id":26316,"depth":119,"text":26317},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26184,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26363,"title":26364,"body":26365,"description":24550,"extension":1476,"meta":26562,"navigation":157,"path":26563,"seo":26564,"stem":26565,"__hash__":26566},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26366,"toc":26557},[26367,26371,26375,26471,26479,26484,26488,26504,26507,26511,26554],[10,26368,26370],{"id":26369},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26372,26374],{"id":26373},"_61-录制示教数据","6.1 录制示教数据",[99,26376,26378],{"className":24996,"code":26377,"language":24998,"meta":104,"style":104},"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",[106,26379,26380,26387,26393,26399,26405,26414,26420,26426,26432,26439,26449,26456,26466],{"__ignoreMap":104},[109,26381,26382,26385],{"class":111,"line":112},[109,26383,26384],{"class":211},"lerobot-record",[109,26386,25853],{"class":133},[109,26388,26389,26391],{"class":111,"line":119},[109,26390,25885],{"class":133},[109,26392,25853],{"class":133},[109,26394,26395,26397],{"class":111,"line":140},[109,26396,25963],{"class":133},[109,26398,25853],{"class":133},[109,26400,26401,26403],{"class":111,"line":154},[109,26402,26023],{"class":133},[109,26404,25853],{"class":133},[109,26406,26407,26409,26412],{"class":111,"line":161},[109,26408,26092],{"class":133},[109,26410,26411],{"class":278},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[109,26413,25853],{"class":133},[109,26415,26416,26418],{"class":111,"line":167},[109,26417,25858],{"class":133},[109,26419,25853],{"class":133},[109,26421,26422,26424],{"class":111,"line":185},[109,26423,25930],{"class":133},[109,26425,25853],{"class":133},[109,26427,26428,26430],{"class":111,"line":201},[109,26429,26114],{"class":133},[109,26431,25853],{"class":133},[109,26433,26434,26437],{"class":111,"line":206},[109,26435,26436],{"class":133},"  --display_data=true",[109,26438,25853],{"class":133},[109,26440,26441,26444,26447],{"class":111,"line":218},[109,26442,26443],{"class":133},"  --dataset.repo_id=",[109,26445,26446],{"class":278},"\"Embodied-AI-6\u002Fso101_test\"",[109,26448,25853],{"class":133},[109,26450,26451,26454],{"class":111,"line":223},[109,26452,26453],{"class":133},"  --dataset.num_episodes=10",[109,26455,25853],{"class":133},[109,26457,26458,26461,26464],{"class":111,"line":229},[109,26459,26460],{"class":133},"  --dataset.single_task=",[109,26462,26463],{"class":278},"\"Grab the green cube\"",[109,26465,25853],{"class":133},[109,26467,26468],{"class":111,"line":244},[109,26469,26470],{"class":133},"  --resume=true\n",[27,26472,26473],{},[30,26474,26475,26478],{},[106,26476,26477],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26480,26481],{},[938,26482],{"alt":104,"src":26483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26485,26487],{"id":26486},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[99,26489,26491],{"className":24996,"code":26490,"language":24998,"meta":104,"style":104},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[106,26492,26493],{"__ignoreMap":104},[109,26494,26495,26498,26501],{"class":111,"line":112},[109,26496,26497],{"class":211},"rm",[109,26499,26500],{"class":133}," -rf",[109,26502,26503],{"class":278}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26505,26506],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26508,26510],{"id":26509},"_63-回放指定-episode","6.3 回放指定 episode",[99,26512,26514],{"className":24996,"code":26513,"language":24998,"meta":104,"style":104},"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",[106,26515,26516,26523,26529,26535,26541,26549],{"__ignoreMap":104},[109,26517,26518,26521],{"class":111,"line":112},[109,26519,26520],{"class":211},"lerobot-replay",[109,26522,25853],{"class":133},[109,26524,26525,26527],{"class":111,"line":119},[109,26526,25885],{"class":133},[109,26528,25853],{"class":133},[109,26530,26531,26533],{"class":111,"line":140},[109,26532,25963],{"class":133},[109,26534,25853],{"class":133},[109,26536,26537,26539],{"class":111,"line":154},[109,26538,26023],{"class":133},[109,26540,25853],{"class":133},[109,26542,26543,26545,26547],{"class":111,"line":161},[109,26544,26443],{"class":133},[109,26546,26446],{"class":278},[109,26548,25853],{"class":133},[109,26550,26551],{"class":111,"line":167},[109,26552,26553],{"class":133},"  --dataset.episode=0\n",[1467,26555,26556],{},"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":104,"searchDepth":119,"depth":119,"links":26558},[26559,26560,26561],{"id":26373,"depth":119,"text":26374},{"id":26486,"depth":119,"text":26487},{"id":26509,"depth":119,"text":26510},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26364,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26568,"title":26569,"body":26570,"description":24550,"extension":1476,"meta":26698,"navigation":157,"path":26699,"seo":26700,"stem":26701,"__hash__":26702},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26571,"toc":26696},[26572,26576,26639,26642,26689,26694],[10,26573,26575],{"id":26574},"_7-act-模型训练","7. ACT 模型训练",[99,26577,26579],{"className":24996,"code":26578,"language":24998,"meta":104,"style":104},"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",[106,26580,26581,26588,26596,26603,26610,26617,26624,26631],{"__ignoreMap":104},[109,26582,26583,26586],{"class":111,"line":112},[109,26584,26585],{"class":211},"lerobot-train",[109,26587,25853],{"class":133},[109,26589,26590,26592,26594],{"class":111,"line":119},[109,26591,26443],{"class":133},[109,26593,26446],{"class":278},[109,26595,25853],{"class":133},[109,26597,26598,26601],{"class":111,"line":140},[109,26599,26600],{"class":133},"  --policy.type=act",[109,26602,25853],{"class":133},[109,26604,26605,26608],{"class":111,"line":154},[109,26606,26607],{"class":133},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[109,26609,25853],{"class":133},[109,26611,26612,26615],{"class":111,"line":161},[109,26613,26614],{"class":133},"  --job_name=act_so101_test",[109,26616,25853],{"class":133},[109,26618,26619,26622],{"class":111,"line":167},[109,26620,26621],{"class":133},"  --policy.device=cuda",[109,26623,25853],{"class":133},[109,26625,26626,26629],{"class":111,"line":185},[109,26627,26628],{"class":133},"  --wandb.enable=false",[109,26630,25853],{"class":133},[109,26632,26633,26636],{"class":111,"line":201},[109,26634,26635],{"class":133},"  --policy.repo_id=",[109,26637,26638],{"class":278},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26640,26641],{},"参数说明：",[27,26643,26644,26650,26656,26662,26668,26677,26683],{},[30,26645,26646,26649],{},[106,26647,26648],{},"--dataset.repo_id","：训练数据集仓库。",[30,26651,26652,26655],{},[106,26653,26654],{},"--policy.type=act","：策略模型类型为 ACT。",[30,26657,26658,26661],{},[106,26659,26660],{},"--output_dir","：本地训练输出目录。",[30,26663,26664,26667],{},[106,26665,26666],{},"--job_name","：训练任务名称。",[30,26669,26670,26673,26674,25737],{},[106,26671,26672],{},"--policy.device","：训练设备（如 ",[106,26675,26676],{},"cuda",[30,26678,26679,26682],{},[106,26680,26681],{},"--wandb.enable","：是否启用 WandB 可视化。",[30,26684,26685,26688],{},[106,26686,26687],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26690,26691],{},[938,26692],{"alt":104,"src":26693},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1467,26695,26556],{},{"title":104,"searchDepth":119,"depth":119,"links":26697},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26569,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26704,"title":26705,"body":26706,"description":24550,"extension":1476,"meta":26793,"navigation":157,"path":26794,"seo":26795,"stem":26796,"__hash__":26797},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26707,"toc":26791},[26708,26711,26714,26781,26789],[10,26709,26705],{"id":26710},"_8-策略部署与自动采集",[19,26712,26713],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[99,26715,26717],{"className":24996,"code":26716,"language":24998,"meta":104,"style":104},"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",[106,26718,26719,26725,26731,26737,26745,26751,26758,26766,26774],{"__ignoreMap":104},[109,26720,26721,26723],{"class":111,"line":112},[109,26722,26384],{"class":211},[109,26724,25853],{"class":133},[109,26726,26727,26729],{"class":111,"line":119},[109,26728,25885],{"class":133},[109,26730,25853],{"class":133},[109,26732,26733,26735],{"class":111,"line":140},[109,26734,25963],{"class":133},[109,26736,25853],{"class":133},[109,26738,26739,26741,26743],{"class":111,"line":154},[109,26740,26092],{"class":133},[109,26742,26411],{"class":278},[109,26744,25853],{"class":133},[109,26746,26747,26749],{"class":111,"line":161},[109,26748,26023],{"class":133},[109,26750,25853],{"class":133},[109,26752,26753,26756],{"class":111,"line":167},[109,26754,26755],{"class":133},"  --display_data=false",[109,26757,25853],{"class":133},[109,26759,26760,26762,26764],{"class":111,"line":185},[109,26761,26443],{"class":133},[109,26763,26446],{"class":278},[109,26765,25853],{"class":133},[109,26767,26768,26770,26772],{"class":111,"line":201},[109,26769,26460],{"class":133},[109,26771,26463],{"class":278},[109,26773,25853],{"class":133},[109,26775,26776,26779],{"class":111,"line":206},[109,26777,26778],{"class":133},"  --policy.path=",[109,26780,26638],{"class":278},[27,26782,26783],{},[30,26784,26785,26788],{},[106,26786,26787],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1467,26790,26556],{},{"title":104,"searchDepth":119,"depth":119,"links":26792},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26705,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26799,"title":26800,"body":26801,"description":24550,"extension":1476,"meta":26830,"navigation":157,"path":26831,"seo":26832,"stem":26833,"__hash__":26834},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26802,"toc":26828},[26803,26807,26810,26816,26819,26825],[10,26804,26806],{"id":26805},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26808,26809],{},"项目地址：",[19,26811,26812],{},[1776,26813,26814],{"href":26814,"rel":26815},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25039],[19,26817,26818],{},"参考教程：",[19,26820,26821],{},[1776,26822,26823],{"href":26823,"rel":26824},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25039],[19,26826,26827],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":104,"searchDepth":119,"depth":119,"links":26829},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26800,"description":24550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26836,"title":26837,"body":26838,"description":26842,"extension":1476,"meta":26843,"navigation":157,"path":26844,"seo":26845,"stem":26846,"__hash__":26847},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26839,"toc":26840},[],{"title":104,"searchDepth":119,"depth":119,"links":26841},[],"act复现",{"category":24552},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26837,"description":26842},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26849,"title":26850,"body":26851,"description":104,"extension":1476,"meta":27153,"navigation":157,"path":27154,"seo":27155,"stem":27156,"__hash__":27157},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26852,"toc":27145},[26853,26856,26860,26870,26877,26884,26887,26894,26897,26900,26904,26916,26920,26966,26969,26972,26975,26978,26981,26985,27023,27029,27033,27087,27092,27095,27098,27103,27106,27111,27114,27117,27121,27124,27127,27131],[10,26854,26850],{"id":26855},"_1简介",[51,26857,26859],{"id":26858},"_11什么是-docker","1.1什么是 Docker？",[19,26861,26862,26863,26866,26867],{},"Docker 是一个开源的 ",[23,26864,26865],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[23,26868,26869],{},"一次构建，到处运行。",[19,26871,26872,26873,26876],{},"“ ",[23,26874,26875],{},"一次构建，到处运行"," ”也就是说：",[765,26878,26879],{},[30,26880,26881],{},[23,26882,26883],{},"之前：",[19,26885,26886],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[765,26888,26889],{},[30,26890,26891],{},[23,26892,26893],{},"使用docker后：",[19,26895,26896],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26898,26899],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[51,26901,26903],{"id":26902},"_12它是怎么工作的","1.2.它是怎么工作的？",[27,26905,26906,26909],{},[30,26907,26908],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[30,26910,26911,26912,26915],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[23,26913,26914],{},"无论在哪运行都一样稳定"," 。",[51,26917,26919],{"id":26918},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1677,26921,26922,26932],{},[1680,26923,26924],{},[1683,26925,26926,26929],{},[1686,26927,26928],{"align":24910},"概念",[1686,26930,26931],{"align":24910},"解释",[1723,26933,26934,26942,26950,26958],{},[1683,26935,26936,26939],{},[1728,26937,26938],{"align":24910},"镜像",[1728,26940,26941],{"align":24910},"Image，运行容器的模板，像是一个应用快照",[1683,26943,26944,26947],{},[1728,26945,26946],{"align":24910},"容器",[1728,26948,26949],{"align":24910},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1683,26951,26952,26955],{},[1728,26953,26954],{"align":24910},"Dockerfile",[1728,26956,26957],{"align":24910},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1683,26959,26960,26963],{},[1728,26961,26962],{"align":24910},"仓库",[1728,26964,26965],{"align":24910},"Registry，存放镜像的地方，比如 Docker Hub",[19,26967,26968],{},"抽象化理解:",[19,26970,26971],{},"Docker镜像≈C++类",[19,26973,26974],{},"Docker容器≈C++类实例(即对象)",[19,26976,26977],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26979,26980],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[51,26982,26984],{"id":26983},"_14类比理解","1.4.类比理解",[1677,26986,26987,26997],{},[1680,26988,26989],{},[1683,26990,26991,26994],{},[1686,26992,26993],{"align":24910},"传统部署",[1686,26995,26996],{"align":24910},"Docker部署",[1723,26998,26999,27007,27015],{},[1683,27000,27001,27004],{},[1728,27002,27003],{"align":24910},"手动安装依赖、调试版本不一致问题",[1728,27005,27006],{"align":24910},"一次打包环境和代码",[1683,27008,27009,27012],{},[1728,27010,27011],{"align":24910},"程序“裸奔”跑在系统上",[1728,27013,27014],{"align":24910},"程序“穿着容器”隔离运行",[1683,27016,27017,27020],{},[1728,27018,27019],{"align":24910},"容易“在我电脑上能跑”",[1728,27021,27022],{"align":24910},"保证“无论在哪都能跑”",[19,27024,27025,27026],{},"就像快递包裹： ",[23,27027,27028],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[51,27030,27032],{"id":27031},"_15docker-的核心优势","1.5.Docker 的核心优势",[1677,27034,27035,27045],{},[1680,27036,27037],{},[1683,27038,27039,27042],{},[1686,27040,27041],{"align":24910},"优势",[1686,27043,27044],{"align":24910},"说明",[1723,27046,27047,27055,27063,27071,27079],{},[1683,27048,27049,27052],{},[1728,27050,27051],{"align":24910},"轻量级",[1728,27053,27054],{"align":24910},"基于系统内核共享，启动速度快，占资源少",[1683,27056,27057,27060],{},[1728,27058,27059],{"align":24910},"跨平台",[1728,27061,27062],{"align":24910},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1683,27064,27065,27068],{},[1728,27066,27067],{"align":24910},"易于迁移部署",[1728,27069,27070],{"align":24910},"应用和环境一起封装，不怕依赖不一致",[1683,27072,27073,27076],{},[1728,27074,27075],{"align":24910},"易于版本控制",[1728,27077,27078],{"align":24910},"镜像版本可控，支持回滚",[1683,27080,27081,27084],{},[1728,27082,27083],{"align":24910},"生态丰富",[1728,27085,27086],{"align":24910},"Docker Hub 上有成千上万的现成镜像可用",[765,27088,27089],{},[30,27090,27091],{},"在Linux上可以几乎实现无性能损失。",[19,27093,27094],{},"docker里的发行版和本机共用Linux内核。",[19,27096,27097],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[765,27099,27100],{},[30,27101,27102],{},"可以快速部署在绝大多数Linux发行版",[19,27104,27105],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[765,27107,27108],{},[30,27109,27110],{},"配置环境简单",[19,27112,27113],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27115,27116],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[765,27118,27119],{},[30,27120,27083],{},[19,27122,27123],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27125,27126],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[51,27128,27130],{"id":27129},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[27,27132,27133,27136,27139,27142],{},[30,27134,27135],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[30,27137,27138],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[30,27140,27141],{},"微服务架构：每个服务一个容器，灵活组合",[30,27143,27144],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":104,"searchDepth":119,"depth":119,"links":27146},[27147,27148,27149,27150,27151,27152],{"id":26858,"depth":140,"text":26859},{"id":26902,"depth":140,"text":26903},{"id":26918,"depth":140,"text":26919},{"id":26983,"depth":140,"text":26984},{"id":27031,"depth":140,"text":27032},{"id":27129,"depth":140,"text":27130},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26850,"description":104},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27159,"title":27160,"body":27161,"description":104,"extension":1476,"meta":27894,"navigation":157,"path":27895,"seo":27896,"stem":27897,"__hash__":27898},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27162,"toc":27889},[27163,27166,27170,27173,27176,27182,27188,27192,27201,27204,27261,27264,27315,27318,27401,27404,27441,27445,27456,27469,27476,27479,27559,27562,27612,27615,27638,27642,27649,27652,27668,27674,27677,27693,27699,27702,27718,27732,27738,27758,27764,27767,27779,27785,27788,27802,27808,27811,27831,27836,27839,27842,27846,27849,27852,27855,27862,27865,27868,27871,27876,27881,27886],[10,27164,27160],{"id":27165},"_2安装docker",[51,27167,27169],{"id":27168},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27171,27172],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27174,27175],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27177,27178],{},[1776,27179,27180],{"href":27180,"rel":27181},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25039],[19,27183,27184],{},[1776,27185,27186],{"href":27186,"rel":27187},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25039],[23171,27189,27191],{"id":27190},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27193,27194,27195,27200],{},"以下内容根据 ",[1776,27196,27199],{"href":27197,"rel":27198},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25039],"官方文档"," 修改而来。",[19,27202,27203],{},"如果你过去安装过 docker，先删掉：",[99,27205,27207],{"className":24996,"code":27206,"language":24998,"meta":104,"style":104},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[106,27208,27209],{"__ignoreMap":104},[109,27210,27211,27213,27216,27219,27222,27225,27228,27231,27234,27237,27240,27243,27246,27249,27252,27255,27258],{"class":111,"line":112},[109,27212,4372],{"class":122},[109,27214,27215],{"class":126}," pkg ",[109,27217,27218],{"class":122},"in",[109,27220,27221],{"class":278}," docker.io",[109,27223,27224],{"class":278}," docker-doc",[109,27226,27227],{"class":278}," docker-compose",[109,27229,27230],{"class":278}," docker-compose-v2",[109,27232,27233],{"class":278}," podman-docker",[109,27235,27236],{"class":278}," containerd",[109,27238,27239],{"class":278}," runc",[109,27241,27242],{"class":126},"; ",[109,27244,27245],{"class":122},"do",[109,27247,27248],{"class":211}," sudo",[109,27250,27251],{"class":278}," apt-get",[109,27253,27254],{"class":278}," remove",[109,27256,27257],{"class":126}," $pkg; ",[109,27259,27260],{"class":122},"done\n",[19,27262,27263],{},"首先安装依赖和GPG：",[99,27265,27269],{"className":27266,"code":27267,"language":27268,"meta":104,"style":104},"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",[106,27270,27271,27276,27281,27286,27291,27296,27301,27305,27310],{"__ignoreMap":104},[109,27272,27273],{"class":111,"line":112},[109,27274,27275],{},"# Add Docker's official GPG key:\n",[109,27277,27278],{"class":111,"line":119},[109,27279,27280],{},"sudo apt-get update\n",[109,27282,27283],{"class":111,"line":140},[109,27284,27285],{},"sudo apt-get install ca-certificates curl\n",[109,27287,27288],{"class":111,"line":154},[109,27289,27290],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[109,27292,27293],{"class":111,"line":161},[109,27294,27295],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[109,27297,27298],{"class":111,"line":167},[109,27299,27300],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[109,27302,27303],{"class":111,"line":185},[109,27304,158],{"emptyLinePlaceholder":157},[109,27306,27307],{"class":111,"line":201},[109,27308,27309],{},"# 如果上面这行报错就弄下面这行\n",[109,27311,27312],{"class":111,"line":206},[109,27313,27314],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27316,27317],{},"信任 Docker 的 GPG 公钥并添加仓库：",[99,27319,27321],{"className":24996,"code":27320,"language":24998,"meta":104,"style":104},"# 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",[106,27322,27323,27328,27334,27351,27384],{"__ignoreMap":104},[109,27324,27325],{"class":111,"line":112},[109,27326,27327],{"class":115},"# Add the repository to Apt sources:\n",[109,27329,27330,27332],{"class":111,"line":119},[109,27331,26300],{"class":133},[109,27333,25853],{"class":133},[109,27335,27336,27339,27342,27345,27348],{"class":111,"line":140},[109,27337,27338],{"class":278},"  \"deb [arch=$(",[109,27340,27341],{"class":211},"dpkg",[109,27343,27344],{"class":133}," --print-architecture",[109,27346,27347],{"class":278},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[109,27349,27350],{"class":133},"\\\n",[109,27352,27353,27356,27358,27360,27363,27366,27368,27370,27373,27375,27377,27380,27382],{"class":111,"line":154},[109,27354,27355],{"class":278},"  \"",[109,27357,26274],{"class":126},[109,27359,2090],{"class":133},[109,27361,27362],{"class":278}," \u002Fetc\u002Fos-release",[109,27364,27365],{"class":126}," && ",[109,27367,26300],{"class":133},[109,27369,11042],{"class":278},[109,27371,27372],{"class":126},"$VERSION_CODENAME",[109,27374,1789],{"class":278},[109,27376,290],{"class":126},[109,27378,27379],{"class":278},"\" stable\"",[109,27381,26284],{"class":122},[109,27383,25853],{"class":133},[109,27385,27386,27389,27392,27395,27398],{"class":111,"line":161},[109,27387,27388],{"class":211},"  sudo",[109,27390,27391],{"class":278}," tee",[109,27393,27394],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[109,27396,27397],{"class":122}," >",[109,27399,27400],{"class":278}," \u002Fdev\u002Fnull\n",[19,27402,27403],{},"最后安装",[99,27405,27407],{"className":24996,"code":27406,"language":24998,"meta":104,"style":104},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[106,27408,27409,27418],{"__ignoreMap":104},[109,27410,27411,27413,27415],{"class":111,"line":112},[109,27412,25751],{"class":211},[109,27414,27251],{"class":278},[109,27416,27417],{"class":278}," update\n",[109,27419,27420,27422,27424,27426,27429,27432,27435,27438],{"class":111,"line":119},[109,27421,25751],{"class":211},[109,27423,27251],{"class":278},[109,27425,25008],{"class":278},[109,27427,27428],{"class":278}," docker-ce",[109,27430,27431],{"class":278}," docker-ce-cli",[109,27433,27434],{"class":278}," containerd.io",[109,27436,27437],{"class":278}," docker-buildx-plugin",[109,27439,27440],{"class":278}," docker-compose-plugin\n",[23171,27442,27444],{"id":27443},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27446,27447,27448,27451,27452,27455],{},"查看自己自己包管理工具版本（dnf是 ",[23,27449,27450],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[23,27453,27454],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[99,27457,27459],{"className":24996,"code":27458,"language":24998,"meta":104,"style":104},"dnf --version\n",[106,27460,27461],{"__ignoreMap":104},[109,27462,27463,27466],{"class":111,"line":112},[109,27464,27465],{"class":211},"dnf",[109,27467,27468],{"class":133}," --version\n",[19,27470,27194,27471,27475],{},[1776,27472,27199],{"href":27473,"rel":27474},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25039]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27477,27478],{},"如果你之前安装过 docker，请先删掉",[99,27480,27482],{"className":24996,"code":27481,"language":24998,"meta":104,"style":104},"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",[106,27483,27484,27498,27505,27512,27519,27526,27533,27540,27547,27554],{"__ignoreMap":104},[109,27485,27486,27488,27491,27493,27496],{"class":111,"line":112},[109,27487,25751],{"class":211},[109,27489,27490],{"class":278}," dnf",[109,27492,27254],{"class":278},[109,27494,27495],{"class":278}," docker",[109,27497,25853],{"class":133},[109,27499,27500,27503],{"class":111,"line":119},[109,27501,27502],{"class":278},"                  docker-client",[109,27504,25853],{"class":133},[109,27506,27507,27510],{"class":111,"line":140},[109,27508,27509],{"class":278},"                  docker-client-latest",[109,27511,25853],{"class":133},[109,27513,27514,27517],{"class":111,"line":154},[109,27515,27516],{"class":278},"                  docker-common",[109,27518,25853],{"class":133},[109,27520,27521,27524],{"class":111,"line":161},[109,27522,27523],{"class":278},"                  docker-latest",[109,27525,25853],{"class":133},[109,27527,27528,27531],{"class":111,"line":167},[109,27529,27530],{"class":278},"                  docker-latest-logrotate",[109,27532,25853],{"class":133},[109,27534,27535,27538],{"class":111,"line":185},[109,27536,27537],{"class":278},"                  docker-logrotate",[109,27539,25853],{"class":133},[109,27541,27542,27545],{"class":111,"line":201},[109,27543,27544],{"class":278},"                  docker-selinux",[109,27546,25853],{"class":133},[109,27548,27549,27552],{"class":111,"line":206},[109,27550,27551],{"class":278},"                  docker-engine-selinux",[109,27553,25853],{"class":133},[109,27555,27556],{"class":111,"line":218},[109,27557,27558],{"class":278},"                  docker-engine\n",[19,27560,27561],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[99,27563,27565],{"className":24996,"code":27564,"language":24998,"meta":104,"style":104},"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",[106,27566,27567,27581,27596],{"__ignoreMap":104},[109,27568,27569,27571,27573,27576,27578],{"class":111,"line":112},[109,27570,25751],{"class":211},[109,27572,27490],{"class":278},[109,27574,27575],{"class":133}," -y",[109,27577,25008],{"class":278},[109,27579,27580],{"class":278}," dnf-plugins-core\n",[109,27582,27583,27585,27587,27590,27593],{"class":111,"line":119},[109,27584,25751],{"class":211},[109,27586,27490],{"class":278},[109,27588,27589],{"class":278}," config-manager",[109,27591,27592],{"class":278}," addrepo",[109,27594,27595],{"class":133}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[109,27597,27598,27600,27603,27606,27609],{"class":111,"line":140},[109,27599,25751],{"class":211},[109,27601,27602],{"class":278}," sed",[109,27604,27605],{"class":133}," -i",[109,27607,27608],{"class":278}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[109,27610,27611],{"class":278}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27613,27614],{},"最后安装：",[99,27616,27618],{"className":24996,"code":27617,"language":24998,"meta":104,"style":104},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[106,27619,27620],{"__ignoreMap":104},[109,27621,27622,27624,27626,27628,27630,27632,27634,27636],{"class":111,"line":112},[109,27623,25751],{"class":211},[109,27625,27490],{"class":278},[109,27627,25008],{"class":278},[109,27629,27428],{"class":278},[109,27631,27431],{"class":278},[109,27633,27434],{"class":278},[109,27635,27437],{"class":278},[109,27637,27440],{"class":278},[51,27639,27641],{"id":27640},"_22配置环境","2.2.配置环境",[23171,27643,27645,27648],{"id":27644},"_221检查-docker-服务状态",[23,27646,27647],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27650,27651],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[99,27653,27655],{"className":24996,"code":27654,"language":24998,"meta":104,"style":104},"systemctl status docker\n",[106,27656,27657],{"__ignoreMap":104},[109,27658,27659,27662,27665],{"class":111,"line":112},[109,27660,27661],{"class":211},"systemctl",[109,27663,27664],{"class":278}," status",[109,27666,27667],{"class":278}," docker\n",[23171,27669,27671,27648],{"id":27670},"_222启动-docker-服务",[23,27672,27673],{},"2.2.2.启动 Docker 服务",[19,27675,27676],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[99,27678,27680],{"className":24996,"code":27679,"language":24998,"meta":104,"style":104},"sudo systemctl start docker\n",[106,27681,27682],{"__ignoreMap":104},[109,27683,27684,27686,27689,27691],{"class":111,"line":112},[109,27685,25751],{"class":211},[109,27687,27688],{"class":278}," systemctl",[109,27690,5523],{"class":278},[109,27692,27667],{"class":278},[23171,27694,27696,27648],{"id":27695},"_223设置-docker-开机自启",[23,27697,27698],{},"2.2.3.设置 Docker 开机自启",[19,27700,27701],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[99,27703,27705],{"className":24996,"code":27704,"language":24998,"meta":104,"style":104},"sudo systemctl enable docker\n",[106,27706,27707],{"__ignoreMap":104},[109,27708,27709,27711,27713,27716],{"class":111,"line":112},[109,27710,25751],{"class":211},[109,27712,27688],{"class":278},[109,27714,27715],{"class":278}," enable",[109,27717,27667],{"class":278},[23171,27719,27721,14968,27724,14968,27729,27648],{"id":27720},"_224将用户添加到-docker-组",[23,27722,27723],{},"2.2.4.将用户添加到",[23,27725,27726],{},[106,27727,27728],{},"docker",[23,27730,27731],{},"组",[19,27733,27734,27735,27737],{},"使用以下命令将当前用户添加到 ",[106,27736,27728],{}," 组：",[99,27739,27741],{"className":24996,"code":27740,"language":24998,"meta":104,"style":104},"sudo usermod -aG docker $USER\n",[106,27742,27743],{"__ignoreMap":104},[109,27744,27745,27747,27750,27753,27755],{"class":111,"line":112},[109,27746,25751],{"class":211},[109,27748,27749],{"class":278}," usermod",[109,27751,27752],{"class":133}," -aG",[109,27754,27495],{"class":278},[109,27756,27757],{"class":126}," $USER\n",[23171,27759,27761,27648],{"id":27760},"_225退出并重新登录",[23,27762,27763],{},"2.2.5.退出并重新登录",[19,27765,27766],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[99,27768,27770],{"className":24996,"code":27769,"language":24998,"meta":104,"style":104},"newgrp docker\n",[106,27771,27772],{"__ignoreMap":104},[109,27773,27774,27777],{"class":111,"line":112},[109,27775,27776],{"class":211},"newgrp",[109,27778,27667],{"class":278},[23171,27780,27782,27648],{"id":27781},"_226重新启动-docker-服务如果需要",[23,27783,27784],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27786,27787],{},"确保 Docker 服务正在运行，可以使用以下命令：",[99,27789,27790],{"className":24996,"code":27679,"language":24998,"meta":104,"style":104},[106,27791,27792],{"__ignoreMap":104},[109,27793,27794,27796,27798,27800],{"class":111,"line":112},[109,27795,25751],{"class":211},[109,27797,27688],{"class":278},[109,27799,5523],{"class":278},[109,27801,27667],{"class":278},[23171,27803,27805,27648],{"id":27804},"_227重启电脑后检查-docker-服务状态",[23,27806,27807],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27809,27810],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[99,27812,27814],{"className":24996,"code":27813,"language":24998,"meta":104,"style":104},"sudo reboot\nsystemctl status docker\n",[106,27815,27816,27823],{"__ignoreMap":104},[109,27817,27818,27820],{"class":111,"line":112},[109,27819,25751],{"class":211},[109,27821,27822],{"class":278}," reboot\n",[109,27824,27825,27827,27829],{"class":111,"line":119},[109,27826,27661],{"class":211},[109,27828,27664],{"class":278},[109,27830,27667],{"class":278},[19,27832,27833],{},[938,27834],{"alt":104,"src":27835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27837,27838],{},"第三行显示enabled说明开机自启动成功",[19,27840,27841],{},"按q退出",[51,27843,27845],{"id":27844},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27847,27848],{},"优先使用linux来使用docker是比较好的",[19,27850,27851],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27853,27854],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27856,27857,27858],{},"官方下载安装:",[1776,27859,27860],{"href":27860,"rel":27861},"https:\u002F\u002Fwww.docker.com\u002F",[25039],[19,27863,27864],{},"Windows的Docker显卡直通与USB直通:",[19,27866,27867],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27869,27870],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27872,27873],{},[938,27874],{"alt":104,"src":27875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27877,27878],{},[938,27879],{"alt":104,"src":27880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27882,27883],{},[938,27884],{"alt":104,"src":27885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1467,27887,27888],{},"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":104,"searchDepth":119,"depth":119,"links":27890},[27891,27892,27893],{"id":27168,"depth":140,"text":27169},{"id":27640,"depth":140,"text":27641},{"id":27844,"depth":140,"text":27845},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27160,"description":104},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27900,"title":27901,"body":27902,"description":27909,"extension":1476,"meta":28602,"navigation":157,"path":28603,"seo":28604,"stem":28605,"__hash__":28606},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27903,"toc":28596},[27904,27907,27910,27914,27919,27924,27927,27955,27960,27969,27972,27977,27981,27988,27993,27999,28003,28006,28010,28015,28107,28112,28130,28135,28156,28161,28177,28181,28186,28215,28220,28266,28271,28315,28323,28340,28345,28361,28366,28380,28383,28386,28389,28392,28421,28424,28429,28433,28436,28439,28445,28448,28451,28454,28516,28523,28528,28531,28549,28553,28556,28573,28576,28579,28593],[10,27905,27901],{"id":27906},"_3docker直通",[19,27908,27909],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[51,27911,27913],{"id":27912},"_31usb直通","3.1.USB直通",[19,27915,27916],{},[938,27917],{"alt":104,"src":27918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[765,27920,27921],{},[30,27922,27923],{},"方法一(不是很推荐新手)：",[19,27925,27926],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[99,27928,27930],{"className":24996,"code":27929,"language":24998,"meta":104,"style":104},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[106,27931,27932,27940,27945],{"__ignoreMap":104},[109,27933,27934,27937],{"class":111,"line":112},[109,27935,27936],{"class":211},"ls",[109,27938,27939],{"class":278}," \u002Fdev\n",[109,27941,27942],{"class":111,"line":119},[109,27943,27944],{"class":115},"#例如\n",[109,27946,27947,27950,27952],{"class":111,"line":140},[109,27948,27949],{"class":126},"--device",[109,27951,130],{"class":122},[109,27953,27954],{"class":278},"\u002Fdev\u002Ftty_USB0\n",[765,27956,27957],{"start":119},[30,27958,27959],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[99,27961,27963],{"className":24996,"code":27962,"language":24998,"meta":104,"style":104},"--privileged\n",[106,27964,27965],{"__ignoreMap":104},[109,27966,27967],{"class":111,"line":112},[109,27968,27962],{"class":211},[19,27970,27971],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27973,27974],{},[938,27975],{"alt":104,"src":27976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[51,27978,27980],{"id":27979},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27982,27983,27984,27987],{},"NVIDIA Container Toolkit使用户 ",[23,27985,27986],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27989,27990],{},[938,27991],{"alt":104,"src":27992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27994,27995],{},[1776,27996,27997],{"href":27997,"rel":27998},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25039],[23171,28000,28002],{"id":28001},"_321安装","3.2.1.安装",[19,28004,28005],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24083,28007,28009],{"id":28008},"_3211ubuntu","3.2.1.1.Ubuntu",[765,28011,28012],{},[30,28013,28014],{},"配置存储库 并更新",[99,28016,28018],{"className":24996,"code":28017,"language":24998,"meta":104,"style":104},"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",[106,28019,28020,28049,28069,28081,28093,28099],{"__ignoreMap":104},[109,28021,28022,28025,28028,28031,28033,28035,28038,28041,28044,28047],{"class":111,"line":112},[109,28023,28024],{"class":211},"curl",[109,28026,28027],{"class":133}," -fsSL",[109,28029,28030],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[109,28032,26284],{"class":122},[109,28034,27248],{"class":211},[109,28036,28037],{"class":278}," gpg",[109,28039,28040],{"class":133}," --dearmor",[109,28042,28043],{"class":133}," -o",[109,28045,28046],{"class":278}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[109,28048,25853],{"class":133},[109,28050,28051,28054,28056,28059,28062,28065,28067],{"class":111,"line":119},[109,28052,28053],{"class":126},"  && ",[109,28055,28024],{"class":211},[109,28057,28058],{"class":133}," -s",[109,28060,28061],{"class":133}," -L",[109,28063,28064],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[109,28066,26284],{"class":122},[109,28068,25853],{"class":133},[109,28070,28071,28074,28077,28079],{"class":111,"line":140},[109,28072,28073],{"class":211},"    sed",[109,28075,28076],{"class":278}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[109,28078,26284],{"class":122},[109,28080,25853],{"class":133},[109,28082,28083,28086,28088,28091],{"class":111,"line":154},[109,28084,28085],{"class":211},"    sudo",[109,28087,27391],{"class":278},[109,28089,28090],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[109,28092,25853],{"class":133},[109,28094,28095,28097],{"class":111,"line":161},[109,28096,28053],{"class":126},[109,28098,27350],{"class":133},[109,28100,28101,28103,28105],{"class":111,"line":167},[109,28102,28085],{"class":211},[109,28104,27251],{"class":278},[109,28106,27417],{"class":278},[765,28108,28109],{"start":119},[30,28110,28111],{},"安装nvidia-docker2",[99,28113,28115],{"className":24996,"code":28114,"language":24998,"meta":104,"style":104},"sudo apt-get install -y nvidia-docker2\n",[106,28116,28117],{"__ignoreMap":104},[109,28118,28119,28121,28123,28125,28127],{"class":111,"line":112},[109,28120,25751],{"class":211},[109,28122,27251],{"class":278},[109,28124,25008],{"class":278},[109,28126,27575],{"class":133},[109,28128,28129],{"class":278}," nvidia-docker2\n",[765,28131,28132],{"start":140},[30,28133,28134],{},"使用nvidia-ctk命令配置container runtime",[99,28136,28138],{"className":24996,"code":28137,"language":24998,"meta":104,"style":104},"sudo nvidia-ctk runtime configure --runtime=docker\n",[106,28139,28140],{"__ignoreMap":104},[109,28141,28142,28144,28147,28150,28153],{"class":111,"line":112},[109,28143,25751],{"class":211},[109,28145,28146],{"class":278}," nvidia-ctk",[109,28148,28149],{"class":278}," runtime",[109,28151,28152],{"class":278}," configure",[109,28154,28155],{"class":133}," --runtime=docker\n",[765,28157,28158],{"start":154},[30,28159,28160],{},"重启docker服务:",[99,28162,28164],{"className":24996,"code":28163,"language":24998,"meta":104,"style":104},"sudo systemctl restart docker\n",[106,28165,28166],{"__ignoreMap":104},[109,28167,28168,28170,28172,28175],{"class":111,"line":112},[109,28169,25751],{"class":211},[109,28171,27688],{"class":278},[109,28173,28174],{"class":278}," restart",[109,28176,27667],{"class":278},[24083,28178,28180],{"id":28179},"_3212fedora","3.2.1.2.Fedora",[765,28182,28183],{},[30,28184,28185],{},"配置存储库",[99,28187,28189],{"className":24996,"code":28188,"language":24998,"meta":104,"style":104},"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",[106,28190,28191,28206],{"__ignoreMap":104},[109,28192,28193,28195,28197,28199,28202,28204],{"class":111,"line":112},[109,28194,28024],{"class":211},[109,28196,28058],{"class":133},[109,28198,28061],{"class":133},[109,28200,28201],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[109,28203,26284],{"class":122},[109,28205,25853],{"class":133},[109,28207,28208,28210,28212],{"class":111,"line":119},[109,28209,25751],{"class":211},[109,28211,27391],{"class":278},[109,28213,28214],{"class":278}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[765,28216,28217],{"start":119},[30,28218,28219],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[99,28221,28223],{"className":24996,"code":28222,"language":24998,"meta":104,"style":104},"# 如果是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",[106,28224,28225,28230,28244,28248,28253],{"__ignoreMap":104},[109,28226,28227],{"class":111,"line":112},[109,28228,28229],{"class":115},"# 如果是RHEL或者Rocky（DNF4）\n",[109,28231,28232,28234,28236,28238,28241],{"class":111,"line":119},[109,28233,25751],{"class":211},[109,28235,27490],{"class":278},[109,28237,27589],{"class":278},[109,28239,28240],{"class":133}," --add-repo",[109,28242,28243],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[109,28245,28246],{"class":111,"line":140},[109,28247,158],{"emptyLinePlaceholder":157},[109,28249,28250],{"class":111,"line":154},[109,28251,28252],{"class":115},"# 如果是Feodra41+（DNF5）\n",[109,28254,28255,28257,28259,28261,28263],{"class":111,"line":161},[109,28256,25751],{"class":211},[109,28258,27490],{"class":278},[109,28260,27589],{"class":278},[109,28262,27592],{"class":278},[109,28264,28265],{"class":133}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[765,28267,28268],{"start":140},[30,28269,28270],{},"安装NVIDIA Container Toolki包",[99,28272,28274],{"className":24996,"code":28273,"language":24998,"meta":104,"style":104},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[106,28275,28276,28281,28294,28298,28303],{"__ignoreMap":104},[109,28277,28278],{"class":111,"line":112},[109,28279,28280],{"class":115},"# 如果是RHEL或者Rocky\n",[109,28282,28283,28285,28287,28289,28291],{"class":111,"line":119},[109,28284,25751],{"class":211},[109,28286,27490],{"class":278},[109,28288,25008],{"class":278},[109,28290,27575],{"class":133},[109,28292,28293],{"class":278}," nvidia-container-toolkit\n",[109,28295,28296],{"class":111,"line":140},[109,28297,158],{"emptyLinePlaceholder":157},[109,28299,28300],{"class":111,"line":154},[109,28301,28302],{"class":115},"# 如果是Fedora\n",[109,28304,28305,28307,28309,28311,28313],{"class":111,"line":161},[109,28306,25751],{"class":211},[109,28308,27490],{"class":278},[109,28310,25008],{"class":278},[109,28312,27575],{"class":133},[109,28314,28293],{"class":278},[765,28316,28317],{"start":154},[30,28318,28319,28320,28322],{},"安装nvidia-docker2 ： 在Fedora上使用",[106,28321,27465],{},"进行安装",[99,28324,28326],{"className":24996,"code":28325,"language":24998,"meta":104,"style":104},"sudo dnf install -y nvidia-docker2\n",[106,28327,28328],{"__ignoreMap":104},[109,28329,28330,28332,28334,28336,28338],{"class":111,"line":112},[109,28331,25751],{"class":211},[109,28333,27490],{"class":278},[109,28335,25008],{"class":278},[109,28337,27575],{"class":133},[109,28339,28129],{"class":278},[765,28341,28342],{"start":161},[30,28343,28344],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[99,28346,28347],{"className":24996,"code":28137,"language":24998,"meta":104,"style":104},[106,28348,28349],{"__ignoreMap":104},[109,28350,28351,28353,28355,28357,28359],{"class":111,"line":112},[109,28352,25751],{"class":211},[109,28354,28146],{"class":278},[109,28356,28149],{"class":278},[109,28358,28152],{"class":278},[109,28360,28155],{"class":133},[765,28362,28363],{"start":167},[30,28364,28365],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[99,28367,28368],{"className":24996,"code":28163,"language":24998,"meta":104,"style":104},[106,28369,28370],{"__ignoreMap":104},[109,28371,28372,28374,28376,28378],{"class":111,"line":112},[109,28373,25751],{"class":211},[109,28375,27688],{"class":278},[109,28377,28174],{"class":278},[109,28379,27667],{"class":278},[19,28381,28382],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28384,28385],{},"方法：",[19,28387,28388],{},"1️⃣nvidia-smi",[19,28390,28391],{},"2️⃣运行nvidia cuda 容器进行测试",[99,28393,28395],{"className":24996,"code":28394,"language":24998,"meta":104,"style":104},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[106,28396,28397],{"__ignoreMap":104},[109,28398,28399,28401,28403,28406,28409,28412,28415,28418],{"class":111,"line":112},[109,28400,25751],{"class":211},[109,28402,27495],{"class":278},[109,28404,28405],{"class":278}," run",[109,28407,28408],{"class":133}," --rm",[109,28410,28411],{"class":133}," --gpus",[109,28413,28414],{"class":278}," all",[109,28416,28417],{"class":278}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[109,28419,28420],{"class":278}," nvidia-smi\n",[19,28422,28423],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28425,28426],{},[938,28427],{"alt":104,"src":28428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[51,28430,28432],{"id":28431},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28434,28435],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28437,28438],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28440,28441],{},[1776,28442,28443],{"href":28443,"rel":28444},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25039],[19,28446,28447],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28449,28450],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28452,28453],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1677,28455,28456,28472],{},[1680,28457,28458],{},[1683,28459,28460,28463,28466,28469],{},[1686,28461,28462],{"align":24910},"镜像类型",[1686,28464,28465],{"align":24910},"适用场景",[1686,28467,28468],{"align":24910},"示例标签",[1686,28470,28471],{"align":24910},"大小",[1723,28473,28474,28488,28502],{},[1683,28475,28476,28479,28482,28485],{},[1728,28477,28478],{"align":24910},"base",[1728,28480,28481],{"align":24910},"仅需 CUDA 运行时库",[1728,28483,28484],{"align":24910},"12.4.0-base-ubuntu22.04",[1728,28486,28487],{"align":24910},"~240MB",[1683,28489,28490,28493,28496,28499],{},[1728,28491,28492],{"align":24910},"runtime",[1728,28494,28495],{"align":24910},"部署编译后的应用（含数学库）",[1728,28497,28498],{"align":24910},"12.4.0-runtime-ubuntu22.04",[1728,28500,28501],{"align":24910},"~2GB",[1683,28503,28504,28507,28510,28513],{},[1728,28505,28506],{"align":24910},"devel",[1728,28508,28509],{"align":24910},"开发环境（含编译工具）",[1728,28511,28512],{"align":24910},"12.4.0-devel-ubuntu22.04",[1728,28514,28515],{"align":24910},"~3GB",[19,28517,28518,28519,28522],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[106,28520,28521],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28524,28525],{},[938,28526],{"alt":104,"src":28527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28529,28530],{},"在dockerfile里就可以开头这么写：",[99,28532,28534],{"className":24996,"code":28533,"language":24998,"meta":104,"style":104},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[106,28535,28536,28541],{"__ignoreMap":104},[109,28537,28538],{"class":111,"line":112},[109,28539,28540],{"class":115},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[109,28542,28543,28546],{"class":111,"line":119},[109,28544,28545],{"class":211},"FROM",[109,28547,28548],{"class":278}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[51,28550,28552],{"id":28551},"_34配置以太网","3.4.配置以太网",[19,28554,28555],{},"指定网络模式",[99,28557,28559],{"className":24996,"code":28558,"language":24998,"meta":104,"style":104},"--net=host \\\n",[106,28560,28561],{"__ignoreMap":104},[109,28562,28563,28566,28568,28571],{"class":111,"line":112},[109,28564,28565],{"class":126},"--net",[109,28567,130],{"class":122},[109,28569,28570],{"class":278},"host",[109,28572,25853],{"class":211},[19,28574,28575],{},"启动参数里加上这行即可。具体在下方",[19,28577,28578],{},"--net选项：指定网络模式，该选项有以下参数可选：",[27,28580,28581,28584,28587,28590],{},[30,28582,28583],{},"--net=bridge:默认选项，表示连接到默认的网桥",[30,28585,28586],{},"--net=host:容器使用宿主机的网络",[30,28588,28589],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[30,28591,28592],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1467,28594,28595],{},"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":104,"searchDepth":119,"depth":119,"links":28597},[28598,28599,28600,28601],{"id":27912,"depth":140,"text":27913},{"id":27979,"depth":140,"text":27980},{"id":28431,"depth":140,"text":28432},{"id":28551,"depth":140,"text":28552},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27901,"description":27909},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28608,"title":28609,"body":28610,"description":28617,"extension":1476,"meta":28623,"navigation":157,"path":28624,"seo":28625,"stem":28626,"__hash__":28627},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28611,"toc":28621},[28612,28615,28618],[10,28613,28609],{"id":28614},"_4dockerhub换源",[19,28616,28617],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28619,28620],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":104,"searchDepth":119,"depth":119,"links":28622},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28609,"description":28617},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28629,"title":28630,"body":28631,"description":104,"extension":1476,"meta":29643,"navigation":157,"path":29644,"seo":29645,"stem":29646,"__hash__":29647},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28632,"toc":29638},[28633,28636,28640,28646,28650,28653,28993,28996,28999,29002,29007,29012,29015,29018,29021,29024,29043,29046,29057,29063,29245,29255,29271,29534,29536,29561,29576,29585,29635],[10,28634,28630],{"id":28635},"_5docker命令学习",[51,28637,28639],{"id":28638},"_51参考文档","5.1.参考文档",[19,28641,28642],{},[1776,28643,28644],{"href":28644,"rel":28645},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25039],[51,28647,28649],{"id":28648},"_52常用命令","5.2.常用命令",[19,28651,28652],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1677,28654,28655,28668],{},[1680,28656,28657],{},[1683,28658,28659,28662,28665],{},[1686,28660,28661],{"align":24910},"命令",[1686,28663,28664],{"align":24910},"描述",[1686,28666,28667],{"align":24910},"示例",[1723,28669,28670,28681,28692,28703,28714,28725,28736,28747,28757,28768,28779,28790,28800,28811,28822,28833,28843,28853,28863,28873,28884,28895,28906,28917,28928,28939,28949,28960,28971,28982],{},[1683,28671,28672,28675,28678],{},[1728,28673,28674],{"align":24910},"docker run",[1728,28676,28677],{"align":24910},"创建并启动一个新的容器。",[1728,28679,28680],{"align":24910},"docker run -it ubuntu bash",[1683,28682,28683,28686,28689],{},[1728,28684,28685],{"align":24910},"docker build",[1728,28687,28688],{"align":24910},"通过指定的 Dockerfile 创建一个新的镜像。",[1728,28690,28691],{"align":24910},"docker build -t myimage .",[1683,28693,28694,28697,28700],{},[1728,28695,28696],{"align":24910},"docker pull",[1728,28698,28699],{"align":24910},"从 Docker 仓库拉取镜像。",[1728,28701,28702],{"align":24910},"docker pull ubuntu",[1683,28704,28705,28708,28711],{},[1728,28706,28707],{"align":24910},"docker push",[1728,28709,28710],{"align":24910},"将本地镜像推送到 Docker 仓库。",[1728,28712,28713],{"align":24910},"docker push myimage",[1683,28715,28716,28719,28722],{},[1728,28717,28718],{"align":24910},"docker stop",[1728,28720,28721],{"align":24910},"停止一个正在运行的容器。",[1728,28723,28724],{"align":24910},"docker stop container_id",[1683,28726,28727,28730,28733],{},[1728,28728,28729],{"align":24910},"docker start",[1728,28731,28732],{"align":24910},"启动一个已经存在的容器。",[1728,28734,28735],{"align":24910},"docker start container_id",[1683,28737,28738,28741,28744],{},[1728,28739,28740],{"align":24910},"docker restart",[1728,28742,28743],{"align":24910},"重新启动容器。",[1728,28745,28746],{"align":24910},"docker restart container_id",[1683,28748,28749,28752,28755],{},[1728,28750,28751],{"align":24910},"docker ps",[1728,28753,28754],{"align":24910},"列出当前正在运行的容器。",[1728,28756,28751],{"align":24910},[1683,28758,28759,28762,28765],{},[1728,28760,28761],{"align":24910},"docker rm",[1728,28763,28764],{"align":24910},"删除一个或多个停止的容器。",[1728,28766,28767],{"align":24910},"docker rm container_id",[1683,28769,28770,28773,28776],{},[1728,28771,28772],{"align":24910},"docker exec",[1728,28774,28775],{"align":24910},"在一个正在运行的容器中执行命令。",[1728,28777,28778],{"align":24910},"docker exec -it container_id bash",[1683,28780,28781,28784,28787],{},[1728,28782,28783],{"align":24910},"docker logs",[1728,28785,28786],{"align":24910},"查看容器的日志输出。",[1728,28788,28789],{"align":24910},"docker logs container_id",[1683,28791,28792,28795,28798],{},[1728,28793,28794],{"align":24910},"docker images",[1728,28796,28797],{"align":24910},"列出本地所有镜像。",[1728,28799,28794],{"align":24910},[1683,28801,28802,28805,28808],{},[1728,28803,28804],{"align":24910},"docker rmi",[1728,28806,28807],{"align":24910},"删除一个或多个镜像。",[1728,28809,28810],{"align":24910},"docker rmi myimage",[1683,28812,28813,28816,28819],{},[1728,28814,28815],{"align":24910},"docker network",[1728,28817,28818],{"align":24910},"管理 Docker 网络。",[1728,28820,28821],{"align":24910},"docker network ls",[1683,28823,28824,28827,28830],{},[1728,28825,28826],{"align":24910},"docker volume",[1728,28828,28829],{"align":24910},"管理 Docker 数据卷。",[1728,28831,28832],{"align":24910},"docker volume ls",[1683,28834,28835,28838,28841],{},[1728,28836,28837],{"align":24910},"docker-compose up",[1728,28839,28840],{"align":24910},"启动 docker-compose.yml 中定义的所有服务。",[1728,28842,28837],{"align":24910},[1683,28844,28845,28848,28851],{},[1728,28846,28847],{"align":24910},"docker-compose down",[1728,28849,28850],{"align":24910},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1728,28852,28847],{"align":24910},[1683,28854,28855,28858,28861],{},[1728,28856,28857],{"align":24910},"docker info",[1728,28859,28860],{"align":24910},"显示 Docker 系统的详细信息。",[1728,28862,28857],{"align":24910},[1683,28864,28865,28868,28871],{},[1728,28866,28867],{"align":24910},"docker stats",[1728,28869,28870],{"align":24910},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1728,28872,28867],{"align":24910},[1683,28874,28875,28878,28881],{},[1728,28876,28877],{"align":24910},"docker inspect",[1728,28879,28880],{"align":24910},"查看容器或镜像的详细信息（JSON 格式）。",[1728,28882,28883],{"align":24910},"docker inspect container_id",[1683,28885,28886,28889,28892],{},[1728,28887,28888],{"align":24910},"docker save",[1728,28890,28891],{"align":24910},"将一个镜像保存为 tar 文件。",[1728,28893,28894],{"align":24910},"docker save -o myimage.tar myimage",[1683,28896,28897,28900,28903],{},[1728,28898,28899],{"align":24910},"docker load",[1728,28901,28902],{"align":24910},"从 tar 文件中加载镜像。",[1728,28904,28905],{"align":24910},"docker load -i myimage.tar",[1683,28907,28908,28911,28914],{},[1728,28909,28910],{"align":24910},"docker tag",[1728,28912,28913],{"align":24910},"为镜像添加标签（tag）。",[1728,28915,28916],{"align":24910},"docker tag myimage myimage:v1",[1683,28918,28919,28922,28925],{},[1728,28920,28921],{"align":24910},"docker buildx build",[1728,28923,28924],{"align":24910},"使用 Buildx 构建多架构镜像。",[1728,28926,28927],{"align":24910},"docker buildx build -t myimage .",[1683,28929,28930,28933,28936],{},[1728,28931,28932],{"align":24910},"docker buildx create",[1728,28934,28935],{"align":24910},"创建一个新的 Buildx 构建实例。",[1728,28937,28938],{"align":24910},"docker buildx create –use",[1683,28940,28941,28944,28947],{},[1728,28942,28943],{"align":24910},"docker buildx ls",[1728,28945,28946],{"align":24910},"列出所有可用的 Buildx 构建实例。",[1728,28948,28943],{"align":24910},[1683,28950,28951,28954,28957],{},[1728,28952,28953],{"align":24910},"docker buildx use",[1728,28955,28956],{"align":24910},"设置当前的 Buildx 构建实例。",[1728,28958,28959],{"align":24910},"docker buildx use mybuilder",[1683,28961,28962,28965,28968],{},[1728,28963,28964],{"align":24910},"docker buildx bake",[1728,28966,28967],{"align":24910},"使用 Bake 文件批量构建镜像。",[1728,28969,28970],{"align":24910},"docker buildx bake -f bake.hcl",[1683,28972,28973,28976,28979],{},[1728,28974,28975],{"align":24910},"docker buildx build –push",[1728,28977,28978],{"align":24910},"构建镜像并推送到镜像仓库。",[1728,28980,28981],{"align":24910},"docker buildx build –push -t myimage .",[1683,28983,28984,28987,28990],{},[1728,28985,28986],{"align":24910},"docker buildx build –platform",[1728,28988,28989],{"align":24910},"构建镜像并为多个平台生成支持。",[1728,28991,28992],{"align":24910},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28994,28995],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28997,28998],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29000,29001],{},"docker images 可以查看已经下载的镜像",[19,29003,29004],{},[938,29005],{"alt":104,"src":29006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29008,29009],{},[23,29010,29011],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29013,29014],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29016,29017],{},"docker container logs 查看容器日志",[19,29019,29020],{},"docker top 查看容器里的进程",[19,29022,29023],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[99,29025,29027],{"className":24996,"code":29026,"language":24998,"meta":104,"style":104},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[106,29028,29029],{"__ignoreMap":104},[109,29030,29031,29034,29037,29040],{"class":111,"line":112},[109,29032,29033],{"class":211},"如：docker",[109,29035,29036],{"class":278}," cp",[109,29038,29039],{"class":278}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[109,29041,29042],{"class":278}," \u002Fmydata\u002Fnginx\n",[19,29044,29045],{},"docker run时在启动容器的时候会有几个常用的选项：",[27,29047,29048,29051,29054],{},[30,29049,29050],{},"-d选项：表示后台运行",[30,29052,29053],{},"-P选项：随机端口映射",[30,29055,29056],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[51,29058,29060],{"id":29059},"_53run命令的参数非常重要",[23,29061,29062],{},"5.3.run命令的参数（非常重要）",[1677,29064,29065,29078],{},[1680,29066,29067],{},[1683,29068,29069,29072,29075],{},[1686,29070,29071],{"align":24910},"参数\u002F配置",[1686,29073,29074],{"align":24910},"功能说明",[1686,29076,29077],{"align":24910},"重要性与参考依据",[1723,29079,29080,29091,29102,29113,29124,29135,29146,29157,29168,29179,29190,29201,29212,29223,29234],{},[1683,29081,29082,29085,29088],{},[1728,29083,29084],{"align":24910},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1728,29086,29087],{"align":24910},"指定容器名称，便于后续管理",[1728,29089,29090],{"align":24910},"替代随机生成的容器名。",[1683,29092,29093,29096,29099],{},[1728,29094,29095],{"align":24910},"–gpus all",[1728,29097,29098],{"align":24910},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1728,29100,29101],{"align":24910},"用于CUDA加速等GPU依赖任务。",[1683,29103,29104,29107,29110],{},[1728,29105,29106],{"align":24910},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1728,29108,29109],{"align":24910},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1728,29111,29112],{"align":24910},"确保容器内GPU功能完整67。",[1683,29114,29115,29118,29121],{},[1728,29116,29117],{"align":24910},"-dit",[1728,29119,29120],{"align":24910},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1728,29122,29123],{"align":24910},"允许容器在后台运行并支持交互操作。",[1683,29125,29126,29129,29132],{},[1728,29127,29128],{"align":24910},"–privileged",[1728,29130,29131],{"align":24910},"赋予容器完全主机权限（可访问设备、内核模块等）",[1728,29133,29134],{"align":24910},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1683,29136,29137,29140,29143],{},[1728,29138,29139],{"align":24910},"–net=host",[1728,29141,29142],{"align":24910},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1728,29144,29145],{"align":24910},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1683,29147,29148,29151,29154],{},[1728,29149,29150],{"align":24910},"–group-add audio–group-add video–group-add dialout",[1728,29152,29153],{"align":24910},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1728,29155,29156],{"align":24910},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1683,29158,29159,29162,29165],{},[1728,29160,29161],{"align":24910},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1728,29163,29164],{"align":24910},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1728,29166,29167],{"align":24910},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1683,29169,29170,29173,29176],{},[1728,29171,29172],{"align":24910},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1728,29174,29175],{"align":24910},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1728,29177,29178],{"align":24910},"实现容器内图形显示。",[1683,29180,29181,29184,29187],{},[1728,29182,29183],{"align":24910},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1728,29185,29186],{"align":24910},"挂载X11认证文件（只读）",[1728,29188,29189],{"align":24910},"确保容器有权连接宿主机显示服务。",[1683,29191,29192,29195,29198],{},[1728,29193,29194],{"align":24910},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1728,29196,29197],{"align":24910},"挂载Wayland显示协议相关目录",[1728,29199,29200],{"align":24910},"支持Wayland协议的图形显示。",[1683,29202,29203,29206,29209],{},[1728,29204,29205],{"align":24910},"–ulimit nofile=1024:524288",[1728,29207,29208],{"align":24910},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1728,29210,29211],{"align":24910},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1683,29213,29214,29217,29220],{},[1728,29215,29216],{"align":24910},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1728,29218,29219],{"align":24910},"挂载宿主机用户目录到容器内同名路径",[1728,29221,29222],{"align":24910},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1683,29224,29225,29228,29231],{},[1728,29226,29227],{"align":24910},"-w \u002Fhome\u002Ftungchiahui",[1728,29229,29230],{"align":24910},"设置容器启动后的默认工作目录",[1728,29232,29233],{"align":24910},"直接进入项目路径，方便执行命令2324。",[1683,29235,29236,29239,29242],{},[1728,29237,29238],{"align":24910},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1728,29240,29241],{"align":24910},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1728,29243,29244],{"align":24910},"提供预配置的深度学习与机器人开发环境。",[19,29246,29247,29248,29250,29251,29254],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[106,29249,25751],{},"加不加",[106,29252,29253],{},"sudo -E","都无所谓。",[19,29256,29257,29258,29260,29261,29263,29264,29267,29268,29270],{},"用户已经被加到docker组了，不用",[106,29259,25751],{},"也行跑，其次，",[106,29262,25751],{},"运行的话，你的",[106,29265,29266],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[106,29269,29266],{},"更不可能变了。",[99,29272,29274],{"className":24996,"code":29273,"language":24998,"meta":104,"style":104},"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",[106,29275,29276,29289,29299,29309,29321,29328,29335,29342,29352,29361,29370,29384,29396,29408,29417,29427,29436,29451,29484,29511,29522,29529],{"__ignoreMap":104},[109,29277,29278,29280,29282,29284,29287],{"class":111,"line":112},[109,29279,25751],{"class":211},[109,29281,27495],{"class":278},[109,29283,28405],{"class":278},[109,29285,29286],{"class":133}," --name=ros_opencv_cuda",[109,29288,25853],{"class":133},[109,29290,29291,29294,29297],{"class":111,"line":119},[109,29292,29293],{"class":126},"--gpus ",[109,29295,29296],{"class":278},"all",[109,29298,25853],{"class":133},[109,29300,29301,29304,29307],{"class":111,"line":140},[109,29302,29303],{"class":126},"-e ",[109,29305,29306],{"class":278},"NVIDIA_DRIVER_CAPABILITIES=all",[109,29308,25853],{"class":133},[109,29310,29311,29313,29316,29319],{"class":111,"line":154},[109,29312,29303],{"class":126},[109,29314,29315],{"class":278},"DISPLAY=",[109,29317,29318],{"class":126},"$DISPLAY ",[109,29320,27350],{"class":133},[109,29322,29323,29326],{"class":111,"line":161},[109,29324,29325],{"class":126},"-dit ",[109,29327,27350],{"class":133},[109,29329,29330,29333],{"class":111,"line":167},[109,29331,29332],{"class":126},"--privileged ",[109,29334,27350],{"class":133},[109,29336,29337,29340],{"class":111,"line":185},[109,29338,29339],{"class":126},"--net=host ",[109,29341,27350],{"class":133},[109,29343,29344,29347,29350],{"class":111,"line":201},[109,29345,29346],{"class":126},"--group-add ",[109,29348,29349],{"class":278},"audio",[109,29351,25853],{"class":133},[109,29353,29354,29356,29359],{"class":111,"line":206},[109,29355,29346],{"class":126},[109,29357,29358],{"class":278},"video",[109,29360,25853],{"class":133},[109,29362,29363,29365,29368],{"class":111,"line":218},[109,29364,29346],{"class":126},[109,29366,29367],{"class":278},"dialout",[109,29369,25853],{"class":133},[109,29371,29372,29374,29377,29379,29382],{"class":111,"line":223},[109,29373,29303],{"class":126},[109,29375,29376],{"class":278},"XAUTHORITY=",[109,29378,29266],{"class":126},[109,29380,29381],{"class":278},"\u002F.Xauthority",[109,29383,25853],{"class":133},[109,29385,29386,29388,29391,29394],{"class":111,"line":229},[109,29387,29303],{"class":126},[109,29389,29390],{"class":278},"WAYLAND_DISPLAY=",[109,29392,29393],{"class":126},"$WAYLAND_DISPLAY ",[109,29395,27350],{"class":133},[109,29397,29398,29400,29403,29406],{"class":111,"line":244},[109,29399,29303],{"class":126},[109,29401,29402],{"class":278},"XDG_RUNTIME_DIR=",[109,29404,29405],{"class":126},"$XDG_RUNTIME_DIR ",[109,29407,27350],{"class":133},[109,29409,29410,29412,29415],{"class":111,"line":258},[109,29411,29303],{"class":126},[109,29413,29414],{"class":278},"QT_QPA_PLATFORM=xcb",[109,29416,25853],{"class":133},[109,29418,29419,29422,29425],{"class":111,"line":263},[109,29420,29421],{"class":126},"-v ",[109,29423,29424],{"class":278},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[109,29426,25853],{"class":133},[109,29428,29429,29431,29434],{"class":111,"line":269},[109,29430,29421],{"class":126},[109,29432,29433],{"class":278},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[109,29435,25853],{"class":133},[109,29437,29438,29441,29444,29446,29449],{"class":111,"line":304},[109,29439,29440],{"class":126},"-v $HOME",[109,29442,29443],{"class":278},"\u002F.Xauthority:",[109,29445,29266],{"class":126},[109,29447,29448],{"class":278},"\u002F.Xauthority:ro",[109,29450,25853],{"class":133},[109,29452,29453,29455,29458,29460,29463,29466,29468,29471,29473,29475,29477,29479,29482],{"class":111,"line":331},[109,29454,29421],{"class":126},[109,29456,29457],{"class":278},"\u002Frun\u002Fuser\u002F",[109,29459,26274],{"class":126},[109,29461,29462],{"class":211},"id",[109,29464,29465],{"class":133}," -u",[109,29467,290],{"class":126},[109,29469,29470],{"class":278},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[109,29472,26274],{"class":126},[109,29474,29462],{"class":211},[109,29476,29465],{"class":133},[109,29478,290],{"class":126},[109,29480,29481],{"class":278},"\u002Fwayland-0",[109,29483,25853],{"class":133},[109,29485,29486,29488,29490,29492,29494,29496,29498,29501,29503,29505,29507,29509],{"class":111,"line":336},[109,29487,29421],{"class":126},[109,29489,29457],{"class":278},[109,29491,26274],{"class":126},[109,29493,29462],{"class":211},[109,29495,29465],{"class":133},[109,29497,290],{"class":126},[109,29499,29500],{"class":278},":\u002Frun\u002Fuser\u002F",[109,29502,26274],{"class":126},[109,29504,29462],{"class":211},[109,29506,29465],{"class":133},[109,29508,14887],{"class":126},[109,29510,27350],{"class":133},[109,29512,29513,29515,29517,29520],{"class":111,"line":364},[109,29514,29440],{"class":126},[109,29516,2391],{"class":278},[109,29518,29519],{"class":126},"$HOME ",[109,29521,27350],{"class":133},[109,29523,29524,29527],{"class":111,"line":391},[109,29525,29526],{"class":126},"-w $HOME ",[109,29528,27350],{"class":133},[109,29530,29531],{"class":111,"line":396},[109,29532,29533],{"class":126},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29535,10343],{},[765,29537,29538,29546,29549,29552],{},[30,29539,29540,14968,29542,29545],{},[106,29541,29306],{},[106,29543,29544],{},"--gpus all","没有英伟达显卡请注释。",[30,29547,29548],{},"--name后面请自己为容器起名。",[30,29550,29551],{},"最后一行仓库名称请你自己找对应的镜像填上。",[30,29553,29554,29555,29560],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24727,29556,29557],{},[23,29558,29559],{},"请不要加","。",[99,29562,29564],{"className":24996,"code":29563,"language":24998,"meta":104,"style":104},"--ulimit nofile=1024:524288 \\\n",[106,29565,29566],{"__ignoreMap":104},[109,29567,29568,29571,29574],{"class":111,"line":112},[109,29569,29570],{"class":211},"--ulimit",[109,29572,29573],{"class":278}," nofile=1024:524288",[109,29575,25853],{"class":133},[19,29577,29578,29579,29584],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24727,29580,29581],{},[23,29582,29583],{},"不建议","**.**",[99,29586,29588],{"className":24996,"code":29587,"language":24998,"meta":104,"style":104},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[106,29589,29590,29617,29626],{"__ignoreMap":104},[109,29591,29592,29595,29598,29600,29602,29604,29606,29608,29610,29613,29615],{"class":111,"line":112},[109,29593,29594],{"class":211},"--user",[109,29596,29597],{"class":126}," $(",[109,29599,29462],{"class":211},[109,29601,29465],{"class":133},[109,29603,290],{"class":126},[109,29605,2391],{"class":278},[109,29607,26274],{"class":126},[109,29609,29462],{"class":211},[109,29611,29612],{"class":133}," -g",[109,29614,14887],{"class":126},[109,29616,27350],{"class":133},[109,29618,29619,29621,29624],{"class":111,"line":119},[109,29620,29421],{"class":126},[109,29622,29623],{"class":278},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[109,29625,25853],{"class":133},[109,29627,29628,29630,29633],{"class":111,"line":140},[109,29629,29421],{"class":126},[109,29631,29632],{"class":278},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[109,29634,25853],{"class":133},[1467,29636,29637],{},"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":104,"searchDepth":119,"depth":119,"links":29639},[29640,29641,29642],{"id":28638,"depth":140,"text":28639},{"id":28648,"depth":140,"text":28649},{"id":29059,"depth":140,"text":29062},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28630,"description":104},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29649,"title":29650,"body":29651,"description":104,"extension":1476,"meta":31274,"navigation":157,"path":31275,"seo":31276,"stem":31277,"__hash__":31278},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29652,"toc":31269},[29653,29656,29660,29663,29885,29889,29893,29896,30002,30007,30010,30015,30018,30023,30026,30031,30034,30046,30049,30054,30061,30089,30096,30172,30177,30180,30203,30205,30280,30285,30288,30292,30300,30305,30310,30314,30325,30331,30334,30337,30361,30364,30367,30395,30398,30401,30866,30869,30874,30879,30883,30906,30911,30915,30919,30922,30925,30928,30955,30958,30961,30979,30982,30985,31007,31015,31020,31025,31029,31032,31035,31038,31041,31086,31089,31107,31110,31115,31118,31139,31142,31198,31201,31206,31210,31213,31220,31223,31226,31231,31234,31250,31253,31266],[10,29654,29650],{"id":29655},"_6手动创建docker镜像",[51,29657,29659],{"id":29658},"_61dockerfile","6.1.DockerFile",[19,29661,29662],{},"常用命令：",[1677,29664,29665,29676],{},[1680,29666,29667],{},[1683,29668,29669,29672,29674],{},[1686,29670,29671],{"align":24910},"指令",[1686,29673,27044],{"align":24910},[1686,29675,28667],{"align":24910},[1723,29677,29678,29688,29704,29715,29726,29737,29748,29759,29770,29784,29798,29809,29823,29834,29845,29859,29874],{},[1683,29679,29680,29682,29685],{},[1728,29681,28545],{"align":24910},[1728,29683,29684],{"align":24910},"指定基础镜像，是 Dockerfile 的起点",[1728,29686,29687],{"align":24910},"FROM ubuntu:22.04",[1683,29689,29690,29693,29696],{},[1728,29691,29692],{"align":24910},"LABEL",[1728,29694,29695],{"align":24910},"添加元数据（如作者、版本等）",[1728,29697,29698,29699,29703],{"align":24910},"LABEL maintainer=”",[1776,29700,29702],{"href":29701},"mailto:you@example.com","you@example.com","”",[1683,29705,29706,29709,29712],{},[1728,29707,29708],{"align":24910},"ENV",[1728,29710,29711],{"align":24910},"设置环境变量",[1728,29713,29714],{"align":24910},"ENV PORT=8080",[1683,29716,29717,29720,29723],{},[1728,29718,29719],{"align":24910},"ARG",[1728,29721,29722],{"align":24910},"构建参数，只在构建期间可用",[1728,29724,29725],{"align":24910},"ARG VERSION=1.0",[1683,29727,29728,29731,29734],{},[1728,29729,29730],{"align":24910},"RUN",[1728,29732,29733],{"align":24910},"构建镜像时运行命令",[1728,29735,29736],{"align":24910},"RUN apt-get update && apt-get install -y curl",[1683,29738,29739,29742,29745],{},[1728,29740,29741],{"align":24910},"COPY",[1728,29743,29744],{"align":24910},"复制文件到镜像中",[1728,29746,29747],{"align":24910},"COPY . \u002Fapp",[1683,29749,29750,29753,29756],{},[1728,29751,29752],{"align":24910},"ADD",[1728,29754,29755],{"align":24910},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1728,29757,29758],{"align":24910},"ADD archive.tar.gz \u002Fdata\u002F",[1683,29760,29761,29764,29767],{},[1728,29762,29763],{"align":24910},"WORKDIR",[1728,29765,29766],{"align":24910},"设置工作目录",[1728,29768,29769],{"align":24910},"WORKDIR \u002Fopt",[1683,29771,29772,29775,29778],{},[1728,29773,29774],{"align":24910},"CMD",[1728,29776,29777],{"align":24910},"设置容器启动时默认命令（可被 docker run 覆盖）",[1728,29779,29780,29781],{"align":24910},"CMD ",[109,29782,29783],{},"“node”, “index.js”",[1683,29785,29786,29789,29792],{},[1728,29787,29788],{"align":24910},"ENTRYPOINT",[1728,29790,29791],{"align":24910},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1728,29793,29794,29795],{"align":24910},"ENTRYPOINT ",[109,29796,29797],{},"“python3”",[1683,29799,29800,29803,29806],{},[1728,29801,29802],{"align":24910},"EXPOSE",[1728,29804,29805],{"align":24910},"声明镜像内服务监听的端口（不会自动映射）",[1728,29807,29808],{"align":24910},"EXPOSE 80",[1683,29810,29811,29814,29817],{},[1728,29812,29813],{"align":24910},"VOLUME",[1728,29815,29816],{"align":24910},"声明数据卷挂载点",[1728,29818,29819,29820],{"align":24910},"VOLUME ",[109,29821,29822],{},"“\u002Fdata”",[1683,29824,29825,29828,29831],{},[1728,29826,29827],{"align":24910},"USER",[1728,29829,29830],{"align":24910},"设置后续命令执行的用户",[1728,29832,29833],{"align":24910},"USER appuser",[1683,29835,29836,29839,29842],{},[1728,29837,29838],{"align":24910},"ONBUILD",[1728,29840,29841],{"align":24910},"当镜像作为其他镜像基础镜像时触发的构建指令",[1728,29843,29844],{"align":24910},"ONBUILD COPY . \u002Fsrc",[1683,29846,29847,29850,29853],{},[1728,29848,29849],{"align":24910},"SHELL",[1728,29851,29852],{"align":24910},"更改默认 shell，比如将 sh -c 改为 bash -c",[1728,29854,29855,29856],{"align":24910},"SHELL ",[109,29857,29858],{},"“\u002Fbin\u002Fbash”, “-c”",[1683,29860,29861,29864,29867],{},[1728,29862,29863],{"align":24910},"HEALTHCHECK",[1728,29865,29866],{"align":24910},"定义容器运行时的健康检查命令",[1728,29868,29869,29870],{"align":24910},"`HEALTHCHECK CMD curl –fail ",[1776,29871,29872],{"href":29872,"rel":29873},"http:\u002F\u002Flocalhost:8080",[25039],[1683,29875,29876,29879,29882],{},[1728,29877,29878],{"align":24910},"STOPSIGNAL",[1728,29880,29881],{"align":24910},"容器停止时发送的信号",[1728,29883,29884],{"align":24910},"STOPSIGNAL SIGKILL",[51,29886,29888],{"id":29887},"_62自己创建容器","6.2.自己创建容器",[23171,29890,29892],{"id":29891},"_621手动创建","6.2.1.手动创建",[19,29894,29895],{},"在x86电脑上编译x86的：",[99,29897,29899],{"className":24996,"code":29898,"language":24998,"meta":104,"style":104},"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",[106,29900,29901,29917,29921,29934,29938,29951,29955,29968,29972,29985,29989],{"__ignoreMap":104},[109,29902,29903,29905,29908,29911,29914],{"class":111,"line":112},[109,29904,27728],{"class":211},[109,29906,29907],{"class":278}," build",[109,29909,29910],{"class":133}," -t",[109,29912,29913],{"class":278}," ros-melodic-cuda118-cudnn8-bionic:latest",[109,29915,29916],{"class":278}," .\n",[109,29918,29919],{"class":111,"line":119},[109,29920,158],{"emptyLinePlaceholder":157},[109,29922,29923,29925,29927,29929,29932],{"class":111,"line":140},[109,29924,27728],{"class":211},[109,29926,29907],{"class":278},[109,29928,29910],{"class":133},[109,29930,29931],{"class":278}," ros-noetic-focal:latest",[109,29933,29916],{"class":278},[109,29935,29936],{"class":111,"line":154},[109,29937,158],{"emptyLinePlaceholder":157},[109,29939,29940,29942,29944,29946,29949],{"class":111,"line":161},[109,29941,27728],{"class":211},[109,29943,29907],{"class":278},[109,29945,29910],{"class":133},[109,29947,29948],{"class":278}," ros-humble-jammy:latest",[109,29950,29916],{"class":278},[109,29952,29953],{"class":111,"line":167},[109,29954,158],{"emptyLinePlaceholder":157},[109,29956,29957,29959,29961,29963,29966],{"class":111,"line":185},[109,29958,27728],{"class":211},[109,29960,29907],{"class":278},[109,29962,29910],{"class":133},[109,29964,29965],{"class":278}," ros-jazzy-noble:latest",[109,29967,29916],{"class":278},[109,29969,29970],{"class":111,"line":201},[109,29971,158],{"emptyLinePlaceholder":157},[109,29973,29974,29976,29978,29980,29983],{"class":111,"line":206},[109,29975,27728],{"class":211},[109,29977,29907],{"class":278},[109,29979,29910],{"class":133},[109,29981,29982],{"class":278}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[109,29984,29916],{"class":278},[109,29986,29987],{"class":111,"line":218},[109,29988,158],{"emptyLinePlaceholder":157},[109,29990,29991,29993,29995,29997,30000],{"class":111,"line":223},[109,29992,27728],{"class":211},[109,29994,29907],{"class":278},[109,29996,29910],{"class":133},[109,29998,29999],{"class":278}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[109,30001,29916],{"class":278},[19,30003,30004],{},[938,30005],{"alt":104,"src":30006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30008,30009],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30011,30012],{},[938,30013],{"alt":104,"src":30014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30016,30017],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[765,30019,30020],{},[30,30021,30022],{},"创建 Docker Hub 账户",[19,30024,30025],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[765,30027,30028],{"start":119},[30,30029,30030],{},"登录 Docker Hub",[19,30032,30033],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[99,30035,30037],{"className":24996,"code":30036,"language":24998,"meta":104,"style":104},"docker login\n",[106,30038,30039],{"__ignoreMap":104},[109,30040,30041,30043],{"class":111,"line":112},[109,30042,27728],{"class":211},[109,30044,30045],{"class":278}," login\n",[19,30047,30048],{},"输入你的 Docker Hub 用户名和密码进行验证。",[765,30050,30051],{},[30,30052,30053],{},"为你的镜像打标签",[19,30055,30056,30057,30060],{},"Docker Hub 使用 ",[106,30058,30059],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[99,30062,30064],{"className":24996,"code":30063,"language":24998,"meta":104,"style":104},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[106,30065,30066],{"__ignoreMap":104},[109,30067,30068,30070,30073,30075,30078,30081,30084,30086],{"class":111,"line":112},[109,30069,27728],{"class":211},[109,30071,30072],{"class":278}," tag",[109,30074,29965],{"class":278},[109,30076,30077],{"class":122}," \u003C",[109,30079,30080],{"class":278},"你的用户",[109,30082,30083],{"class":126},"名",[109,30085,2490],{"class":122},[109,30087,30088],{"class":278},"\u002Fros-jazzy-noble:latest\n",[19,30090,30091,30092,30095],{},"例如，如果你的 Docker Hub 用户名是 ",[106,30093,30094],{},"tungchiahui","，你应该执行：",[99,30097,30099],{"className":24996,"code":30098,"language":24998,"meta":104,"style":104},"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",[106,30100,30101,30112,30116,30127,30131,30142,30146,30157,30161],{"__ignoreMap":104},[109,30102,30103,30105,30107,30109],{"class":111,"line":112},[109,30104,27728],{"class":211},[109,30106,30072],{"class":278},[109,30108,29931],{"class":278},[109,30110,30111],{"class":278}," tungchiahui\u002Fros-noetic-focal:latest\n",[109,30113,30114],{"class":111,"line":119},[109,30115,158],{"emptyLinePlaceholder":157},[109,30117,30118,30120,30122,30124],{"class":111,"line":140},[109,30119,27728],{"class":211},[109,30121,30072],{"class":278},[109,30123,29948],{"class":278},[109,30125,30126],{"class":278}," tungchiahui\u002Fros-humble-jammy:latest\n",[109,30128,30129],{"class":111,"line":154},[109,30130,158],{"emptyLinePlaceholder":157},[109,30132,30133,30135,30137,30139],{"class":111,"line":161},[109,30134,27728],{"class":211},[109,30136,30072],{"class":278},[109,30138,29965],{"class":278},[109,30140,30141],{"class":278}," tungchiahui\u002Fros-jazzy-noble:latest\n",[109,30143,30144],{"class":111,"line":167},[109,30145,158],{"emptyLinePlaceholder":157},[109,30147,30148,30150,30152,30154],{"class":111,"line":185},[109,30149,27728],{"class":211},[109,30151,30072],{"class":278},[109,30153,29982],{"class":278},[109,30155,30156],{"class":278}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[109,30158,30159],{"class":111,"line":201},[109,30160,158],{"emptyLinePlaceholder":157},[109,30162,30163,30165,30167,30169],{"class":111,"line":206},[109,30164,27728],{"class":211},[109,30166,30072],{"class":278},[109,30168,29999],{"class":278},[109,30170,30171],{"class":278}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[765,30173,30174],{"start":119},[30,30175,30176],{},"推送镜像到 Docker Hub",[19,30178,30179],{},"使用以下命令将镜像推送到 Docker Hub：",[99,30181,30183],{"className":24996,"code":30182,"language":24998,"meta":104,"style":104},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[106,30184,30185],{"__ignoreMap":104},[109,30186,30187,30189,30192,30194,30196,30198,30200],{"class":111,"line":112},[109,30188,27728],{"class":211},[109,30190,30191],{"class":278}," push",[109,30193,30077],{"class":122},[109,30195,30080],{"class":278},[109,30197,30083],{"class":126},[109,30199,2490],{"class":122},[109,30201,30202],{"class":278},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30204,15806],{},[99,30206,30208],{"className":24996,"code":30207,"language":24998,"meta":104,"style":104},"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",[106,30209,30210,30218,30222,30230,30234,30242,30246,30255,30259,30267,30271],{"__ignoreMap":104},[109,30211,30212,30214,30216],{"class":111,"line":112},[109,30213,27728],{"class":211},[109,30215,30191],{"class":278},[109,30217,30111],{"class":278},[109,30219,30220],{"class":111,"line":119},[109,30221,158],{"emptyLinePlaceholder":157},[109,30223,30224,30226,30228],{"class":111,"line":140},[109,30225,27728],{"class":211},[109,30227,30191],{"class":278},[109,30229,30126],{"class":278},[109,30231,30232],{"class":111,"line":154},[109,30233,158],{"emptyLinePlaceholder":157},[109,30235,30236,30238,30240],{"class":111,"line":161},[109,30237,27728],{"class":211},[109,30239,30191],{"class":278},[109,30241,30141],{"class":278},[109,30243,30244],{"class":111,"line":167},[109,30245,158],{"emptyLinePlaceholder":157},[109,30247,30248,30250,30252],{"class":111,"line":185},[109,30249,27728],{"class":211},[109,30251,30191],{"class":278},[109,30253,30254],{"class":278}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[109,30256,30257],{"class":111,"line":201},[109,30258,158],{"emptyLinePlaceholder":157},[109,30260,30261,30263,30265],{"class":111,"line":206},[109,30262,27728],{"class":211},[109,30264,30191],{"class":278},[109,30266,30171],{"class":278},[109,30268,30269],{"class":111,"line":218},[109,30270,158],{"emptyLinePlaceholder":157},[109,30272,30273,30275,30277],{"class":111,"line":223},[109,30274,27728],{"class":211},[109,30276,30191],{"class":278},[109,30278,30279],{"class":278}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[765,30281,30282],{"start":140},[30,30283,30284],{},"验证推送成功",[19,30286,30287],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30289,30290],{},[23,30291,5127],{},[27,30293,30294,30297],{},[30,30295,30296],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[30,30298,30299],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30301,30302],{},[938,30303],{"alt":104,"src":30304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30306,30307],{},[938,30308],{"alt":104,"src":30309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23171,30311,30313],{"id":30312},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30315,30316,30317,30320,30321,30324],{},"如果您想在 ",[23,30318,30319],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[23,30322,30323],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30326,30327,30328],{},"1. ",[23,30329,30330],{},"启用 Docker 跨平台构建",[19,30332,30333],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30335,30336],{},"第一步：启用 buildx（只需执行一次）",[99,30338,30340],{"className":24996,"code":30339,"language":24998,"meta":104,"style":104},"docker buildx create --name multiarch_builder --use\n",[106,30341,30342],{"__ignoreMap":104},[109,30343,30344,30346,30349,30352,30355,30358],{"class":111,"line":112},[109,30345,27728],{"class":211},[109,30347,30348],{"class":278}," buildx",[109,30350,30351],{"class":278}," create",[109,30353,30354],{"class":133}," --name",[109,30356,30357],{"class":278}," multiarch_builder",[109,30359,30360],{"class":133}," --use\n",[19,30362,30363],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30365,30366],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[99,30368,30370],{"className":24996,"code":30369,"language":24998,"meta":104,"style":104},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[106,30371,30372],{"__ignoreMap":104},[109,30373,30374,30376,30378,30380,30383,30386,30389,30392],{"class":111,"line":112},[109,30375,27728],{"class":211},[109,30377,28405],{"class":278},[109,30379,28408],{"class":133},[109,30381,30382],{"class":133}," --privileged",[109,30384,30385],{"class":278}," multiarch\u002Fqemu-user-static",[109,30387,30388],{"class":133}," --reset",[109,30390,30391],{"class":133}," -p",[109,30393,30394],{"class":278}," yes\n",[19,30396,30397],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30399,30400],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[99,30402,30404],{"className":24996,"code":30403,"language":24998,"meta":104,"style":104},"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",[106,30405,30406,30448,30452,30457,30467,30477,30486,30492,30496,30500,30510,30518,30527,30533,30537,30541,30551,30559,30568,30574,30578,30582,30592,30600,30609,30615,30619,30623,30633,30641,30650,30656,30660,30664,30674,30682,30691,30697,30701,30705,30715,30723,30732,30738,30742,30746,30756,30764,30773,30779,30783,30787,30797,30805,30814,30820,30824,30828,30839,30847,30856,30862],{"__ignoreMap":104},[109,30407,30408,30410,30412,30414,30417,30420,30422,30424,30427,30429,30431,30433,30435,30438,30441,30443,30446],{"class":111,"line":112},[109,30409,27728],{"class":211},[109,30411,30348],{"class":278},[109,30413,29907],{"class":278},[109,30415,30416],{"class":133}," --platform",[109,30418,30419],{"class":278}," linux\u002Famd64,linux\u002Farm64",[109,30421,29910],{"class":133},[109,30423,30077],{"class":122},[109,30425,30426],{"class":278},"你的镜像",[109,30428,30083],{"class":126},[109,30430,2490],{"class":122},[109,30432,2391],{"class":278},[109,30434,1320],{"class":122},[109,30436,30437],{"class":278},"标",[109,30439,30440],{"class":126},"签",[109,30442,2490],{"class":122},[109,30444,30445],{"class":133}," --push",[109,30447,29916],{"class":278},[109,30449,30450],{"class":111,"line":119},[109,30451,158],{"emptyLinePlaceholder":157},[109,30453,30454],{"class":111,"line":140},[109,30455,30456],{"class":115},"# 例子：\n",[109,30458,30459,30461,30463,30465],{"class":111,"line":154},[109,30460,27728],{"class":211},[109,30462,30348],{"class":278},[109,30464,29907],{"class":278},[109,30466,25853],{"class":133},[109,30468,30469,30472,30475],{"class":111,"line":161},[109,30470,30471],{"class":126},"--platform ",[109,30473,30474],{"class":278},"linux\u002Famd64,linux\u002Farm64",[109,30476,25853],{"class":133},[109,30478,30479,30481,30484],{"class":111,"line":167},[109,30480,29910],{"class":133},[109,30482,30483],{"class":278}," tungchiahui\u002Fros:noetic-focal",[109,30485,25853],{"class":133},[109,30487,30488,30490],{"class":111,"line":185},[109,30489,30445],{"class":133},[109,30491,25853],{"class":133},[109,30493,30494],{"class":111,"line":201},[109,30495,29916],{"class":278},[109,30497,30498],{"class":111,"line":206},[109,30499,158],{"emptyLinePlaceholder":157},[109,30501,30502,30504,30506,30508],{"class":111,"line":218},[109,30503,27728],{"class":211},[109,30505,30348],{"class":278},[109,30507,29907],{"class":278},[109,30509,25853],{"class":133},[109,30511,30512,30514,30516],{"class":111,"line":223},[109,30513,30471],{"class":126},[109,30515,30474],{"class":278},[109,30517,25853],{"class":133},[109,30519,30520,30522,30525],{"class":111,"line":229},[109,30521,29910],{"class":133},[109,30523,30524],{"class":278}," tungchiahui\u002Fros:humble-jammy",[109,30526,25853],{"class":133},[109,30528,30529,30531],{"class":111,"line":244},[109,30530,30445],{"class":133},[109,30532,25853],{"class":133},[109,30534,30535],{"class":111,"line":258},[109,30536,29916],{"class":278},[109,30538,30539],{"class":111,"line":263},[109,30540,158],{"emptyLinePlaceholder":157},[109,30542,30543,30545,30547,30549],{"class":111,"line":269},[109,30544,27728],{"class":211},[109,30546,30348],{"class":278},[109,30548,29907],{"class":278},[109,30550,25853],{"class":133},[109,30552,30553,30555,30557],{"class":111,"line":304},[109,30554,30471],{"class":126},[109,30556,30474],{"class":278},[109,30558,25853],{"class":133},[109,30560,30561,30563,30566],{"class":111,"line":331},[109,30562,29910],{"class":133},[109,30564,30565],{"class":278}," tungchiahui\u002Fros:jazzy-noble",[109,30567,25853],{"class":133},[109,30569,30570,30572],{"class":111,"line":336},[109,30571,30445],{"class":133},[109,30573,25853],{"class":133},[109,30575,30576],{"class":111,"line":364},[109,30577,29916],{"class":278},[109,30579,30580],{"class":111,"line":391},[109,30581,158],{"emptyLinePlaceholder":157},[109,30583,30584,30586,30588,30590],{"class":111,"line":396},[109,30585,27495],{"class":211},[109,30587,30348],{"class":278},[109,30589,29907],{"class":278},[109,30591,25853],{"class":133},[109,30593,30594,30596,30598],{"class":111,"line":402},[109,30595,30471],{"class":126},[109,30597,30474],{"class":278},[109,30599,25853],{"class":133},[109,30601,30602,30604,30607],{"class":111,"line":419},[109,30603,29910],{"class":133},[109,30605,30606],{"class":278}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[109,30608,25853],{"class":133},[109,30610,30611,30613],{"class":111,"line":435},[109,30612,30445],{"class":133},[109,30614,25853],{"class":133},[109,30616,30617],{"class":111,"line":440},[109,30618,29916],{"class":278},[109,30620,30621],{"class":111,"line":467},[109,30622,158],{"emptyLinePlaceholder":157},[109,30624,30625,30627,30629,30631],{"class":111,"line":494},[109,30626,27728],{"class":211},[109,30628,30348],{"class":278},[109,30630,29907],{"class":278},[109,30632,25853],{"class":133},[109,30634,30635,30637,30639],{"class":111,"line":499},[109,30636,30471],{"class":126},[109,30638,30474],{"class":278},[109,30640,25853],{"class":133},[109,30642,30643,30645,30648],{"class":111,"line":526},[109,30644,29910],{"class":133},[109,30646,30647],{"class":278}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[109,30649,25853],{"class":133},[109,30651,30652,30654],{"class":111,"line":552},[109,30653,30445],{"class":133},[109,30655,25853],{"class":133},[109,30657,30658],{"class":111,"line":557},[109,30659,29916],{"class":278},[109,30661,30662],{"class":111,"line":584},[109,30663,158],{"emptyLinePlaceholder":157},[109,30665,30666,30668,30670,30672],{"class":111,"line":611},[109,30667,27495],{"class":211},[109,30669,30348],{"class":278},[109,30671,29907],{"class":278},[109,30673,25853],{"class":133},[109,30675,30676,30678,30680],{"class":111,"line":616},[109,30677,30471],{"class":126},[109,30679,30474],{"class":278},[109,30681,25853],{"class":133},[109,30683,30684,30686,30689],{"class":111,"line":633},[109,30685,29910],{"class":133},[109,30687,30688],{"class":278}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[109,30690,25853],{"class":133},[109,30692,30693,30695],{"class":111,"line":649},[109,30694,30445],{"class":133},[109,30696,25853],{"class":133},[109,30698,30699],{"class":111,"line":676},[109,30700,29916],{"class":278},[109,30702,30703],{"class":111,"line":703},[109,30704,158],{"emptyLinePlaceholder":157},[109,30706,30707,30709,30711,30713],{"class":111,"line":708},[109,30708,27728],{"class":211},[109,30710,30348],{"class":278},[109,30712,29907],{"class":278},[109,30714,25853],{"class":133},[109,30716,30717,30719,30721],{"class":111,"line":723},[109,30718,30471],{"class":126},[109,30720,30474],{"class":278},[109,30722,25853],{"class":133},[109,30724,30725,30727,30730],{"class":111,"line":728},[109,30726,29910],{"class":133},[109,30728,30729],{"class":278}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[109,30731,25853],{"class":133},[109,30733,30734,30736],{"class":111,"line":739},[109,30735,30445],{"class":133},[109,30737,25853],{"class":133},[109,30739,30740],{"class":111,"line":9352},[109,30741,29916],{"class":278},[109,30743,30744],{"class":111,"line":9364},[109,30745,158],{"emptyLinePlaceholder":157},[109,30747,30748,30750,30752,30754],{"class":111,"line":9376},[109,30749,27728],{"class":211},[109,30751,30348],{"class":278},[109,30753,29907],{"class":278},[109,30755,25853],{"class":133},[109,30757,30758,30760,30762],{"class":111,"line":11034},[109,30759,30471],{"class":126},[109,30761,30474],{"class":278},[109,30763,25853],{"class":133},[109,30765,30766,30768,30771],{"class":111,"line":11059},[109,30767,29910],{"class":133},[109,30769,30770],{"class":278}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[109,30772,25853],{"class":133},[109,30774,30775,30777],{"class":111,"line":11082},[109,30776,30445],{"class":133},[109,30778,25853],{"class":133},[109,30780,30781],{"class":111,"line":11106},[109,30782,29916],{"class":278},[109,30784,30785],{"class":111,"line":11111},[109,30786,158],{"emptyLinePlaceholder":157},[109,30788,30789,30791,30793,30795],{"class":111,"line":11116},[109,30790,27495],{"class":211},[109,30792,30348],{"class":278},[109,30794,29907],{"class":278},[109,30796,25853],{"class":133},[109,30798,30799,30801,30803],{"class":111,"line":11121},[109,30800,30471],{"class":126},[109,30802,30474],{"class":278},[109,30804,25853],{"class":133},[109,30806,30807,30809,30812],{"class":111,"line":11130},[109,30808,29910],{"class":133},[109,30810,30811],{"class":278}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[109,30813,25853],{"class":133},[109,30815,30816,30818],{"class":111,"line":11135},[109,30817,30445],{"class":133},[109,30819,25853],{"class":133},[109,30821,30822],{"class":111,"line":11141},[109,30823,29916],{"class":278},[109,30825,30826],{"class":111,"line":11162},[109,30827,158],{"emptyLinePlaceholder":157},[109,30829,30830,30833,30835,30837],{"class":111,"line":11168},[109,30831,30832],{"class":211},"  docker",[109,30834,30348],{"class":278},[109,30836,29907],{"class":278},[109,30838,25853],{"class":133},[109,30840,30841,30843,30845],{"class":111,"line":11182},[109,30842,30471],{"class":126},[109,30844,30474],{"class":278},[109,30846,25853],{"class":133},[109,30848,30849,30851,30854],{"class":111,"line":11188},[109,30850,29910],{"class":133},[109,30852,30853],{"class":278}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[109,30855,25853],{"class":133},[109,30857,30858,30860],{"class":111,"line":11215},[109,30859,30445],{"class":133},[109,30861,25853],{"class":133},[109,30863,30864],{"class":111,"line":11224},[109,30865,29916],{"class":278},[19,30867,30868],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30870,30871],{},[938,30872],{"alt":104,"src":30873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30875,30876],{},[938,30877],{"alt":104,"src":30878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23171,30880,30882],{"id":30881},"_623清除构建缓存","6.2.3.清除构建缓存",[99,30884,30886],{"className":24996,"code":30885,"language":24998,"meta":104,"style":104},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[106,30887,30888,30893],{"__ignoreMap":104},[109,30889,30890],{"class":111,"line":112},[109,30891,30892],{"class":115},"# 清理BuildKit构建缓存\n",[109,30894,30895,30897,30900,30903],{"class":111,"line":119},[109,30896,27728],{"class":211},[109,30898,30899],{"class":278}," builder",[109,30901,30902],{"class":278}," prune",[109,30904,30905],{"class":133}," -f\n",[19,30907,30908],{},[938,30909],{"alt":104,"src":30910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[51,30912,30914],{"id":30913},"_63补充","6.3.补充",[23171,30916,30918],{"id":30917},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30920,30921],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30923,30924],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30926,30927],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[99,30929,30931],{"className":24996,"code":30930,"language":24998,"meta":104,"style":104},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[106,30932,30933,30940],{"__ignoreMap":104},[109,30934,30935,30937],{"class":111,"line":112},[109,30936,28545],{"class":211},[109,30938,30939],{"class":278}," nginx\n",[109,30941,30942,30944,30947,30950,30952],{"class":111,"line":119},[109,30943,29730],{"class":211},[109,30945,30946],{"class":278}," echo",[109,30948,30949],{"class":278}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[109,30951,27397],{"class":122},[109,30953,30954],{"class":278}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30956,30957],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30959,30960],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[99,30962,30964],{"className":24996,"code":30963,"language":24998,"meta":104,"style":104},"docker build -t nginx:tuling .\n",[106,30965,30966],{"__ignoreMap":104},[109,30967,30968,30970,30972,30974,30977],{"class":111,"line":112},[109,30969,27728],{"class":211},[109,30971,29907],{"class":278},[109,30973,29910],{"class":133},[109,30975,30976],{"class":278}," nginx:tuling",[109,30978,29916],{"class":278},[19,30980,30981],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30983,30984],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[99,30986,30988],{"className":24996,"code":30987,"language":24998,"meta":104,"style":104},"docker run -d -p 92:80 nginx:tuling\n",[106,30989,30990],{"__ignoreMap":104},[109,30991,30992,30994,30996,30999,31001,31004],{"class":111,"line":112},[109,30993,27728],{"class":211},[109,30995,28405],{"class":278},[109,30997,30998],{"class":133}," -d",[109,31000,30391],{"class":133},[109,31002,31003],{"class":278}," 92:80",[109,31005,31006],{"class":278}," nginx:tuling\n",[19,31008,31009,31010],{},"4、访问 ",[1776,31011,31014],{"href":31012,"rel":31013},"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",[25039],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31016,31017],{},[938,31018],{"alt":104,"src":31019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31021,31022],{},[938,31023],{"alt":104,"src":31024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23171,31026,31028],{"id":31027},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31030,31031],{},"只需要知道大体流程即可",[19,31033,31034],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31036,31037],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31039,31040],{},"2、在Dockerfile中添加以下内容",[99,31042,31044],{"className":27266,"code":31043,"language":27268,"meta":104,"style":104},"# 基于哪个镜像\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",[106,31045,31046,31051,31056,31061,31066,31071,31076,31081],{"__ignoreMap":104},[109,31047,31048],{"class":111,"line":112},[109,31049,31050],{},"# 基于哪个镜像\n",[109,31052,31053],{"class":111,"line":119},[109,31054,31055],{},"From java:8\n",[109,31057,31058],{"class":111,"line":140},[109,31059,31060],{},"# 复制文件到容器\n",[109,31062,31063],{"class":111,"line":154},[109,31064,31065],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[109,31067,31068],{"class":111,"line":161},[109,31069,31070],{},"# 声明需要暴露的端口\n",[109,31072,31073],{"class":111,"line":167},[109,31074,31075],{},"EXPOSE 8877\n",[109,31077,31078],{"class":111,"line":185},[109,31079,31080],{},"# 配置容器启动后执行的命令\n",[109,31082,31083],{"class":111,"line":201},[109,31084,31085],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31087,31088],{},"3、使用docker build命令构建镜像",[99,31090,31092],{"className":24996,"code":31091,"language":24998,"meta":104,"style":104},"docker build -t tulingmall-member:0.0.5 .\n",[106,31093,31094],{"__ignoreMap":104},[109,31095,31096,31098,31100,31102,31105],{"class":111,"line":112},[109,31097,27728],{"class":211},[109,31099,29907],{"class":278},[109,31101,29910],{"class":133},[109,31103,31104],{"class":278}," tulingmall-member:0.0.5",[109,31106,29916],{"class":278},[19,31108,31109],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31111,31112],{},[938,31113],{"alt":104,"src":31114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31116,31117],{},"4、启动镜像，加-d可在后台启动",[99,31119,31121],{"className":24996,"code":31120,"language":24998,"meta":104,"style":104},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[106,31122,31123],{"__ignoreMap":104},[109,31124,31125,31127,31129,31131,31133,31136],{"class":111,"line":112},[109,31126,27728],{"class":211},[109,31128,28405],{"class":278},[109,31130,30998],{"class":133},[109,31132,30391],{"class":133},[109,31134,31135],{"class":278}," 8877:8877",[109,31137,31138],{"class":278}," tulingmall-member:0.0.5\n",[19,31140,31141],{},"加上JVM参数：",[99,31143,31145],{"className":24996,"code":31144,"language":24998,"meta":104,"style":104},"# --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",[106,31146,31147,31152,31167,31177,31186,31193],{"__ignoreMap":104},[109,31148,31149],{"class":111,"line":112},[109,31150,31151],{"class":115},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[109,31153,31154,31156,31158,31161,31163,31165],{"class":111,"line":119},[109,31155,27728],{"class":211},[109,31157,28405],{"class":278},[109,31159,31160],{"class":133},"  -d",[109,31162,30391],{"class":133},[109,31164,31135],{"class":278},[109,31166,25853],{"class":133},[109,31168,31169,31171,31174],{"class":111,"line":140},[109,31170,29303],{"class":126},[109,31172,31173],{"class":278},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[109,31175,31176],{"class":133},"  \\\n",[109,31178,31179,31181,31184],{"class":111,"line":154},[109,31180,29303],{"class":126},[109,31182,31183],{"class":278},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[109,31185,31176],{"class":133},[109,31187,31188,31191],{"class":111,"line":161},[109,31189,31190],{"class":126},"--cap-add=SYS_PTRACE  ",[109,31192,27350],{"class":133},[109,31194,31195],{"class":111,"line":167},[109,31196,31197],{"class":126},"tulingmall-member:0.0.5\n",[19,31199,31200],{},"5、访问会员服务接口",[19,31202,31203],{},[938,31204],{"alt":104,"src":31205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23171,31207,31209],{"id":31208},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31211,31212],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31214,31215,31216],{},"阿里云docker镜像仓库：",[1776,31217,31218],{"href":31218,"rel":31219},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25039],[19,31221,31222],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31224,31225],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31227,31228],{},[938,31229],{"alt":104,"src":31230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31232,31233],{},"要把镜像推送到镜像仓库",[99,31235,31237],{"className":24996,"code":31236,"language":24998,"meta":104,"style":104},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[106,31238,31239],{"__ignoreMap":104},[109,31240,31241,31243,31245,31247],{"class":111,"line":112},[109,31242,27728],{"class":211},[109,31244,30072],{"class":278},[109,31246,31104],{"class":278},[109,31248,31249],{"class":278}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31251,31252],{},"最后将镜像推送到远程仓库",[99,31254,31256],{"className":24996,"code":31255,"language":24998,"meta":104,"style":104},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[106,31257,31258],{"__ignoreMap":104},[109,31259,31260,31262,31264],{"class":111,"line":112},[109,31261,27728],{"class":211},[109,31263,30191],{"class":278},[109,31265,31249],{"class":278},[1467,31267,31268],{},"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":104,"searchDepth":119,"depth":119,"links":31270},[31271,31272,31273],{"id":29658,"depth":140,"text":29659},{"id":29887,"depth":140,"text":29888},{"id":30913,"depth":140,"text":30914},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29650,"description":104},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31280,"title":31281,"body":31282,"description":104,"extension":1476,"meta":31425,"navigation":157,"path":31426,"seo":31427,"stem":31428,"__hash__":31429},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31283,"toc":31423},[31284,31287,31292,31297,31300,31305,31310,31313,31318,31323,31326,31331,31334,31337,31340,31343,31346,31349,31369,31391,31394,31397,31417,31420],[10,31285,31281],{"id":31286},"_7vscode远程开发",[765,31288,31289],{},[30,31290,31291],{},"插件1：微软Docker工具",[19,31293,31294],{},[938,31295],{"alt":104,"src":31296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31298,31299],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31301,31302],{},[938,31303],{"alt":104,"src":31304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[765,31306,31307],{"start":119},[30,31308,31309],{},"插件2：微软Docker远程开发工具",[19,31311,31312],{},"下面这是远程开发的插件。",[19,31314,31315],{},[938,31316],{"alt":104,"src":31317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31319,31320],{},[938,31321],{"alt":104,"src":31322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31324,31325],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31327,31328],{},[938,31329],{"alt":104,"src":31330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31332,31333],{},"安装完拓展之后，vscode进行链接：",[19,31335,31336],{},"1.按ctrl+shift+p",[19,31338,31339],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31341,31342],{},"3.选择目前运行的容器",[19,31344,31345],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31347,31348],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[99,31350,31352],{"className":24996,"code":31351,"language":24998,"meta":104,"style":104},"docker run -v 主机目录:容器目录 image-name\n",[106,31353,31354],{"__ignoreMap":104},[109,31355,31356,31358,31360,31363,31366],{"class":111,"line":112},[109,31357,27728],{"class":211},[109,31359,28405],{"class":278},[109,31361,31362],{"class":133}," -v",[109,31364,31365],{"class":278}," 主机目录:容器目录",[109,31367,31368],{"class":278}," image-name\n",[99,31370,31372],{"className":24996,"code":31371,"language":24998,"meta":104,"style":104},"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",[106,31373,31374],{"__ignoreMap":104},[109,31375,31376,31378,31380,31383,31385,31388],{"class":111,"line":112},[109,31377,27728],{"class":211},[109,31379,28405],{"class":278},[109,31381,31382],{"class":133}," -it",[109,31384,31362],{"class":133},[109,31386,31387],{"class":278}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[109,31389,31390],{"class":278}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31392,31393],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31395,31396],{},"查看挂载情况：",[99,31398,31400],{"className":24996,"code":31399,"language":24998,"meta":104,"style":104},"mount | grep -i project\n",[106,31401,31402],{"__ignoreMap":104},[109,31403,31404,31407,31409,31412,31414],{"class":111,"line":112},[109,31405,31406],{"class":211},"mount",[109,31408,26284],{"class":122},[109,31410,31411],{"class":211}," grep",[109,31413,27605],{"class":133},[109,31415,31416],{"class":278}," project\n",[19,31418,31419],{},"也可以通过ls来进行查看",[1467,31421,31422],{},"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":104,"searchDepth":119,"depth":119,"links":31424},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31281,"description":104},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31431,"title":31432,"body":31433,"description":24550,"extension":1476,"meta":31437,"navigation":157,"path":31439,"seo":31440,"stem":31441,"__hash__":31442},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31434,"toc":31435},[],{"title":104,"searchDepth":119,"depth":119,"links":31436},[],{"category":31438},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31432,"description":24550},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31444,"title":31445,"body":31446,"description":24550,"extension":1476,"meta":31450,"navigation":157,"path":31451,"seo":31452,"stem":31453,"__hash__":31454},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31447,"toc":31448},[],{"title":104,"searchDepth":119,"depth":119,"links":31449},[],{"category":31438},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31445,"description":24550},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31456,"title":31457,"body":31458,"description":24550,"extension":1476,"meta":31751,"navigation":157,"path":31752,"seo":31753,"stem":31754,"__hash__":31755},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31459,"toc":31749},[31460,31463,31471,31486,31491,31542,31545,31551,31738,31743,31746],[10,31461,31457],{"id":31462},"_1验证深度学习环境",[19,31464,31465,31466],{},"关于环境的安装，看",[1776,31467,31470],{"href":31468,"rel":31469},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25039],"Pytorch-->深度学习",[19,31472,31473,31474,31477,31478,31481,31482,31485],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[106,31475,31476],{},"pytorch-cuda=12.4"," 是一个“ ",[23,31479,31480],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[23,31483,31484],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31487,31488],{},[938,31489],{"alt":104,"src":31490},"\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",[99,31492,31494],{"className":24996,"code":31493,"language":24998,"meta":104,"style":104},"# 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",[106,31495,31496,31501],{"__ignoreMap":104},[109,31497,31498],{"class":111,"line":112},[109,31499,31500],{"class":115},"# CUDA 12.4\n",[109,31502,31503,31506,31508,31511,31514,31517,31520,31523,31525,31528,31531,31534,31537,31539],{"class":111,"line":119},[109,31504,31505],{"class":211},"conda",[109,31507,25008],{"class":278},[109,31509,31510],{"class":278}," pytorch==",[109,31512,31513],{"class":133},"2.5.1",[109,31515,31516],{"class":278}," torchvision==",[109,31518,31519],{"class":133},"0.20.1",[109,31521,31522],{"class":278}," torchaudio==",[109,31524,31513],{"class":133},[109,31526,31527],{"class":278}," pytorch-cuda=",[109,31529,31530],{"class":133},"12.4",[109,31532,31533],{"class":133}," -c",[109,31535,31536],{"class":278}," pytorch",[109,31538,31533],{"class":133},[109,31540,31541],{"class":278}," nvidia\n",[19,31543,31544],{},"）：",[19,31546,31547],{},[1776,31548,31549],{"href":31549,"rel":31550},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25039],[99,31552,31556],{"className":31553,"code":31554,"language":31555,"meta":104,"style":104},"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",[106,31557,31558,31563,31571,31576,31586,31602,31607,31617,31654,31661,31673,31689,31694,31704,31716,31726],{"__ignoreMap":104},[109,31559,31560],{"class":111,"line":112},[109,31561,31562],{"class":115},"# 对深度学习环境进行测试\n",[109,31564,31565,31568],{"class":111,"line":119},[109,31566,31567],{"class":122},"import",[109,31569,31570],{"class":126}," torch\n",[109,31572,31573],{"class":111,"line":140},[109,31574,31575],{"class":115},"# 查看cuda是否被激活\n",[109,31577,31578,31581,31583],{"class":111,"line":154},[109,31579,31580],{"class":126},"flag",[109,31582,130],{"class":122},[109,31584,31585],{"class":126},"torch.cuda.is_available()\n",[109,31587,31588,31591,31593,31596,31599],{"class":111,"line":161},[109,31589,31590],{"class":133},"print",[109,31592,714],{"class":126},[109,31594,31595],{"class":278},"\"cuda:\"",[109,31597,31598],{"class":126},", flag)   ",[109,31600,31601],{"class":115},"#返回true的话说明被激活\n",[109,31603,31604],{"class":111,"line":167},[109,31605,31606],{"class":115},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[109,31608,31609,31612,31614],{"class":111,"line":185},[109,31610,31611],{"class":126},"ngpu",[109,31613,130],{"class":122},[109,31615,31616],{"class":133},"1\n",[109,31618,31619,31622,31624,31627,31630,31632,31635,31638,31641,31643,31645,31647,31649,31652],{"class":111,"line":201},[109,31620,31621],{"class":126},"device",[109,31623,130],{"class":122},[109,31625,31626],{"class":126},"torch.device(",[109,31628,31629],{"class":278},"\"cuda:0\"",[109,31631,3080],{"class":122},[109,31633,31634],{"class":126},"(torch.cuda.is_available() ",[109,31636,31637],{"class":122},"and",[109,31639,31640],{"class":126}," ngpu",[109,31642,2490],{"class":122},[109,31644,1314],{"class":133},[109,31646,14887],{"class":126},[109,31648,3077],{"class":122},[109,31650,31651],{"class":278}," \"cpu\"",[109,31653,1330],{"class":126},[109,31655,31656,31658],{"class":111,"line":206},[109,31657,31590],{"class":133},[109,31659,31660],{"class":126},"(device)\n",[109,31662,31663,31665,31668,31670],{"class":111,"line":218},[109,31664,31590],{"class":133},[109,31666,31667],{"class":126},"(torch.cuda.get_device_name(",[109,31669,1314],{"class":133},[109,31671,31672],{"class":126},"))\n",[109,31674,31675,31677,31680,31682,31684,31686],{"class":111,"line":223},[109,31676,31590],{"class":133},[109,31678,31679],{"class":126},"(torch.rand(",[109,31681,1612],{"class":133},[109,31683,1914],{"class":126},[109,31685,1612],{"class":133},[109,31687,31688],{"class":126},").cuda())\n",[109,31690,31691],{"class":111,"line":229},[109,31692,31693],{"class":115},"# 查看cuda和cudnn的版本\n",[109,31695,31696,31699,31701],{"class":111,"line":244},[109,31697,31698],{"class":126},"cuda_version",[109,31700,130],{"class":122},[109,31702,31703],{"class":126},"torch.version.cuda\n",[109,31705,31706,31708,31710,31713],{"class":111,"line":258},[109,31707,31590],{"class":133},[109,31709,714],{"class":126},[109,31711,31712],{"class":278},"\"cuda version\"",[109,31714,31715],{"class":126},",cuda_version)\n",[109,31717,31718,31721,31723],{"class":111,"line":263},[109,31719,31720],{"class":126},"cudnn_version",[109,31722,130],{"class":122},[109,31724,31725],{"class":126},"torch.backends.cudnn.version()\n",[109,31727,31728,31730,31732,31735],{"class":111,"line":269},[109,31729,31590],{"class":133},[109,31731,714],{"class":126},[109,31733,31734],{"class":278},"\"cudnn version\"",[109,31736,31737],{"class":126},",cudnn_version)\n",[19,31739,31740],{},[938,31741],{"alt":104,"src":31742},"\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,31744,31745],{},"cuda:0 指的是一块显卡",[1467,31747,31748],{},"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":104,"searchDepth":119,"depth":119,"links":31750},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31457,"description":24550},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31757,"title":31758,"body":31759,"description":24550,"extension":1476,"meta":51563,"navigation":157,"path":51564,"seo":51565,"stem":51566,"__hash__":51567},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31760,"toc":51557},[31761,31764,31768,31772,31775,31780,31785,31788,31793,31798,31803,31806,31810,31815,31819,31824,31827,31832,31835,31838,31841,31844,31849,31852,31857,31862,31867,31872,31875,31879,31882,31887,32491,32496,32499,32504,32507,32510,32974,32977,32980,32983,32986,35037,35040,35045,35050,35845,35848,35853,36631,36635,38294,38298,39012,39016,39020,39025,39030,39035,39038,39043,39048,39053,39058,39063,39067,39072,40354,40359,40362,40365,40368,40523,40526,40529,41745,41750,42445,42449,42453,42458,42463,42466,42471,42476,42481,42486,42491,42496,42501,42506,42511,42516,42521,42526,42531,42536,42541,42546,42551,42556,42561,42566,42571,42576,42581,42586,42591,42596,42601,42606,42611,42616,42620,42624,42627,44105,44109,45756,45760,46454,46458,46461,46464,47008,47011,47015,47018,48415,48419,48422,49000,50787,50791,50794,51554],[10,31762,31758],{"id":31763},"_2经典神经网络",[51,31765,31767],{"id":31766},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23171,31769,31771],{"id":31770},"_211原理介绍","2.1.1.原理介绍",[19,31773,31774],{},"LeNet-5",[765,31776,31777],{},[30,31778,31779],{},"原理",[19,31781,31782],{},[938,31783],{"alt":104,"src":31784},"\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,31786,31787],{},"B是batch批次；C是channel通道",[765,31789,31790],{"start":119},[30,31791,31792],{},"网络参数详细",[19,31794,31795],{},[938,31796],{"alt":104,"src":31797},"\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,31799,31800],{},[938,31801],{"alt":104,"src":31802},"\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,31804,31805],{},"AlexNet",[765,31807,31808],{},[30,31809,31779],{},[19,31811,31812],{},[938,31813],{"alt":104,"src":31814},"\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",[765,31816,31817],{"start":119},[30,31818,31792],{},[19,31820,31821],{},[938,31822],{"alt":104,"src":31823},"\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,31825,31826],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31828,31829],{},[938,31830],{"alt":104,"src":31831},"\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,31833,31834],{},"数据处理中的图像增强操作:",[19,31836,31837],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31839,31840],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31842,31843],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31845,31846],{},[938,31847],{"alt":104,"src":31848},"\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,31850,31851],{},"提升网络精确度的方法：LRN正则化",[19,31853,31854],{},[938,31855],{"alt":104,"src":31856},"\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,31858,31859],{},[938,31860],{"alt":104,"src":31861},"\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",[765,31863,31864],{"start":140},[30,31865,31866],{},"AlexNet的总结",[19,31868,31869],{},[938,31870],{"alt":104,"src":31871},"\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,31873,31874],{},"比LeNet模型要深一丢丢",[23171,31876,31878],{"id":31877},"_212代码实现","2.1.2.代码实现",[19,31880,31881],{},"（1）LeNet",[765,31883,31884],{},[30,31885,31886],{},"模型搭建",[99,31888,31890],{"className":31553,"code":31889,"language":31555,"meta":104,"style":104},"# 导入库\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",[106,31891,31892,31897,31903,31908,31921,31926,31938,31942,31962,31967,31972,31983,31988,32007,32011,32016,32065,32077,32082,32111,32146,32173,32178,32190,32195,32215,32234,32253,32257,32262,32272,32289,32300,32315,32326,32337,32352,32367,32378,32385,32389,32403,32408,32431,32436,32441,32446,32450,32455,32460,32470],{"__ignoreMap":104},[109,31893,31894],{"class":111,"line":112},[109,31895,31896],{"class":115},"# 导入库\n",[109,31898,31899,31901],{"class":111,"line":119},[109,31900,31567],{"class":122},[109,31902,31570],{"class":126},[109,31904,31905],{"class":111,"line":140},[109,31906,31907],{"class":115},"# 导入神经网络层\n",[109,31909,31910,31913,31916,31918],{"class":111,"line":154},[109,31911,31912],{"class":122},"from",[109,31914,31915],{"class":126}," torch ",[109,31917,31567],{"class":122},[109,31919,31920],{"class":126}," nn\n",[109,31922,31923],{"class":111,"line":161},[109,31924,31925],{"class":115},"# 导入展示神经网络参数的包\n",[109,31927,31928,31930,31933,31935],{"class":111,"line":167},[109,31929,31912],{"class":122},[109,31931,31932],{"class":126}," torchsummary ",[109,31934,31567],{"class":122},[109,31936,31937],{"class":126}," summary\n",[109,31939,31940],{"class":111,"line":185},[109,31941,158],{"emptyLinePlaceholder":157},[109,31943,31944,31946,31949,31951,31954,31956,31959],{"class":111,"line":201},[109,31945,15867],{"class":122},[109,31947,31948],{"class":211}," LeNet",[109,31950,714],{"class":126},[109,31952,31953],{"class":211},"nn",[109,31955,2090],{"class":126},[109,31957,31958],{"class":211},"Module",[109,31960,31961],{"class":126},"):\n",[109,31963,31964],{"class":111,"line":206},[109,31965,31966],{"class":115},"    # 模型初始化:\n",[109,31968,31969],{"class":111,"line":218},[109,31970,31971],{"class":115},"    # 定义一些网络层和激活函数\n",[109,31973,31974,31977,31980],{"class":111,"line":223},[109,31975,31976],{"class":122},"    def",[109,31978,31979],{"class":133}," __init__",[109,31981,31982],{"class":126},"(self):\n",[109,31984,31985],{"class":111,"line":229},[109,31986,31987],{"class":115},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[109,31989,31990,31993,31996,31999,32002,32005],{"class":111,"line":244},[109,31991,31992],{"class":133},"        super",[109,31994,31995],{"class":126},"(LeNet,",[109,31997,31998],{"class":133},"self",[109,32000,32001],{"class":126},").",[109,32003,32004],{"class":133},"__init__",[109,32006,803],{"class":126},[109,32008,32009],{"class":111,"line":258},[109,32010,158],{"emptyLinePlaceholder":157},[109,32012,32013],{"class":111,"line":263},[109,32014,32015],{"class":115},"        # 定义网络层\n",[109,32017,32018,32021,32024,32026,32029,32032,32034,32036,32038,32041,32043,32045,32047,32050,32052,32054,32056,32059,32061,32063],{"class":111,"line":269},[109,32019,32020],{"class":133},"        self",[109,32022,32023],{"class":126},".c1",[109,32025,130],{"class":122},[109,32027,32028],{"class":126},"nn.Conv2d(",[109,32030,32031],{"class":6553},"in_channels",[109,32033,130],{"class":122},[109,32035,1755],{"class":133},[109,32037,1914],{"class":126},[109,32039,32040],{"class":6553},"out_channels",[109,32042,130],{"class":122},[109,32044,1881],{"class":133},[109,32046,1914],{"class":126},[109,32048,32049],{"class":6553},"kernel_size",[109,32051,130],{"class":122},[109,32053,1856],{"class":133},[109,32055,1914],{"class":126},[109,32057,32058],{"class":6553},"padding",[109,32060,130],{"class":122},[109,32062,1618],{"class":133},[109,32064,1330],{"class":126},[109,32066,32067,32069,32072,32074],{"class":111,"line":304},[109,32068,32020],{"class":133},[109,32070,32071],{"class":126},".sig",[109,32073,130],{"class":122},[109,32075,32076],{"class":126},"nn.Sigmoid()\n",[109,32078,32079],{"class":111,"line":331},[109,32080,32081],{"class":115},"        # 定义池化\n",[109,32083,32084,32086,32089,32091,32094,32096,32098,32100,32102,32105,32107,32109],{"class":111,"line":336},[109,32085,32020],{"class":133},[109,32087,32088],{"class":126},".s2",[109,32090,130],{"class":122},[109,32092,32093],{"class":126},"nn.AvgPool2d(",[109,32095,32049],{"class":6553},[109,32097,130],{"class":122},[109,32099,1618],{"class":133},[109,32101,1914],{"class":126},[109,32103,32104],{"class":6553},"stride",[109,32106,130],{"class":122},[109,32108,1618],{"class":133},[109,32110,1330],{"class":126},[109,32112,32113,32115,32118,32120,32122,32124,32126,32128,32130,32132,32134,32136,32138,32140,32142,32144],{"class":111,"line":364},[109,32114,32020],{"class":133},[109,32116,32117],{"class":126},".c3",[109,32119,130],{"class":122},[109,32121,32028],{"class":126},[109,32123,32031],{"class":6553},[109,32125,130],{"class":122},[109,32127,1881],{"class":133},[109,32129,1914],{"class":126},[109,32131,32040],{"class":6553},[109,32133,130],{"class":122},[109,32135,2133],{"class":133},[109,32137,1914],{"class":126},[109,32139,32049],{"class":6553},[109,32141,130],{"class":122},[109,32143,1856],{"class":133},[109,32145,1330],{"class":126},[109,32147,32148,32150,32153,32155,32157,32159,32161,32163,32165,32167,32169,32171],{"class":111,"line":391},[109,32149,32020],{"class":133},[109,32151,32152],{"class":126},".s4",[109,32154,130],{"class":122},[109,32156,32093],{"class":126},[109,32158,32049],{"class":6553},[109,32160,130],{"class":122},[109,32162,1618],{"class":133},[109,32164,1914],{"class":126},[109,32166,32104],{"class":6553},[109,32168,130],{"class":122},[109,32170,1618],{"class":133},[109,32172,1330],{"class":126},[109,32174,32175],{"class":111,"line":396},[109,32176,32177],{"class":115},"        # 定义平展层\n",[109,32179,32180,32182,32185,32187],{"class":111,"line":402},[109,32181,32020],{"class":133},[109,32183,32184],{"class":126},".flatten",[109,32186,130],{"class":122},[109,32188,32189],{"class":126},"nn.Flatten()\n",[109,32191,32192],{"class":111,"line":419},[109,32193,32194],{"class":115},"        # 定义全连接层\n",[109,32196,32197,32199,32202,32204,32207,32209,32211,32213],{"class":111,"line":435},[109,32198,32020],{"class":133},[109,32200,32201],{"class":126},".f5",[109,32203,130],{"class":122},[109,32205,32206],{"class":126},"nn.Linear(",[109,32208,5329],{"class":133},[109,32210,1914],{"class":126},[109,32212,2349],{"class":133},[109,32214,1330],{"class":126},[109,32216,32217,32219,32222,32224,32226,32228,32230,32232],{"class":111,"line":440},[109,32218,32020],{"class":133},[109,32220,32221],{"class":126},".f6",[109,32223,130],{"class":122},[109,32225,32206],{"class":126},[109,32227,2349],{"class":133},[109,32229,1914],{"class":126},[109,32231,2243],{"class":133},[109,32233,1330],{"class":126},[109,32235,32236,32238,32241,32243,32245,32247,32249,32251],{"class":111,"line":467},[109,32237,32020],{"class":133},[109,32239,32240],{"class":126},".f7",[109,32242,130],{"class":122},[109,32244,32206],{"class":126},[109,32246,2243],{"class":133},[109,32248,1914],{"class":126},[109,32250,1008],{"class":133},[109,32252,1330],{"class":126},[109,32254,32255],{"class":111,"line":494},[109,32256,158],{"emptyLinePlaceholder":157},[109,32258,32259],{"class":111,"line":499},[109,32260,32261],{"class":115},"    # 写工具->写前向传播\n",[109,32263,32264,32266,32269],{"class":111,"line":526},[109,32265,31976],{"class":122},[109,32267,32268],{"class":211}," forward",[109,32270,32271],{"class":126},"(self,x):\n",[109,32273,32274,32277,32279,32281,32284,32286],{"class":111,"line":552},[109,32275,32276],{"class":126},"        x",[109,32278,130],{"class":122},[109,32280,31998],{"class":133},[109,32282,32283],{"class":126},".sig(",[109,32285,31998],{"class":133},[109,32287,32288],{"class":126},".c1(x))\n",[109,32290,32291,32293,32295,32297],{"class":111,"line":557},[109,32292,32276],{"class":126},[109,32294,130],{"class":122},[109,32296,31998],{"class":133},[109,32298,32299],{"class":126},".s2(x)\n",[109,32301,32302,32304,32306,32308,32310,32312],{"class":111,"line":584},[109,32303,32276],{"class":126},[109,32305,130],{"class":122},[109,32307,31998],{"class":133},[109,32309,32283],{"class":126},[109,32311,31998],{"class":133},[109,32313,32314],{"class":126},".c3(x))\n",[109,32316,32317,32319,32321,32323],{"class":111,"line":611},[109,32318,32276],{"class":126},[109,32320,130],{"class":122},[109,32322,31998],{"class":133},[109,32324,32325],{"class":126},".s4(x)\n",[109,32327,32328,32330,32332,32334],{"class":111,"line":616},[109,32329,32276],{"class":126},[109,32331,130],{"class":122},[109,32333,31998],{"class":133},[109,32335,32336],{"class":126},".flatten(x)\n",[109,32338,32339,32341,32343,32345,32347,32349],{"class":111,"line":633},[109,32340,32276],{"class":126},[109,32342,130],{"class":122},[109,32344,31998],{"class":133},[109,32346,32283],{"class":126},[109,32348,31998],{"class":133},[109,32350,32351],{"class":126},".f5(x))\n",[109,32353,32354,32356,32358,32360,32362,32364],{"class":111,"line":649},[109,32355,32276],{"class":126},[109,32357,130],{"class":122},[109,32359,31998],{"class":133},[109,32361,32283],{"class":126},[109,32363,31998],{"class":133},[109,32365,32366],{"class":126},".f6(x))\n",[109,32368,32369,32371,32373,32375],{"class":111,"line":676},[109,32370,32276],{"class":126},[109,32372,130],{"class":122},[109,32374,31998],{"class":133},[109,32376,32377],{"class":126},".f7(x)\n",[109,32379,32380,32382],{"class":111,"line":703},[109,32381,15925],{"class":122},[109,32383,32384],{"class":126}," x\n",[109,32386,32387],{"class":111,"line":708},[109,32388,158],{"emptyLinePlaceholder":157},[109,32390,32391,32393,32396,32398,32401],{"class":111,"line":723},[109,32392,2922],{"class":122},[109,32394,32395],{"class":133}," __name__",[109,32397,4296],{"class":122},[109,32399,32400],{"class":278},"\"__main__\"",[109,32402,5082],{"class":126},[109,32404,32405],{"class":111,"line":728},[109,32406,32407],{"class":115},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[109,32409,32410,32413,32415,32417,32420,32422,32425,32427,32429],{"class":111,"line":739},[109,32411,32412],{"class":126},"    device",[109,32414,130],{"class":122},[109,32416,31626],{"class":126},[109,32418,32419],{"class":278},"\"cuda\"",[109,32421,3080],{"class":122},[109,32423,32424],{"class":126}," torch.cuda.is_available() ",[109,32426,3077],{"class":122},[109,32428,31651],{"class":278},[109,32430,1330],{"class":126},[109,32432,32433],{"class":111,"line":9352},[109,32434,32435],{"class":115},"    # 如果就是想指定用cpu用下方代码:\n",[109,32437,32438],{"class":111,"line":9364},[109,32439,32440],{"class":115},"    # device=\"cpu\"\n",[109,32442,32443],{"class":111,"line":9376},[109,32444,32445],{"class":115},"    # print(device)\n",[109,32447,32448],{"class":111,"line":11034},[109,32449,158],{"emptyLinePlaceholder":157},[109,32451,32452],{"class":111,"line":11059},[109,32453,32454],{"class":115},"    # 实例化模型\n",[109,32456,32457],{"class":111,"line":11082},[109,32458,32459],{"class":115},"    # 将模型放到设备中去运行\n",[109,32461,32462,32465,32467],{"class":111,"line":11106},[109,32463,32464],{"class":126},"    model",[109,32466,130],{"class":122},[109,32468,32469],{"class":126},"LeNet().to(device)\n",[109,32471,32472,32475,32478,32480,32482,32484,32486,32488],{"class":111,"line":11111},[109,32473,32474],{"class":133},"    print",[109,32476,32477],{"class":126},"(summary(model,(",[109,32479,1755],{"class":133},[109,32481,1914],{"class":126},[109,32483,2432],{"class":133},[109,32485,1914],{"class":126},[109,32487,2432],{"class":133},[109,32489,32490],{"class":126},")))\n",[19,32492,32493],{},[938,32494],{"alt":104,"src":32495},"\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,32497,32498],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[765,32500,32501],{"start":119},[30,32502,32503],{},"训练",[19,32505,32506],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32508,32509],{},"在训练之前可以将数据展示看一下",[99,32511,32513],{"className":31553,"code":32512,"language":31555,"meta":104,"style":104},"# 建立画图的函数，用于展示数据\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",[106,32514,32515,32520,32525,32537,32549,32562,32567,32579,32584,32596,32601,32613,32617,32621,32642,32654,32659,32680,32691,32695,32700,32718,32729,32734,32745,32750,32761,32765,32770,32785,32798,32803,32808,32821,32834,32847,32852,32856,32861,32881,32898,32918,32931,32944,32954,32969],{"__ignoreMap":104},[109,32516,32517],{"class":111,"line":112},[109,32518,32519],{"class":115},"# 建立画图的函数，用于展示数据\n",[109,32521,32522],{"class":111,"line":119},[109,32523,32524],{"class":115},"# torchvision中包含很多内置的数据集\n",[109,32526,32527,32529,32532,32534],{"class":111,"line":140},[109,32528,31912],{"class":122},[109,32530,32531],{"class":126}," sklearn.externals.array_api_compat.torch ",[109,32533,31567],{"class":122},[109,32535,32536],{"class":126}," squeeze\n",[109,32538,32539,32541,32544,32546],{"class":111,"line":154},[109,32540,31912],{"class":122},[109,32542,32543],{"class":126}," torchvision.datasets ",[109,32545,31567],{"class":122},[109,32547,32548],{"class":126}," FashionMNIST\n",[109,32550,32551,32553,32556,32559],{"class":111,"line":161},[109,32552,31567],{"class":122},[109,32554,32555],{"class":126}," numpy ",[109,32557,32558],{"class":122},"as",[109,32560,32561],{"class":126}," np\n",[109,32563,32564],{"class":111,"line":167},[109,32565,32566],{"class":115},"# 引入处理数据集的包\n",[109,32568,32569,32571,32574,32576],{"class":111,"line":185},[109,32570,31912],{"class":122},[109,32572,32573],{"class":126}," torchvision ",[109,32575,31567],{"class":122},[109,32577,32578],{"class":126}," transforms\n",[109,32580,32581],{"class":111,"line":201},[109,32582,32583],{"class":115},"# 从torch库中引入数据处理的包\n",[109,32585,32586,32588,32591,32593],{"class":111,"line":206},[109,32587,31567],{"class":122},[109,32589,32590],{"class":126}," torch.utils.data ",[109,32592,32558],{"class":122},[109,32594,32595],{"class":126}," Data\n",[109,32597,32598],{"class":111,"line":218},[109,32599,32600],{"class":115},"# 导入画图的库\n",[109,32602,32603,32605,32608,32610],{"class":111,"line":223},[109,32604,31567],{"class":122},[109,32606,32607],{"class":126}," matplotlib.pyplot ",[109,32609,32558],{"class":122},[109,32611,32612],{"class":126}," plt\n",[109,32614,32615],{"class":111,"line":229},[109,32616,158],{"emptyLinePlaceholder":157},[109,32618,32619],{"class":111,"line":244},[109,32620,158],{"emptyLinePlaceholder":157},[109,32622,32623,32626,32628,32631,32634,32636,32639],{"class":111,"line":258},[109,32624,32625],{"class":126},"train_data",[109,32627,130],{"class":122},[109,32629,32630],{"class":126},"FashionMNIST(",[109,32632,32633],{"class":6553},"root",[109,32635,130],{"class":122},[109,32637,32638],{"class":278},"'.\u002Fdata'",[109,32640,32641],{"class":126},",\n",[109,32643,32644,32647,32649,32652],{"class":111,"line":263},[109,32645,32646],{"class":6553},"                        train",[109,32648,130],{"class":122},[109,32650,32651],{"class":133},"True",[109,32653,32641],{"class":126},[109,32655,32656],{"class":111,"line":269},[109,32657,32658],{"class":115},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[109,32660,32661,32664,32666,32669,32672,32674,32677],{"class":111,"line":304},[109,32662,32663],{"class":6553},"                        transform",[109,32665,130],{"class":122},[109,32667,32668],{"class":126},"transforms.Compose([transforms.Resize(",[109,32670,32671],{"class":6553},"size",[109,32673,130],{"class":122},[109,32675,32676],{"class":133},"224",[109,32678,32679],{"class":126},"),transforms.ToTensor()]),\n",[109,32681,32682,32685,32687,32689],{"class":111,"line":331},[109,32683,32684],{"class":6553},"                        download",[109,32686,130],{"class":122},[109,32688,32651],{"class":133},[109,32690,1330],{"class":126},[109,32692,32693],{"class":111,"line":336},[109,32694,158],{"emptyLinePlaceholder":157},[109,32696,32697],{"class":111,"line":364},[109,32698,32699],{"class":115},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[109,32701,32702,32705,32707,32710,32713,32715],{"class":111,"line":391},[109,32703,32704],{"class":126},"train_loader",[109,32706,130],{"class":122},[109,32708,32709],{"class":126},"Data.DataLoader(",[109,32711,32712],{"class":6553},"dataset",[109,32714,130],{"class":122},[109,32716,32717],{"class":126},"train_data,\n",[109,32719,32720,32723,32725,32727],{"class":111,"line":396},[109,32721,32722],{"class":6553},"                             batch_size",[109,32724,130],{"class":122},[109,32726,1741],{"class":133},[109,32728,32641],{"class":126},[109,32730,32731],{"class":111,"line":402},[109,32732,32733],{"class":115},"                             # 数据是否打乱\n",[109,32735,32736,32739,32741,32743],{"class":111,"line":419},[109,32737,32738],{"class":6553},"                             shuffle",[109,32740,130],{"class":122},[109,32742,32651],{"class":133},[109,32744,32641],{"class":126},[109,32746,32747],{"class":111,"line":435},[109,32748,32749],{"class":115},"                             # 规定加载数据的进程\n",[109,32751,32752,32755,32757,32759],{"class":111,"line":440},[109,32753,32754],{"class":6553},"                             num_workers",[109,32756,130],{"class":122},[109,32758,1314],{"class":133},[109,32760,1330],{"class":126},[109,32762,32763],{"class":111,"line":467},[109,32764,158],{"emptyLinePlaceholder":157},[109,32766,32767],{"class":111,"line":494},[109,32768,32769],{"class":115},"# 获得一个batch的数据\n",[109,32771,32772,32774,32777,32779,32782],{"class":111,"line":499},[109,32773,4372],{"class":122},[109,32775,32776],{"class":126}," step,(b_x,b_y) ",[109,32778,27218],{"class":122},[109,32780,32781],{"class":133}," enumerate",[109,32783,32784],{"class":126},"(train_loader):\n",[109,32786,32787,32789,32792,32794,32796],{"class":111,"line":526},[109,32788,4446],{"class":122},[109,32790,32791],{"class":126}," step ",[109,32793,2490],{"class":122},[109,32795,734],{"class":133},[109,32797,5082],{"class":126},[109,32799,32800],{"class":111,"line":552},[109,32801,32802],{"class":122},"        break\n",[109,32804,32805],{"class":111,"line":557},[109,32806,32807],{"class":115},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[109,32809,32810,32813,32815,32818],{"class":111,"line":584},[109,32811,32812],{"class":126},"batch_x",[109,32814,130],{"class":122},[109,32816,32817],{"class":126},"b_x.squeeze().numpy()  ",[109,32819,32820],{"class":115},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[109,32822,32823,32826,32828,32831],{"class":111,"line":611},[109,32824,32825],{"class":126},"batch_y",[109,32827,130],{"class":122},[109,32829,32830],{"class":126},"b_y.numpy()   ",[109,32832,32833],{"class":115},"#将张量转换成功numpy数组\n",[109,32835,32836,32839,32841,32844],{"class":111,"line":616},[109,32837,32838],{"class":126},"class_label",[109,32840,130],{"class":122},[109,32842,32843],{"class":126},"train_data.classes  ",[109,32845,32846],{"class":115},"#训练集标签\n",[109,32848,32849],{"class":111,"line":633},[109,32850,32851],{"class":115},"# print(class_label)\n",[109,32853,32854],{"class":111,"line":649},[109,32855,158],{"emptyLinePlaceholder":157},[109,32857,32858],{"class":111,"line":676},[109,32859,32860],{"class":115},"# 可视化一个batch的图像\n",[109,32862,32863,32866,32869,32871,32873,32875,32877,32879],{"class":111,"line":703},[109,32864,32865],{"class":126},"plt.figure(",[109,32867,32868],{"class":6553},"figsize",[109,32870,130],{"class":122},[109,32872,714],{"class":126},[109,32874,2030],{"class":133},[109,32876,1914],{"class":126},[109,32878,1856],{"class":133},[109,32880,31672],{"class":126},[109,32882,32883,32885,32888,32890,32893,32895],{"class":111,"line":708},[109,32884,4372],{"class":122},[109,32886,32887],{"class":126}," ii ",[109,32889,27218],{"class":122},[109,32891,32892],{"class":126}," np.arange(",[109,32894,8684],{"class":133},[109,32896,32897],{"class":126},"(batch_y)):\n",[109,32899,32900,32903,32905,32907,32909,32912,32914,32916],{"class":111,"line":723},[109,32901,32902],{"class":126},"    plt.subplot(",[109,32904,1831],{"class":133},[109,32906,1914],{"class":126},[109,32908,2133],{"class":133},[109,32910,32911],{"class":126},",ii ",[109,32913,1348],{"class":122},[109,32915,26293],{"class":133},[109,32917,1330],{"class":126},[109,32919,32920,32923,32926,32928],{"class":111,"line":728},[109,32921,32922],{"class":126},"    plt.imshow(batch_x[ii,:,:],",[109,32924,32925],{"class":6553},"cmap",[109,32927,130],{"class":122},[109,32929,32930],{"class":126},"plt.cm.gray)\n",[109,32932,32933,32936,32938,32940,32942],{"class":111,"line":739},[109,32934,32935],{"class":126},"    plt.title(class_label[batch_y[ii]],",[109,32937,32671],{"class":6553},[109,32939,130],{"class":122},[109,32941,1008],{"class":133},[109,32943,1330],{"class":126},[109,32945,32946,32949,32952],{"class":111,"line":9352},[109,32947,32948],{"class":126},"    plt.axis(",[109,32950,32951],{"class":278},"\"off\"",[109,32953,1330],{"class":126},[109,32955,32956,32959,32962,32964,32967],{"class":111,"line":9364},[109,32957,32958],{"class":126},"    plt.subplots_adjust(",[109,32960,32961],{"class":6553},"wspace",[109,32963,130],{"class":122},[109,32965,32966],{"class":133},"0.05",[109,32968,1330],{"class":126},[109,32970,32971],{"class":111,"line":9376},[109,32972,32973],{"class":126},"plt.show()\n",[19,32975,32976],{},"用matplotlib进行展示的过程可以后续再补",[19,32978,32979],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32981,32982],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32984,32985],{},"模型训练：",[99,32987,32989],{"className":31553,"code":32988,"language":31555,"meta":104,"style":104},"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",[106,32990,32991,32998,33005,33009,33021,33027,33038,33048,33058,33068,33078,33083,33095,33105,33109,33113,33118,33129,33142,33153,33170,33181,33220,33236,33248,33259,33264,33275,33291,33302,33313,33324,33331,33335,33340,33345,33349,33354,33364,33385,33389,33393,33398,33403,33408,33428,33432,33437,33447,33451,33456,33465,33470,33475,33480,33490,33494,33498,33503,33508,33518,33523,33533,33538,33547,33552,33561,33566,33575,33579,33584,33594,33598,33602,33607,33622,33650,33665,33669,33674,33679,33688,33693,33702,33707,33716,33721,33730,33735,33744,33749,33758,33763,33776,33781,33791,33796,33806,33812,33818,33824,33830,33841,33847,33867,33873,33884,33890,33896,33902,33908,33914,33920,33926,33946,33952,33968,33974,33988,33994,34009,34015,34024,34030,34039,34045,34051,34060,34066,34077,34083,34102,34108,34119,34125,34145,34161,34167,34181,34187,34193,34204,34210,34216,34226,34232,34243,34249,34259,34264,34270,34319,34366,34371,34377,34396,34402,34422,34428,34434,34444,34449,34455,34471,34516,34522,34528,34534,34545,34551,34557,34563,34581,34595,34604,34613,34622,34631,34637,34643,34651,34656,34662,34673,34679,34699,34705,34711,34717,34734,34740,34746,34752,34758,34764,34791,34815,34821,34827,34833,34844,34855,34861,34878,34901,34924,34930,34935,34944,34954,34960,34965,34971,34984,34990,35001,35012,35031],{"__ignoreMap":104},[109,32992,32993,32995],{"class":111,"line":112},[109,32994,31567],{"class":122},[109,32996,32997],{"class":126}," copy\n",[109,32999,33000,33002],{"class":111,"line":119},[109,33001,31567],{"class":122},[109,33003,33004],{"class":126}," time\n",[109,33006,33007],{"class":111,"line":140},[109,33008,158],{"emptyLinePlaceholder":157},[109,33010,33011,33013,33016,33018],{"class":111,"line":154},[109,33012,31567],{"class":122},[109,33014,33015],{"class":126}," pandas ",[109,33017,32558],{"class":122},[109,33019,33020],{"class":126}," pd\n",[109,33022,33023,33025],{"class":111,"line":161},[109,33024,31567],{"class":122},[109,33026,31570],{"class":126},[109,33028,33029,33031,33033,33035],{"class":111,"line":167},[109,33030,31912],{"class":122},[109,33032,32590],{"class":126},[109,33034,31567],{"class":122},[109,33036,33037],{"class":126}," Dataset\n",[109,33039,33040,33042,33044,33046],{"class":111,"line":185},[109,33041,31912],{"class":122},[109,33043,32543],{"class":126},[109,33045,31567],{"class":122},[109,33047,32548],{"class":126},[109,33049,33050,33052,33054,33056],{"class":111,"line":201},[109,33051,31912],{"class":122},[109,33053,32573],{"class":126},[109,33055,31567],{"class":122},[109,33057,32578],{"class":126},[109,33059,33060,33062,33064,33066],{"class":111,"line":206},[109,33061,31567],{"class":122},[109,33063,32590],{"class":126},[109,33065,32558],{"class":122},[109,33067,32595],{"class":126},[109,33069,33070,33072,33074,33076],{"class":111,"line":218},[109,33071,31567],{"class":122},[109,33073,32607],{"class":126},[109,33075,32558],{"class":122},[109,33077,32612],{"class":126},[109,33079,33080],{"class":111,"line":223},[109,33081,33082],{"class":115},"# 导入模型\n",[109,33084,33085,33087,33090,33092],{"class":111,"line":229},[109,33086,31912],{"class":122},[109,33088,33089],{"class":126}," model ",[109,33091,31567],{"class":122},[109,33093,33094],{"class":126}," LeNet\n",[109,33096,33097,33099,33101,33103],{"class":111,"line":244},[109,33098,31912],{"class":122},[109,33100,31915],{"class":126},[109,33102,31567],{"class":122},[109,33104,31920],{"class":126},[109,33106,33107],{"class":111,"line":258},[109,33108,158],{"emptyLinePlaceholder":157},[109,33110,33111],{"class":111,"line":263},[109,33112,158],{"emptyLinePlaceholder":157},[109,33114,33115],{"class":111,"line":269},[109,33116,33117],{"class":115},"# 处理训练集与验证集函数--->划分数据集\n",[109,33119,33120,33123,33126],{"class":111,"line":304},[109,33121,33122],{"class":122},"def",[109,33124,33125],{"class":211}," train_val_data_process",[109,33127,33128],{"class":126},"():\n",[109,33130,33131,33134,33136,33138,33140],{"class":111,"line":331},[109,33132,33133],{"class":126},"    train_data",[109,33135,130],{"class":122},[109,33137,32630],{"class":126},[109,33139,32638],{"class":278},[109,33141,32641],{"class":126},[109,33143,33144,33147,33149,33151],{"class":111,"line":336},[109,33145,33146],{"class":6553},"                            train",[109,33148,130],{"class":122},[109,33150,32651],{"class":133},[109,33152,32641],{"class":126},[109,33154,33155,33158,33160,33162,33164,33166,33168],{"class":111,"line":364},[109,33156,33157],{"class":6553},"                            transform",[109,33159,130],{"class":122},[109,33161,32668],{"class":126},[109,33163,32671],{"class":6553},[109,33165,130],{"class":122},[109,33167,2432],{"class":133},[109,33169,32679],{"class":126},[109,33171,33172,33175,33177,33179],{"class":111,"line":391},[109,33173,33174],{"class":6553},"                            download",[109,33176,130],{"class":122},[109,33178,32651],{"class":133},[109,33180,1330],{"class":126},[109,33182,33183,33186,33188,33191,33194,33196,33199,33201,33203,33206,33208,33210,33213,33215,33217],{"class":111,"line":396},[109,33184,33185],{"class":126},"    train_data,val_data",[109,33187,130],{"class":122},[109,33189,33190],{"class":126},"Data.random_split(train_data,[",[109,33192,33193],{"class":133},"round",[109,33195,714],{"class":126},[109,33197,33198],{"class":133},"0.8",[109,33200,1988],{"class":122},[109,33202,8684],{"class":133},[109,33204,33205],{"class":126},"(train_data)),",[109,33207,33193],{"class":133},[109,33209,714],{"class":126},[109,33211,33212],{"class":133},"0.2",[109,33214,1988],{"class":122},[109,33216,8684],{"class":133},[109,33218,33219],{"class":126},"(train_data))])\n",[109,33221,33222,33225,33227,33230,33232,33234],{"class":111,"line":402},[109,33223,33224],{"class":126},"    train_dataloader ",[109,33226,130],{"class":122},[109,33228,33229],{"class":126}," Data.DataLoader(",[109,33231,32712],{"class":6553},[109,33233,130],{"class":122},[109,33235,32717],{"class":126},[109,33237,33238,33241,33243,33246],{"class":111,"line":419},[109,33239,33240],{"class":6553},"                                       batch_size",[109,33242,130],{"class":122},[109,33244,33245],{"class":133},"128",[109,33247,32641],{"class":126},[109,33249,33250,33253,33255,33257],{"class":111,"line":435},[109,33251,33252],{"class":6553},"                                       shuffle",[109,33254,130],{"class":122},[109,33256,32651],{"class":133},[109,33258,32641],{"class":126},[109,33260,33261],{"class":111,"line":440},[109,33262,33263],{"class":115},"                                       # 规定8个进程\n",[109,33265,33266,33269,33271,33273],{"class":111,"line":467},[109,33267,33268],{"class":6553},"                                       num_workers",[109,33270,130],{"class":122},[109,33272,1931],{"class":133},[109,33274,1330],{"class":126},[109,33276,33277,33280,33282,33284,33286,33288],{"class":111,"line":494},[109,33278,33279],{"class":126},"    val_dataloader",[109,33281,130],{"class":122},[109,33283,32709],{"class":126},[109,33285,32712],{"class":6553},[109,33287,130],{"class":122},[109,33289,33290],{"class":126},"val_data,\n",[109,33292,33293,33296,33298,33300],{"class":111,"line":499},[109,33294,33295],{"class":6553},"                                   batch_size",[109,33297,130],{"class":122},[109,33299,33245],{"class":133},[109,33301,32641],{"class":126},[109,33303,33304,33307,33309,33311],{"class":111,"line":526},[109,33305,33306],{"class":6553},"                                   shuffle",[109,33308,130],{"class":122},[109,33310,32651],{"class":133},[109,33312,32641],{"class":126},[109,33314,33315,33318,33320,33322],{"class":111,"line":552},[109,33316,33317],{"class":6553},"                                   num_workers",[109,33319,130],{"class":122},[109,33321,1931],{"class":133},[109,33323,1330],{"class":126},[109,33325,33326,33328],{"class":111,"line":557},[109,33327,731],{"class":122},[109,33329,33330],{"class":126}," train_dataloader,val_dataloader\n",[109,33332,33333],{"class":111,"line":584},[109,33334,158],{"emptyLinePlaceholder":157},[109,33336,33337],{"class":111,"line":611},[109,33338,33339],{"class":115},"# 验证是否出错\n",[109,33341,33342],{"class":111,"line":616},[109,33343,33344],{"class":115},"# train_val_data_process()\n",[109,33346,33347],{"class":111,"line":633},[109,33348,158],{"emptyLinePlaceholder":157},[109,33350,33351],{"class":111,"line":649},[109,33352,33353],{"class":115},"# 定义模型训练函数\n",[109,33355,33356,33358,33361],{"class":111,"line":676},[109,33357,33122],{"class":122},[109,33359,33360],{"class":211}," train_model_process",[109,33362,33363],{"class":126},"(model,train_dataloader,val_dataloader,num_epochs):\n",[109,33365,33366,33368,33370,33372,33374,33376,33378,33380,33383],{"class":111,"line":703},[109,33367,32412],{"class":126},[109,33369,130],{"class":122},[109,33371,31626],{"class":126},[109,33373,32419],{"class":278},[109,33375,3080],{"class":122},[109,33377,32424],{"class":126},[109,33379,3077],{"class":122},[109,33381,33382],{"class":278}," 'cpu'",[109,33384,1330],{"class":126},[109,33386,33387],{"class":111,"line":708},[109,33388,158],{"emptyLinePlaceholder":157},[109,33390,33391],{"class":111,"line":723},[109,33392,158],{"emptyLinePlaceholder":157},[109,33394,33395],{"class":111,"line":728},[109,33396,33397],{"class":115},"    # 定义优化器\n",[109,33399,33400],{"class":111,"line":739},[109,33401,33402],{"class":115},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[109,33404,33405],{"class":111,"line":9352},[109,33406,33407],{"class":115},"    # lr为学习率\n",[109,33409,33410,33413,33415,33418,33421,33423,33426],{"class":111,"line":9364},[109,33411,33412],{"class":126},"    optimizer",[109,33414,130],{"class":122},[109,33416,33417],{"class":126},"torch.optim.Adam(model.parameters(),",[109,33419,33420],{"class":6553},"lr",[109,33422,130],{"class":122},[109,33424,33425],{"class":133},"0.001",[109,33427,1330],{"class":126},[109,33429,33430],{"class":111,"line":9376},[109,33431,158],{"emptyLinePlaceholder":157},[109,33433,33434],{"class":111,"line":11034},[109,33435,33436],{"class":115},"    # 定义损失函数使用交叉熵损失函数\n",[109,33438,33439,33442,33444],{"class":111,"line":11059},[109,33440,33441],{"class":126},"    criterion",[109,33443,130],{"class":122},[109,33445,33446],{"class":126},"nn.CrossEntropyLoss()\n",[109,33448,33449],{"class":111,"line":11082},[109,33450,158],{"emptyLinePlaceholder":157},[109,33452,33453],{"class":111,"line":11106},[109,33454,33455],{"class":115},"    # 将模型放到GPU中进行训练\n",[109,33457,33458,33460,33462],{"class":111,"line":11111},[109,33459,32464],{"class":126},[109,33461,130],{"class":122},[109,33463,33464],{"class":126},"model.to(device)\n",[109,33466,33467],{"class":111,"line":11116},[109,33468,33469],{"class":115},"    # 复制当前模型的参数\n",[109,33471,33472],{"class":111,"line":11121},[109,33473,33474],{"class":115},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[109,33476,33477],{"class":111,"line":11130},[109,33478,33479],{"class":115},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[109,33481,33482,33485,33487],{"class":111,"line":11135},[109,33483,33484],{"class":126},"    best_model_wts",[109,33486,130],{"class":122},[109,33488,33489],{"class":126},"copy.deepcopy(model.state_dict())\n",[109,33491,33492],{"class":111,"line":11141},[109,33493,158],{"emptyLinePlaceholder":157},[109,33495,33496],{"class":111,"line":11162},[109,33497,158],{"emptyLinePlaceholder":157},[109,33499,33500],{"class":111,"line":11168},[109,33501,33502],{"class":115},"    # 初始化参数\n",[109,33504,33505],{"class":111,"line":11182},[109,33506,33507],{"class":115},"    # 最高准确度\n",[109,33509,33510,33513,33515],{"class":111,"line":11188},[109,33511,33512],{"class":126},"    best_acc",[109,33514,130],{"class":122},[109,33516,33517],{"class":133},"0.0\n",[109,33519,33520],{"class":111,"line":11215},[109,33521,33522],{"class":115},"    # 训练集损失列表\n",[109,33524,33525,33528,33530],{"class":111,"line":11224},[109,33526,33527],{"class":126},"    train_loss_all",[109,33529,130],{"class":122},[109,33531,33532],{"class":126},"[]\n",[109,33534,33535],{"class":111,"line":11230},[109,33536,33537],{"class":115},"    # 验证集函数列表\n",[109,33539,33540,33543,33545],{"class":111,"line":11238},[109,33541,33542],{"class":126},"    val_loss_all",[109,33544,130],{"class":122},[109,33546,33532],{"class":126},[109,33548,33549],{"class":111,"line":11243},[109,33550,33551],{"class":115},"    # 训练集准确度列表\n",[109,33553,33554,33557,33559],{"class":111,"line":17777},[109,33555,33556],{"class":126},"    train_acc_all",[109,33558,130],{"class":122},[109,33560,33532],{"class":126},[109,33562,33563],{"class":111,"line":17783},[109,33564,33565],{"class":115},"    # 验证集准确度列表\n",[109,33567,33568,33571,33573],{"class":111,"line":17806},[109,33569,33570],{"class":126},"    val_acc_all",[109,33572,130],{"class":122},[109,33574,33532],{"class":126},[109,33576,33577],{"class":111,"line":17812},[109,33578,158],{"emptyLinePlaceholder":157},[109,33580,33581],{"class":111,"line":17835},[109,33582,33583],{"class":115},"    # 保存当前时间--->方便看每轮训练的时间\n",[109,33585,33586,33589,33591],{"class":111,"line":17849},[109,33587,33588],{"class":126},"    since",[109,33590,130],{"class":122},[109,33592,33593],{"class":126},"time.time()\n",[109,33595,33596],{"class":111,"line":17869},[109,33597,158],{"emptyLinePlaceholder":157},[109,33599,33600],{"class":111,"line":17875},[109,33601,158],{"emptyLinePlaceholder":157},[109,33603,33604],{"class":111,"line":17886},[109,33605,33606],{"class":115},"    # 准备工作完成--->开始训练模型\n",[109,33608,33609,33611,33614,33616,33619],{"class":111,"line":17909},[109,33610,1302],{"class":122},[109,33612,33613],{"class":126}," epoch ",[109,33615,27218],{"class":122},[109,33617,33618],{"class":133}," range",[109,33620,33621],{"class":126},"(num_epochs):\n",[109,33623,33624,33627,33629,33632,33635,33637,33639,33641,33644,33646,33648],{"class":111,"line":17931},[109,33625,33626],{"class":133},"        print",[109,33628,714],{"class":126},[109,33630,33631],{"class":278},"\"Epoch ",[109,33633,33634],{"class":133},"{}",[109,33636,2116],{"class":278},[109,33638,33634],{"class":133},[109,33640,1789],{"class":278},[109,33642,33643],{"class":126},".format(epoch,num_epochs",[109,33645,2064],{"class":122},[109,33647,1755],{"class":133},[109,33649,31672],{"class":126},[109,33651,33652,33654,33656,33659,33661,33663],{"class":111,"line":17936},[109,33653,33626],{"class":133},[109,33655,714],{"class":126},[109,33657,33658],{"class":278},"\"-\"",[109,33660,1988],{"class":122},[109,33662,1008],{"class":133},[109,33664,1330],{"class":126},[109,33666,33667],{"class":111,"line":17942},[109,33668,158],{"emptyLinePlaceholder":157},[109,33670,33671],{"class":111,"line":17956},[109,33672,33673],{"class":115},"        # 初始化参数\n",[109,33675,33676],{"class":111,"line":17969},[109,33677,33678],{"class":115},"        # 训练集损失函数\n",[109,33680,33681,33684,33686],{"class":111,"line":17974},[109,33682,33683],{"class":126},"        train_loss",[109,33685,130],{"class":122},[109,33687,33517],{"class":133},[109,33689,33690],{"class":111,"line":17988},[109,33691,33692],{"class":115},"        # 训练集准确度\n",[109,33694,33695,33698,33700],{"class":111,"line":17993},[109,33696,33697],{"class":126},"        train_corrects",[109,33699,130],{"class":122},[109,33701,4430],{"class":133},[109,33703,33704],{"class":111,"line":17999},[109,33705,33706],{"class":115},"        # 验证集损失函数\n",[109,33708,33709,33712,33714],{"class":111,"line":18004},[109,33710,33711],{"class":126},"        val_loss",[109,33713,130],{"class":122},[109,33715,33517],{"class":133},[109,33717,33718],{"class":111,"line":18018},[109,33719,33720],{"class":115},"        # 验证集准确度\n",[109,33722,33723,33726,33728],{"class":111,"line":18023},[109,33724,33725],{"class":126},"        val_corrects",[109,33727,130],{"class":122},[109,33729,4430],{"class":133},[109,33731,33732],{"class":111,"line":18028},[109,33733,33734],{"class":115},"        # 训练集样本数量\n",[109,33736,33737,33740,33742],{"class":111,"line":18042},[109,33738,33739],{"class":126},"        train_num",[109,33741,130],{"class":122},[109,33743,4430],{"class":133},[109,33745,33746],{"class":111,"line":18054},[109,33747,33748],{"class":115},"        # 验证集样本数量\n",[109,33750,33751,33754,33756],{"class":111,"line":18059},[109,33752,33753],{"class":126},"        val_num",[109,33755,130],{"class":122},[109,33757,4430],{"class":133},[109,33759,33760],{"class":111,"line":18072},[109,33761,33762],{"class":115},"        # 将数据放到设备,并开始训练\n",[109,33764,33765,33767,33769,33771,33773],{"class":111,"line":18077},[109,33766,4747],{"class":122},[109,33768,32776],{"class":126},[109,33770,27218],{"class":122},[109,33772,32781],{"class":133},[109,33774,33775],{"class":126},"(train_dataloader):\n",[109,33777,33778],{"class":111,"line":18082},[109,33779,33780],{"class":115},"            # 将特征放入到训练设备\n",[109,33782,33783,33786,33788],{"class":111,"line":18087},[109,33784,33785],{"class":126},"            b_x",[109,33787,130],{"class":122},[109,33789,33790],{"class":126},"b_x.to(device)\n",[109,33792,33793],{"class":111,"line":18100},[109,33794,33795],{"class":115},"            # 将标签放入到训练设备当中\n",[109,33797,33798,33801,33803],{"class":111,"line":18105},[109,33799,33800],{"class":126},"            b_y",[109,33802,130],{"class":122},[109,33804,33805],{"class":126},"b_y.to(device)\n",[109,33807,33809],{"class":111,"line":33808},98,[109,33810,33811],{"class":115},"            # 设置模型为训练模式\n",[109,33813,33815],{"class":111,"line":33814},99,[109,33816,33817],{"class":126},"            model.train()\n",[109,33819,33821],{"class":111,"line":33820},100,[109,33822,33823],{"class":115},"            # 将数据放到模型当中,开始前向传播\n",[109,33825,33827],{"class":111,"line":33826},101,[109,33828,33829],{"class":115},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[109,33831,33833,33836,33838],{"class":111,"line":33832},102,[109,33834,33835],{"class":126},"            output",[109,33837,130],{"class":122},[109,33839,33840],{"class":126},"model(b_x)\n",[109,33842,33844],{"class":111,"line":33843},103,[109,33845,33846],{"class":115},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[109,33848,33850,33853,33855,33858,33861,33863,33865],{"class":111,"line":33849},104,[109,33851,33852],{"class":126},"            pre_lab",[109,33854,130],{"class":122},[109,33856,33857],{"class":126},"torch.argmax(output,",[109,33859,33860],{"class":6553},"dim",[109,33862,130],{"class":122},[109,33864,1755],{"class":133},[109,33866,1330],{"class":126},[109,33868,33870],{"class":111,"line":33869},105,[109,33871,33872],{"class":115},"            # 计算每一个batch的损失函数\n",[109,33874,33876,33879,33881],{"class":111,"line":33875},106,[109,33877,33878],{"class":126},"            loss",[109,33880,130],{"class":122},[109,33882,33883],{"class":126},"criterion(output,b_y)\n",[109,33885,33887],{"class":111,"line":33886},107,[109,33888,33889],{"class":115},"            # 将梯度初始化为0\n",[109,33891,33893],{"class":111,"line":33892},108,[109,33894,33895],{"class":126},"            optimizer.zero_grad()\n",[109,33897,33899],{"class":111,"line":33898},109,[109,33900,33901],{"class":115},"            # 梯度置为0后再进行反向传播\n",[109,33903,33905],{"class":111,"line":33904},110,[109,33906,33907],{"class":126},"            loss.backward()\n",[109,33909,33911],{"class":111,"line":33910},111,[109,33912,33913],{"class":115},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[109,33915,33917],{"class":111,"line":33916},112,[109,33918,33919],{"class":126},"            optimizer.step()\n",[109,33921,33923],{"class":111,"line":33922},113,[109,33924,33925],{"class":115},"            # loss.item()指的是batch的平均损失\n",[109,33927,33929,33932,33934,33937,33939,33942,33944],{"class":111,"line":33928},114,[109,33930,33931],{"class":126},"            train_loss",[109,33933,10795],{"class":122},[109,33935,33936],{"class":126},"loss.item()",[109,33938,1988],{"class":122},[109,33940,33941],{"class":126},"b_x.size(",[109,33943,1314],{"class":133},[109,33945,1330],{"class":126},[109,33947,33949],{"class":111,"line":33948},115,[109,33950,33951],{"class":115},"            # 计算每个批次中正确预测的数量\n",[109,33953,33955,33958,33960,33963,33965],{"class":111,"line":33954},116,[109,33956,33957],{"class":126},"            train_corrects",[109,33959,10795],{"class":122},[109,33961,33962],{"class":126},"torch.sum(pre_lab",[109,33964,4296],{"class":122},[109,33966,33967],{"class":126},"b_y.data)\n",[109,33969,33971],{"class":111,"line":33970},117,[109,33972,33973],{"class":115},"            # 计算目前为止一共处理了多少样本\n",[109,33975,33977,33980,33982,33984,33986],{"class":111,"line":33976},118,[109,33978,33979],{"class":126},"            train_num",[109,33981,10795],{"class":122},[109,33983,33941],{"class":126},[109,33985,1314],{"class":133},[109,33987,1330],{"class":126},[109,33989,33991],{"class":111,"line":33990},119,[109,33992,33993],{"class":115},"        # 验证数据\n",[109,33995,33997,33999,34002,34004,34006],{"class":111,"line":33996},120,[109,33998,4747],{"class":122},[109,34000,34001],{"class":126}," step ,(b_x,b_y) ",[109,34003,27218],{"class":122},[109,34005,32781],{"class":133},[109,34007,34008],{"class":126},"(val_dataloader):\n",[109,34010,34012],{"class":111,"line":34011},121,[109,34013,34014],{"class":115},"            # 将特征放到验证设备当中\n",[109,34016,34018,34020,34022],{"class":111,"line":34017},122,[109,34019,33785],{"class":126},[109,34021,130],{"class":122},[109,34023,33790],{"class":126},[109,34025,34027],{"class":111,"line":34026},123,[109,34028,34029],{"class":115},"            # 将标签放到放到训练设备当中\n",[109,34031,34033,34035,34037],{"class":111,"line":34032},124,[109,34034,33800],{"class":126},[109,34036,130],{"class":122},[109,34038,33805],{"class":126},[109,34040,34042],{"class":111,"line":34041},125,[109,34043,34044],{"class":115},"            # 开启验证模式，设置模型为评估模式\n",[109,34046,34048],{"class":111,"line":34047},126,[109,34049,34050],{"class":126},"            model.eval()\n",[109,34052,34054,34057],{"class":111,"line":34053},127,[109,34055,34056],{"class":122},"            with",[109,34058,34059],{"class":126}," torch.no_grad():\n",[109,34061,34063],{"class":111,"line":34062},128,[109,34064,34065],{"class":115},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[109,34067,34069,34072,34074],{"class":111,"line":34068},129,[109,34070,34071],{"class":126},"                output ",[109,34073,130],{"class":122},[109,34075,34076],{"class":126}," model(b_x)\n",[109,34078,34080],{"class":111,"line":34079},130,[109,34081,34082],{"class":115},"                # 查找每一行中最大值对应的下标\n",[109,34084,34086,34089,34091,34094,34096,34098,34100],{"class":111,"line":34085},131,[109,34087,34088],{"class":126},"                pre_lab ",[109,34090,130],{"class":122},[109,34092,34093],{"class":126}," torch.argmax(output, ",[109,34095,33860],{"class":6553},[109,34097,130],{"class":122},[109,34099,1755],{"class":133},[109,34101,1330],{"class":126},[109,34103,34105],{"class":111,"line":34104},132,[109,34106,34107],{"class":115},"                # 计算验证集上的当前 batch 损失\n",[109,34109,34111,34114,34116],{"class":111,"line":34110},133,[109,34112,34113],{"class":126},"                val_batch_loss ",[109,34115,130],{"class":122},[109,34117,34118],{"class":126}," criterion(output, b_y)\n",[109,34120,34122],{"class":111,"line":34121},134,[109,34123,34124],{"class":115},"                # 对损失函数进行累加（按样本数加权）\n",[109,34126,34128,34131,34133,34136,34138,34141,34143],{"class":111,"line":34127},135,[109,34129,34130],{"class":126},"                val_loss ",[109,34132,10795],{"class":122},[109,34134,34135],{"class":126}," val_batch_loss.item() ",[109,34137,1988],{"class":122},[109,34139,34140],{"class":126}," b_x.size(",[109,34142,1314],{"class":133},[109,34144,1330],{"class":126},[109,34146,34148,34151,34153,34156,34158],{"class":111,"line":34147},136,[109,34149,34150],{"class":126},"                val_corrects ",[109,34152,10795],{"class":122},[109,34154,34155],{"class":126}," torch.sum(pre_lab ",[109,34157,4296],{"class":122},[109,34159,34160],{"class":126}," b_y.data)\n",[109,34162,34164],{"class":111,"line":34163},137,[109,34165,34166],{"class":115},"                # 当前用于验证的样本数量\n",[109,34168,34170,34173,34175,34177,34179],{"class":111,"line":34169},138,[109,34171,34172],{"class":126},"            val_num ",[109,34174,10795],{"class":122},[109,34176,34140],{"class":126},[109,34178,1314],{"class":133},[109,34180,1330],{"class":126},[109,34182,34184],{"class":111,"line":34183},139,[109,34185,34186],{"class":115},"        # 计算并保存每一次迭代的loss值和准确率\n",[109,34188,34190],{"class":111,"line":34189},140,[109,34191,34192],{"class":115},"        # 计算并保存训练集的loss值\n",[109,34194,34196,34199,34201],{"class":111,"line":34195},141,[109,34197,34198],{"class":126},"        train_loss_all.append(train_loss",[109,34200,2116],{"class":122},[109,34202,34203],{"class":126},"train_num)\n",[109,34205,34207],{"class":111,"line":34206},142,[109,34208,34209],{"class":115},"        # 取双精度\n",[109,34211,34213],{"class":111,"line":34212},143,[109,34214,34215],{"class":115},"        # 计算并保存训练集的准确率\n",[109,34217,34219,34222,34224],{"class":111,"line":34218},144,[109,34220,34221],{"class":126},"        train_acc_all.append(train_corrects.double().item()",[109,34223,2116],{"class":122},[109,34225,34203],{"class":126},[109,34227,34229],{"class":111,"line":34228},145,[109,34230,34231],{"class":115},"        # 计算并保存验证集的loss值\n",[109,34233,34235,34238,34240],{"class":111,"line":34234},146,[109,34236,34237],{"class":126},"        val_loss_all.append(val_loss",[109,34239,2116],{"class":122},[109,34241,34242],{"class":126},"val_num)\n",[109,34244,34246],{"class":111,"line":34245},147,[109,34247,34248],{"class":115},"        # 计算并保存验证集的准确率\n",[109,34250,34252,34255,34257],{"class":111,"line":34251},148,[109,34253,34254],{"class":126},"        val_acc_all.append(val_corrects.double().item()",[109,34256,2116],{"class":122},[109,34258,34242],{"class":126},[109,34260,34262],{"class":111,"line":34261},149,[109,34263,158],{"emptyLinePlaceholder":157},[109,34265,34267],{"class":111,"line":34266},150,[109,34268,34269],{"class":115},"        # 打印训练一轮的loss值和准确率\n",[109,34271,34273,34275,34277,34279,34281,34284,34286,34289,34291,34294,34296,34298,34300,34302,34305,34307,34309,34312,34314,34316],{"class":111,"line":34272},151,[109,34274,33626],{"class":133},[109,34276,714],{"class":126},[109,34278,4935],{"class":278},[109,34280,33634],{"class":133},[109,34282,34283],{"class":278},"train loss:",[109,34285,2427],{"class":133},[109,34287,34288],{"class":122},":.4f",[109,34290,2476],{"class":133},[109,34292,34293],{"class":278}," train acc:",[109,34295,2427],{"class":133},[109,34297,34288],{"class":122},[109,34299,2476],{"class":133},[109,34301,4935],{"class":278},[109,34303,34304],{"class":126},".format(epoch,train_loss_all[",[109,34306,2064],{"class":122},[109,34308,1755],{"class":133},[109,34310,34311],{"class":126},"],train_acc_all[",[109,34313,2064],{"class":122},[109,34315,1755],{"class":133},[109,34317,34318],{"class":126},"]))\n",[109,34320,34322,34324,34326,34328,34330,34333,34335,34337,34339,34342,34344,34346,34348,34350,34353,34355,34357,34360,34362,34364],{"class":111,"line":34321},152,[109,34323,33626],{"class":133},[109,34325,714],{"class":126},[109,34327,4935],{"class":278},[109,34329,33634],{"class":133},[109,34331,34332],{"class":278},"val loss:",[109,34334,2427],{"class":133},[109,34336,34288],{"class":122},[109,34338,2476],{"class":133},[109,34340,34341],{"class":278}," val acc:",[109,34343,2427],{"class":133},[109,34345,34288],{"class":122},[109,34347,2476],{"class":133},[109,34349,4935],{"class":278},[109,34351,34352],{"class":126},".format(epoch,val_loss_all[",[109,34354,2064],{"class":122},[109,34356,1755],{"class":133},[109,34358,34359],{"class":126},"],val_acc_all[",[109,34361,2064],{"class":122},[109,34363,1755],{"class":133},[109,34365,34318],{"class":126},[109,34367,34369],{"class":111,"line":34368},153,[109,34370,158],{"emptyLinePlaceholder":157},[109,34372,34374],{"class":111,"line":34373},154,[109,34375,34376],{"class":115},"        # 判断准确度--->保存最优模型\n",[109,34378,34380,34382,34385,34387,34389,34391,34393],{"class":111,"line":34379},155,[109,34381,3852],{"class":122},[109,34383,34384],{"class":126}," val_acc_all[",[109,34386,2064],{"class":122},[109,34388,1755],{"class":133},[109,34390,2470],{"class":126},[109,34392,2490],{"class":122},[109,34394,34395],{"class":126},"best_acc:\n",[109,34397,34399],{"class":111,"line":34398},156,[109,34400,34401],{"class":115},"            # 保存当前模型准确度\n",[109,34403,34405,34408,34410,34412,34415,34417,34419],{"class":111,"line":34404},157,[109,34406,34407],{"class":126},"            best_acc:",[109,34409,1584],{"class":133},[109,34411,130],{"class":122},[109,34413,34414],{"class":126},"val_acc_all[",[109,34416,2064],{"class":122},[109,34418,1755],{"class":133},[109,34420,34421],{"class":126},"]\n",[109,34423,34425],{"class":111,"line":34424},158,[109,34426,34427],{"class":115},"            # 保存当前的准确度\n",[109,34429,34431],{"class":111,"line":34430},159,[109,34432,34433],{"class":115},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[109,34435,34437,34440,34442],{"class":111,"line":34436},160,[109,34438,34439],{"class":126},"            best_model_wts",[109,34441,130],{"class":122},[109,34443,33489],{"class":126},[109,34445,34447],{"class":111,"line":34446},161,[109,34448,158],{"emptyLinePlaceholder":157},[109,34450,34452],{"class":111,"line":34451},162,[109,34453,34454],{"class":115},"        # 计算耗时\n",[109,34456,34458,34461,34463,34466,34468],{"class":111,"line":34457},163,[109,34459,34460],{"class":126},"        time_use",[109,34462,130],{"class":122},[109,34464,34465],{"class":126},"time.time()",[109,34467,2064],{"class":122},[109,34469,34470],{"class":126},"since\n",[109,34472,34474,34476,34478,34481,34483,34486,34488,34490,34492,34494,34496,34499,34502,34505,34507,34510,34512,34514],{"class":111,"line":34473},164,[109,34475,33626],{"class":133},[109,34477,714],{"class":126},[109,34479,34480],{"class":278},"'训练和验证耗费的时间",[109,34482,2427],{"class":133},[109,34484,34485],{"class":122},":.0f",[109,34487,2476],{"class":133},[109,34489,2076],{"class":278},[109,34491,2427],{"class":133},[109,34493,34485],{"class":122},[109,34495,2476],{"class":133},[109,34497,34498],{"class":278},"s'",[109,34500,34501],{"class":126},".format(time_use",[109,34503,34504],{"class":122},"\u002F\u002F",[109,34506,2438],{"class":133},[109,34508,34509],{"class":126},",time_use",[109,34511,1865],{"class":122},[109,34513,2438],{"class":133},[109,34515,31672],{"class":126},[109,34517,34519],{"class":111,"line":34518},165,[109,34520,34521],{"class":115},"    # 选择最优参数\n",[109,34523,34525],{"class":111,"line":34524},166,[109,34526,34527],{"class":115},"    # 加载最高准确率下的模型参数\n",[109,34529,34531],{"class":111,"line":34530},167,[109,34532,34533],{"class":115},"    # model.load_state_dict(best_model_wts)\n",[109,34535,34537,34540,34543],{"class":111,"line":34536},168,[109,34538,34539],{"class":126},"    torch.save(model.state_dict(best_model_wts), ",[109,34541,34542],{"class":278},"'.\u002Fbest_model.pth'",[109,34544,1330],{"class":126},[109,34546,34548],{"class":111,"line":34547},169,[109,34549,34550],{"class":115},"    # 或者写成\n",[109,34552,34554],{"class":111,"line":34553},170,[109,34555,34556],{"class":115},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[109,34558,34560],{"class":111,"line":34559},171,[109,34561,34562],{"class":115},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[109,34564,34566,34569,34571,34574,34577,34579],{"class":111,"line":34565},172,[109,34567,34568],{"class":126},"    train_process",[109,34570,130],{"class":122},[109,34572,34573],{"class":126},"pd.DataFrame(",[109,34575,34576],{"class":6553},"data",[109,34578,130],{"class":122},[109,34580,808],{"class":126},[109,34582,34584,34587,34589,34592],{"class":111,"line":34583},173,[109,34585,34586],{"class":278},"        \"epoch\"",[109,34588,2391],{"class":126},[109,34590,34591],{"class":133},"range",[109,34593,34594],{"class":126},"(num_epochs),\n",[109,34596,34598,34601],{"class":111,"line":34597},174,[109,34599,34600],{"class":278},"        \"train_loss_all\"",[109,34602,34603],{"class":126},":train_loss_all,\n",[109,34605,34607,34610],{"class":111,"line":34606},175,[109,34608,34609],{"class":278},"        \"val_loss_all\"",[109,34611,34612],{"class":126},":val_loss_all,\n",[109,34614,34616,34619],{"class":111,"line":34615},176,[109,34617,34618],{"class":278},"        \"train_acc_all\"",[109,34620,34621],{"class":126},":train_acc_all,\n",[109,34623,34625,34628],{"class":111,"line":34624},177,[109,34626,34627],{"class":278},"        \"val_acc_all\"",[109,34629,34630],{"class":126},":val_acc_all\n",[109,34632,34634],{"class":111,"line":34633},178,[109,34635,34636],{"class":126},"    })\n",[109,34638,34640],{"class":111,"line":34639},179,[109,34641,34642],{"class":115},"    # 返回训练保存的过程\n",[109,34644,34646,34648],{"class":111,"line":34645},180,[109,34647,731],{"class":122},[109,34649,34650],{"class":126}," train_process\n",[109,34652,34654],{"class":111,"line":34653},181,[109,34655,158],{"emptyLinePlaceholder":157},[109,34657,34659],{"class":111,"line":34658},182,[109,34660,34661],{"class":115},"# 将loss值和精度按照图片的形式展示出来\n",[109,34663,34665,34667,34670],{"class":111,"line":34664},183,[109,34666,33122],{"class":122},[109,34668,34669],{"class":211}," matplot_acc_loss",[109,34671,34672],{"class":126},"(train_process):\n",[109,34674,34676],{"class":111,"line":34675},184,[109,34677,34678],{"class":115},"    # 设置图的大小\n",[109,34680,34682,34685,34687,34689,34691,34693,34695,34697],{"class":111,"line":34681},185,[109,34683,34684],{"class":126},"    plt.figure(",[109,34686,32868],{"class":6553},[109,34688,130],{"class":122},[109,34690,714],{"class":126},[109,34692,2030],{"class":133},[109,34694,1914],{"class":126},[109,34696,1831],{"class":133},[109,34698,31672],{"class":126},[109,34700,34702],{"class":111,"line":34701},186,[109,34703,34704],{"class":115},"    # 设置图中有几张图\n",[109,34706,34708],{"class":111,"line":34707},187,[109,34709,34710],{"class":115},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[109,34712,34714],{"class":111,"line":34713},188,[109,34715,34716],{"class":115},"    # ①loss图\n",[109,34718,34720,34722,34724,34726,34728,34730,34732],{"class":111,"line":34719},189,[109,34721,32902],{"class":126},[109,34723,1755],{"class":133},[109,34725,1914],{"class":126},[109,34727,1618],{"class":133},[109,34729,1914],{"class":126},[109,34731,1755],{"class":133},[109,34733,1330],{"class":126},[109,34735,34737],{"class":111,"line":34736},190,[109,34738,34739],{"class":115},"    # 补充:\n",[109,34741,34743],{"class":111,"line":34742},191,[109,34744,34745],{"class":115},"    # plt.subplot(nrows, ncols, index)\n",[109,34747,34749],{"class":111,"line":34748},192,[109,34750,34751],{"class":115},"    # nrows：行数\n",[109,34753,34755],{"class":111,"line":34754},193,[109,34756,34757],{"class":115},"    # ncols：列数\n",[109,34759,34761],{"class":111,"line":34760},194,[109,34762,34763],{"class":115},"    # index：目前选中第几个子图（从1开始）\n",[109,34765,34767,34770,34773,34776,34779,34781,34784,34786,34789],{"class":111,"line":34766},195,[109,34768,34769],{"class":126},"    plt.plot(train_process[",[109,34771,34772],{"class":278},"\"epoch\"",[109,34774,34775],{"class":126},"],train_process.train_loss_all,",[109,34777,34778],{"class":278},"'ro-'",[109,34780,1914],{"class":126},[109,34782,34783],{"class":6553},"label",[109,34785,130],{"class":122},[109,34787,34788],{"class":278},"'train loss'",[109,34790,1330],{"class":126},[109,34792,34794,34796,34798,34801,34804,34806,34808,34810,34813],{"class":111,"line":34793},196,[109,34795,34769],{"class":126},[109,34797,34772],{"class":278},[109,34799,34800],{"class":126},"],train_process.val_loss_all,",[109,34802,34803],{"class":278},"'bs--'",[109,34805,1914],{"class":126},[109,34807,34783],{"class":6553},[109,34809,130],{"class":122},[109,34811,34812],{"class":278},"'val loss'",[109,34814,1330],{"class":126},[109,34816,34818],{"class":111,"line":34817},197,[109,34819,34820],{"class":115},"    # 添加一个图例\n",[109,34822,34824],{"class":111,"line":34823},198,[109,34825,34826],{"class":126},"    plt.legend()\n",[109,34828,34830],{"class":111,"line":34829},199,[109,34831,34832],{"class":115},"    # 给轴添加标签\n",[109,34834,34836,34839,34842],{"class":111,"line":34835},200,[109,34837,34838],{"class":126},"    plt.xlabel(",[109,34840,34841],{"class":278},"'epoch'",[109,34843,1330],{"class":126},[109,34845,34847,34850,34853],{"class":111,"line":34846},201,[109,34848,34849],{"class":126},"    plt.ylabel(",[109,34851,34852],{"class":278},"'loss'",[109,34854,1330],{"class":126},[109,34856,34858],{"class":111,"line":34857},202,[109,34859,34860],{"class":115},"    # ②准确度图\n",[109,34862,34864,34866,34868,34870,34872,34874,34876],{"class":111,"line":34863},203,[109,34865,32902],{"class":126},[109,34867,1755],{"class":133},[109,34869,1914],{"class":126},[109,34871,1618],{"class":133},[109,34873,1914],{"class":126},[109,34875,1618],{"class":133},[109,34877,1330],{"class":126},[109,34879,34881,34883,34885,34888,34890,34892,34894,34896,34899],{"class":111,"line":34880},204,[109,34882,34769],{"class":126},[109,34884,34772],{"class":278},[109,34886,34887],{"class":126},"],train_process.train_acc_all,",[109,34889,34778],{"class":278},[109,34891,1914],{"class":126},[109,34893,34783],{"class":6553},[109,34895,130],{"class":122},[109,34897,34898],{"class":278},"'train acc'",[109,34900,1330],{"class":126},[109,34902,34904,34906,34908,34911,34913,34915,34917,34919,34922],{"class":111,"line":34903},205,[109,34905,34769],{"class":126},[109,34907,34772],{"class":278},[109,34909,34910],{"class":126},"],train_process.val_acc_all,",[109,34912,34803],{"class":278},[109,34914,1914],{"class":126},[109,34916,34783],{"class":6553},[109,34918,130],{"class":122},[109,34920,34921],{"class":278},"'val acc'",[109,34923,1330],{"class":126},[109,34925,34927],{"class":111,"line":34926},206,[109,34928,34929],{"class":115},"    # 添加图例\n",[109,34931,34933],{"class":111,"line":34932},207,[109,34934,34826],{"class":126},[109,34936,34938,34940,34942],{"class":111,"line":34937},208,[109,34939,34838],{"class":126},[109,34941,34772],{"class":278},[109,34943,1330],{"class":126},[109,34945,34947,34949,34952],{"class":111,"line":34946},209,[109,34948,34849],{"class":126},[109,34950,34951],{"class":278},"\"acc\"",[109,34953,1330],{"class":126},[109,34955,34957],{"class":111,"line":34956},210,[109,34958,34959],{"class":126},"    plt.show()\n",[109,34961,34963],{"class":111,"line":34962},211,[109,34964,158],{"emptyLinePlaceholder":157},[109,34966,34968],{"class":111,"line":34967},212,[109,34969,34970],{"class":115},"# 正式开始训练:\n",[109,34972,34974,34976,34978,34980,34982],{"class":111,"line":34973},213,[109,34975,2922],{"class":122},[109,34977,32395],{"class":133},[109,34979,4296],{"class":122},[109,34981,32400],{"class":278},[109,34983,5082],{"class":126},[109,34985,34987],{"class":111,"line":34986},214,[109,34988,34989],{"class":115},"    # 将模型实例化\n",[109,34991,34993,34996,34998],{"class":111,"line":34992},215,[109,34994,34995],{"class":126},"    LeNet",[109,34997,130],{"class":122},[109,34999,35000],{"class":126},"LeNet()\n",[109,35002,35004,35007,35009],{"class":111,"line":35003},216,[109,35005,35006],{"class":126},"    train_dataloader,val_dataloader",[109,35008,130],{"class":122},[109,35010,35011],{"class":126},"train_val_data_process()\n",[109,35013,35015,35017,35019,35022,35025,35027,35029],{"class":111,"line":35014},217,[109,35016,34568],{"class":126},[109,35018,130],{"class":122},[109,35020,35021],{"class":126},"train_model_process(LeNet,train_dataloader,val_dataloader,",[109,35023,35024],{"class":6553},"num_epochs",[109,35026,130],{"class":122},[109,35028,2232],{"class":133},[109,35030,1330],{"class":126},[109,35032,35034],{"class":111,"line":35033},218,[109,35035,35036],{"class":126},"    matplot_acc_loss(train_process)\n",[19,35038,35039],{},"画图的补充点学习：",[19,35041,35042],{},[938,35043],{"alt":104,"src":35044},"\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",[765,35046,35047],{"start":140},[30,35048,35049],{},"测试",[99,35051,35053],{"className":31553,"code":35052,"language":31555,"meta":104,"style":104},"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",[106,35054,35055,35061,35071,35083,35093,35098,35108,35118,35122,35127,35136,35153,35165,35182,35193,35209,35214,35225,35236,35247,35254,35258,35263,35273,35278,35295,35303,35307,35312,35321,35330,35334,35339,35344,35349,35356,35361,35373,35383,35393,35398,35402,35407,35416,35421,35437,35442,35447,35452,35466,35471,35485,35489,35494,35509,35514,35526,35530,35535,35547,35552,35560,35565,35570,35580,35585,35594,35599,35604,35608,35613,35618,35634,35642,35647,35652,35711,35717,35722,35733,35741,35749,35753,35758,35762,35767,35775,35780,35796,35801,35811,35821],{"__ignoreMap":104},[109,35056,35057,35059],{"class":111,"line":112},[109,35058,31567],{"class":122},[109,35060,31570],{"class":126},[109,35062,35063,35065,35067,35069],{"class":111,"line":119},[109,35064,31567],{"class":122},[109,35066,32590],{"class":126},[109,35068,32558],{"class":122},[109,35070,32595],{"class":126},[109,35072,35073,35075,35078,35080],{"class":111,"line":140},[109,35074,31912],{"class":122},[109,35076,35077],{"class":126}," jupyter_client.consoleapp ",[109,35079,31567],{"class":122},[109,35081,35082],{"class":126}," classes\n",[109,35084,35085,35087,35089,35091],{"class":111,"line":154},[109,35086,31912],{"class":122},[109,35088,32573],{"class":126},[109,35090,31567],{"class":122},[109,35092,32578],{"class":126},[109,35094,35095],{"class":111,"line":161},[109,35096,35097],{"class":115},"# 导入数据集\n",[109,35099,35100,35102,35104,35106],{"class":111,"line":167},[109,35101,31912],{"class":122},[109,35103,32543],{"class":126},[109,35105,31567],{"class":122},[109,35107,32548],{"class":126},[109,35109,35110,35112,35114,35116],{"class":111,"line":185},[109,35111,31912],{"class":122},[109,35113,33089],{"class":126},[109,35115,31567],{"class":122},[109,35117,33094],{"class":126},[109,35119,35120],{"class":111,"line":201},[109,35121,158],{"emptyLinePlaceholder":157},[109,35123,35124],{"class":111,"line":206},[109,35125,35126],{"class":115},"# 测试数据处理\n",[109,35128,35129,35131,35134],{"class":111,"line":218},[109,35130,33122],{"class":122},[109,35132,35133],{"class":211}," test_data_process",[109,35135,33128],{"class":126},[109,35137,35138,35141,35143,35145,35147,35149,35151],{"class":111,"line":223},[109,35139,35140],{"class":126},"    test_data",[109,35142,130],{"class":122},[109,35144,32630],{"class":126},[109,35146,32633],{"class":6553},[109,35148,130],{"class":122},[109,35150,32638],{"class":278},[109,35152,32641],{"class":126},[109,35154,35155,35158,35160,35163],{"class":111,"line":229},[109,35156,35157],{"class":6553},"                           train",[109,35159,130],{"class":122},[109,35161,35162],{"class":133},"False",[109,35164,32641],{"class":126},[109,35166,35167,35170,35172,35174,35176,35178,35180],{"class":111,"line":244},[109,35168,35169],{"class":6553},"                           transform",[109,35171,130],{"class":122},[109,35173,32668],{"class":126},[109,35175,32671],{"class":6553},[109,35177,130],{"class":122},[109,35179,2432],{"class":133},[109,35181,32679],{"class":126},[109,35183,35184,35187,35189,35191],{"class":111,"line":258},[109,35185,35186],{"class":6553},"                           download",[109,35188,130],{"class":122},[109,35190,32651],{"class":133},[109,35192,1330],{"class":126},[109,35194,35195,35198,35200,35202,35204,35206],{"class":111,"line":263},[109,35196,35197],{"class":126},"    test_dataloader",[109,35199,130],{"class":122},[109,35201,32709],{"class":126},[109,35203,32712],{"class":6553},[109,35205,130],{"class":122},[109,35207,35208],{"class":126},"test_data,\n",[109,35210,35211],{"class":111,"line":269},[109,35212,35213],{"class":115},"                                    # 这里是一张一张进行测试\n",[109,35215,35216,35219,35221,35223],{"class":111,"line":304},[109,35217,35218],{"class":6553},"                                    batch_size",[109,35220,130],{"class":122},[109,35222,1755],{"class":133},[109,35224,32641],{"class":126},[109,35226,35227,35230,35232,35234],{"class":111,"line":331},[109,35228,35229],{"class":6553},"                                    shuffle",[109,35231,130],{"class":122},[109,35233,32651],{"class":133},[109,35235,32641],{"class":126},[109,35237,35238,35241,35243,35245],{"class":111,"line":336},[109,35239,35240],{"class":6553},"                                    num_workers",[109,35242,130],{"class":122},[109,35244,1314],{"class":133},[109,35246,1330],{"class":126},[109,35248,35249,35251],{"class":111,"line":364},[109,35250,731],{"class":122},[109,35252,35253],{"class":126}," test_dataloader\n",[109,35255,35256],{"class":111,"line":391},[109,35257,158],{"emptyLinePlaceholder":157},[109,35259,35260],{"class":111,"line":396},[109,35261,35262],{"class":115},"# 定义模型测试函数\n",[109,35264,35265,35267,35270],{"class":111,"line":402},[109,35266,33122],{"class":122},[109,35268,35269],{"class":211}," test_model_process",[109,35271,35272],{"class":126},"(model,test_dataloader):\n",[109,35274,35275],{"class":111,"line":419},[109,35276,35277],{"class":115},"    # 将模型放到设备当中，先进行判断\n",[109,35279,35280,35282,35284,35286,35288,35290,35292],{"class":111,"line":435},[109,35281,32412],{"class":126},[109,35283,130],{"class":122},[109,35285,32419],{"class":278},[109,35287,3080],{"class":122},[109,35289,32424],{"class":126},[109,35291,3077],{"class":122},[109,35293,35294],{"class":278}," \"cpu\"\n",[109,35296,35297,35299,35301],{"class":111,"line":440},[109,35298,32464],{"class":126},[109,35300,130],{"class":122},[109,35302,33464],{"class":126},[109,35304,35305],{"class":111,"line":467},[109,35306,158],{"emptyLinePlaceholder":157},[109,35308,35309],{"class":111,"line":494},[109,35310,35311],{"class":115},"    # 设置初始化参数\n",[109,35313,35314,35317,35319],{"class":111,"line":499},[109,35315,35316],{"class":126},"    test_corrects",[109,35318,130],{"class":122},[109,35320,33517],{"class":133},[109,35322,35323,35326,35328],{"class":111,"line":526},[109,35324,35325],{"class":126},"    test_num",[109,35327,130],{"class":122},[109,35329,4430],{"class":133},[109,35331,35332],{"class":111,"line":552},[109,35333,158],{"emptyLinePlaceholder":157},[109,35335,35336],{"class":111,"line":557},[109,35337,35338],{"class":115},"    # 进行模型测试\n",[109,35340,35341],{"class":111,"line":584},[109,35342,35343],{"class":115},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[109,35345,35346],{"class":111,"line":611},[109,35347,35348],{"class":115},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[109,35350,35351,35354],{"class":111,"line":616},[109,35352,35353],{"class":122},"    with",[109,35355,34059],{"class":126},[109,35357,35358],{"class":111,"line":633},[109,35359,35360],{"class":115},"        # 从数据中进行\n",[109,35362,35363,35365,35368,35370],{"class":111,"line":649},[109,35364,4747],{"class":122},[109,35366,35367],{"class":126}," test_data_x,test_data_y ",[109,35369,27218],{"class":122},[109,35371,35372],{"class":126}," test_dataloader:\n",[109,35374,35375,35378,35380],{"class":111,"line":676},[109,35376,35377],{"class":126},"            test_data_x",[109,35379,130],{"class":122},[109,35381,35382],{"class":126},"test_data_x.to(device)\n",[109,35384,35385,35388,35390],{"class":111,"line":703},[109,35386,35387],{"class":126},"            test_data_y",[109,35389,130],{"class":122},[109,35391,35392],{"class":126},"test_data_y.to(device)\n",[109,35394,35395],{"class":111,"line":708},[109,35396,35397],{"class":115},"            # 设置为验证模式\n",[109,35399,35400],{"class":111,"line":723},[109,35401,34050],{"class":126},[109,35403,35404],{"class":111,"line":728},[109,35405,35406],{"class":115},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[109,35408,35409,35411,35413],{"class":111,"line":739},[109,35410,33835],{"class":126},[109,35412,130],{"class":122},[109,35414,35415],{"class":126},"model(test_data_x)\n",[109,35417,35418],{"class":111,"line":9352},[109,35419,35420],{"class":115},"            # 查找每一行中最大值对应的下标\n",[109,35422,35423,35425,35427,35429,35431,35433,35435],{"class":111,"line":9364},[109,35424,33852],{"class":126},[109,35426,130],{"class":122},[109,35428,33857],{"class":126},[109,35430,33860],{"class":6553},[109,35432,130],{"class":122},[109,35434,1755],{"class":133},[109,35436,1330],{"class":126},[109,35438,35439],{"class":111,"line":9376},[109,35440,35441],{"class":115},"            # 计算正确率\n",[109,35443,35444],{"class":111,"line":11034},[109,35445,35446],{"class":115},"            # .data表示是一个不带梯度信息的tensor\n",[109,35448,35449],{"class":111,"line":11059},[109,35450,35451],{"class":115},"            # 如果预测正确，则准确度test_corrects加1\n",[109,35453,35454,35457,35459,35461,35463],{"class":111,"line":11082},[109,35455,35456],{"class":126},"            test_corrects",[109,35458,10795],{"class":122},[109,35460,33962],{"class":126},[109,35462,4296],{"class":122},[109,35464,35465],{"class":126},"test_data_y.data)\n",[109,35467,35468],{"class":111,"line":11106},[109,35469,35470],{"class":115},"            # 将所有的测试样本进行累计\n",[109,35472,35473,35476,35478,35481,35483],{"class":111,"line":11111},[109,35474,35475],{"class":126},"            test_num",[109,35477,10795],{"class":122},[109,35479,35480],{"class":126},"test_data_x.size(",[109,35482,1314],{"class":133},[109,35484,1330],{"class":126},[109,35486,35487],{"class":111,"line":11116},[109,35488,158],{"emptyLinePlaceholder":157},[109,35490,35491],{"class":111,"line":11121},[109,35492,35493],{"class":115},"        # 计算准确度\n",[109,35495,35496,35499,35501,35504,35506],{"class":111,"line":11130},[109,35497,35498],{"class":126},"        test_acc",[109,35500,130],{"class":122},[109,35502,35503],{"class":126},"test_corrects.double().item()",[109,35505,2116],{"class":122},[109,35507,35508],{"class":126},"test_num\n",[109,35510,35511],{"class":111,"line":11135},[109,35512,35513],{"class":115},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[109,35515,35516,35518,35520,35523],{"class":111,"line":11141},[109,35517,33626],{"class":133},[109,35519,714],{"class":126},[109,35521,35522],{"class":278},"\"测试的准确率：\"",[109,35524,35525],{"class":126},",test_acc)\n",[109,35527,35528],{"class":111,"line":11162},[109,35529,158],{"emptyLinePlaceholder":157},[109,35531,35532],{"class":111,"line":11168},[109,35533,35534],{"class":115},"# 实现模型的测试功能\n",[109,35536,35537,35539,35541,35543,35545],{"class":111,"line":11182},[109,35538,2922],{"class":122},[109,35540,32395],{"class":133},[109,35542,4296],{"class":122},[109,35544,32400],{"class":278},[109,35546,5082],{"class":126},[109,35548,35549],{"class":111,"line":11188},[109,35550,35551],{"class":115},"    # 加载模型\n",[109,35553,35554,35556,35558],{"class":111,"line":11215},[109,35555,32464],{"class":126},[109,35557,130],{"class":122},[109,35559,35000],{"class":126},[109,35561,35562],{"class":111,"line":11224},[109,35563,35564],{"class":115},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[109,35566,35567],{"class":111,"line":11230},[109,35568,35569],{"class":115},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[109,35571,35572,35575,35578],{"class":111,"line":11238},[109,35573,35574],{"class":126},"    model.load_state_dict(torch.load(",[109,35576,35577],{"class":278},"'best_model.pth'",[109,35579,31672],{"class":126},[109,35581,35582],{"class":111,"line":11243},[109,35583,35584],{"class":115},"    # 数据加载\n",[109,35586,35587,35589,35591],{"class":111,"line":17777},[109,35588,35197],{"class":126},[109,35590,130],{"class":122},[109,35592,35593],{"class":126},"test_data_process()\n",[109,35595,35596],{"class":111,"line":17783},[109,35597,35598],{"class":115},"    # 加载模型测试的函数\n",[109,35600,35601],{"class":111,"line":17806},[109,35602,35603],{"class":126},"    test_model_process(model,test_dataloader)\n",[109,35605,35606],{"class":111,"line":17812},[109,35607,158],{"emptyLinePlaceholder":157},[109,35609,35610],{"class":111,"line":17835},[109,35611,35612],{"class":115},"    # 验证集推理实现：\n",[109,35614,35615],{"class":111,"line":17849},[109,35616,35617],{"class":115},"    # 加载数据加载的更详细一些\n",[109,35619,35620,35622,35624,35626,35628,35630,35632],{"class":111,"line":17869},[109,35621,32412],{"class":126},[109,35623,130],{"class":122},[109,35625,32419],{"class":278},[109,35627,3080],{"class":122},[109,35629,32424],{"class":126},[109,35631,3077],{"class":122},[109,35633,35294],{"class":278},[109,35635,35636,35638,35640],{"class":111,"line":17875},[109,35637,32464],{"class":126},[109,35639,130],{"class":122},[109,35641,33464],{"class":126},[109,35643,35644],{"class":111,"line":17886},[109,35645,35646],{"class":115},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[109,35648,35649],{"class":111,"line":17909},[109,35650,35651],{"class":115},"    # 顺序不可改变\n",[109,35653,35654,35657,35659,35661,35664,35666,35669,35671,35674,35676,35679,35681,35684,35686,35689,35691,35694,35696,35699,35701,35704,35706,35709],{"class":111,"line":17931},[109,35655,35656],{"class":126},"    classes",[109,35658,130],{"class":122},[109,35660,1289],{"class":126},[109,35662,35663],{"class":278},"'T-shirt\u002Ftop'",[109,35665,1914],{"class":126},[109,35667,35668],{"class":278},"'Trouser'",[109,35670,1914],{"class":126},[109,35672,35673],{"class":278},"'Pullover'",[109,35675,1914],{"class":126},[109,35677,35678],{"class":278},"'Dress'",[109,35680,1914],{"class":126},[109,35682,35683],{"class":278},"'Coat'",[109,35685,1914],{"class":126},[109,35687,35688],{"class":278},"'Sandal'",[109,35690,1914],{"class":126},[109,35692,35693],{"class":278},"'Shirt'",[109,35695,1914],{"class":126},[109,35697,35698],{"class":278},"'Sneaker'",[109,35700,1914],{"class":126},[109,35702,35703],{"class":278},"'Bag'",[109,35705,1914],{"class":126},[109,35707,35708],{"class":278},"'Ankle boot'",[109,35710,34421],{"class":126},[109,35712,35713,35715],{"class":111,"line":17936},[109,35714,35353],{"class":122},[109,35716,34059],{"class":126},[109,35718,35719],{"class":111,"line":17942},[109,35720,35721],{"class":115},"        # 将数据和标签都放到设备当中\n",[109,35723,35724,35726,35729,35731],{"class":111,"line":17956},[109,35725,4747],{"class":122},[109,35727,35728],{"class":126}," b_x,b_y ",[109,35730,27218],{"class":122},[109,35732,35372],{"class":126},[109,35734,35735,35737,35739],{"class":111,"line":17969},[109,35736,33785],{"class":126},[109,35738,130],{"class":122},[109,35740,33790],{"class":126},[109,35742,35743,35745,35747],{"class":111,"line":17974},[109,35744,33800],{"class":126},[109,35746,130],{"class":122},[109,35748,33805],{"class":126},[109,35750,35751],{"class":111,"line":17988},[109,35752,158],{"emptyLinePlaceholder":157},[109,35754,35755],{"class":111,"line":17993},[109,35756,35757],{"class":115},"            # 设置模型为验证模式\n",[109,35759,35760],{"class":111,"line":17999},[109,35761,34050],{"class":126},[109,35763,35764],{"class":111,"line":18004},[109,35765,35766],{"class":115},"            # 模型推理结果\n",[109,35768,35769,35771,35773],{"class":111,"line":18018},[109,35770,33835],{"class":126},[109,35772,130],{"class":122},[109,35774,33840],{"class":126},[109,35776,35777],{"class":111,"line":18023},[109,35778,35779],{"class":115},"            # 获取最大下标，最大下标就是类别号\n",[109,35781,35782,35784,35786,35788,35790,35792,35794],{"class":111,"line":18028},[109,35783,33852],{"class":126},[109,35785,130],{"class":122},[109,35787,33857],{"class":126},[109,35789,33860],{"class":6553},[109,35791,130],{"class":122},[109,35793,1755],{"class":133},[109,35795,1330],{"class":126},[109,35797,35798],{"class":111,"line":18042},[109,35799,35800],{"class":115},"            # 取出张量中的数值\n",[109,35802,35803,35806,35808],{"class":111,"line":18054},[109,35804,35805],{"class":126},"            result",[109,35807,130],{"class":122},[109,35809,35810],{"class":126},"pre_lab.item()\n",[109,35812,35813,35816,35818],{"class":111,"line":18059},[109,35814,35815],{"class":126},"            label",[109,35817,130],{"class":122},[109,35819,35820],{"class":126},"b_y.item()\n",[109,35822,35823,35826,35828,35831,35834,35837,35839,35842],{"class":111,"line":18072},[109,35824,35825],{"class":133},"            print",[109,35827,714],{"class":126},[109,35829,35830],{"class":278},"\"预测值：\"",[109,35832,35833],{"class":126},",classes[result],",[109,35835,35836],{"class":278},"\"------\"",[109,35838,1914],{"class":126},[109,35840,35841],{"class":278},"\"真实值：\"",[109,35843,35844],{"class":126},",classes[label])\n",[19,35846,35847],{},"（2）AlexNet",[765,35849,35850],{},[30,35851,35852],{},"神经网络构建",[99,35854,35856],{"className":31553,"code":35855,"language":31555,"meta":104,"style":104},"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",[106,35857,35858,35864,35874,35884,35896,35900,35917,35925,35940,35952,35994,36021,36064,36090,36134,36177,36220,36247,36251,36261,36266,36294,36313,36332,36336,36341,36349,36364,36374,36388,36398,36413,36428,36443,36454,36458,36463,36473,36488,36493,36507,36522,36534,36539,36550,36555,36561,36566,36578,36598,36603,36612],{"__ignoreMap":104},[109,35859,35860,35862],{"class":111,"line":112},[109,35861,31567],{"class":122},[109,35863,31570],{"class":126},[109,35865,35866,35868,35870,35872],{"class":111,"line":119},[109,35867,31912],{"class":122},[109,35869,31915],{"class":126},[109,35871,31567],{"class":122},[109,35873,31920],{"class":126},[109,35875,35876,35878,35880,35882],{"class":111,"line":140},[109,35877,31912],{"class":122},[109,35879,31932],{"class":126},[109,35881,31567],{"class":122},[109,35883,31937],{"class":126},[109,35885,35886,35888,35891,35893],{"class":111,"line":154},[109,35887,31567],{"class":122},[109,35889,35890],{"class":126}," torch.nn.functional ",[109,35892,32558],{"class":122},[109,35894,35895],{"class":126}," F\n",[109,35897,35898],{"class":111,"line":161},[109,35899,158],{"emptyLinePlaceholder":157},[109,35901,35902,35904,35907,35909,35911,35913,35915],{"class":111,"line":167},[109,35903,15867],{"class":122},[109,35905,35906],{"class":211}," AlexNet",[109,35908,714],{"class":126},[109,35910,31953],{"class":211},[109,35912,2090],{"class":126},[109,35914,31958],{"class":211},[109,35916,31961],{"class":126},[109,35918,35919,35921,35923],{"class":111,"line":185},[109,35920,31976],{"class":122},[109,35922,31979],{"class":133},[109,35924,31982],{"class":126},[109,35926,35927,35929,35932,35934,35936,35938],{"class":111,"line":201},[109,35928,31992],{"class":133},[109,35930,35931],{"class":126},"(AlexNet,",[109,35933,31998],{"class":133},[109,35935,32001],{"class":126},[109,35937,32004],{"class":133},[109,35939,803],{"class":126},[109,35941,35942,35944,35947,35949],{"class":111,"line":206},[109,35943,32020],{"class":133},[109,35945,35946],{"class":126},".ReLu",[109,35948,130],{"class":122},[109,35950,35951],{"class":126},"nn.ReLU()\n",[109,35953,35954,35956,35958,35960,35962,35964,35966,35968,35970,35972,35974,35976,35978,35980,35982,35984,35986,35988,35990,35992],{"class":111,"line":218},[109,35955,32020],{"class":133},[109,35957,32023],{"class":126},[109,35959,130],{"class":122},[109,35961,32028],{"class":126},[109,35963,32031],{"class":6553},[109,35965,130],{"class":122},[109,35967,1755],{"class":133},[109,35969,1914],{"class":126},[109,35971,32040],{"class":6553},[109,35973,130],{"class":122},[109,35975,1747],{"class":133},[109,35977,1914],{"class":126},[109,35979,32049],{"class":6553},[109,35981,130],{"class":122},[109,35983,2005],{"class":133},[109,35985,1914],{"class":126},[109,35987,32104],{"class":6553},[109,35989,130],{"class":122},[109,35991,1831],{"class":133},[109,35993,1330],{"class":126},[109,35995,35996,35998,36000,36002,36005,36007,36009,36011,36013,36015,36017,36019],{"class":111,"line":223},[109,35997,32020],{"class":133},[109,35999,32088],{"class":126},[109,36001,130],{"class":122},[109,36003,36004],{"class":126},"nn.MaxPool2d(",[109,36006,32049],{"class":6553},[109,36008,130],{"class":122},[109,36010,1612],{"class":133},[109,36012,1914],{"class":126},[109,36014,32104],{"class":6553},[109,36016,130],{"class":122},[109,36018,1618],{"class":133},[109,36020,1330],{"class":126},[109,36022,36023,36025,36027,36029,36031,36033,36035,36037,36039,36041,36043,36046,36048,36050,36052,36054,36056,36058,36060,36062],{"class":111,"line":229},[109,36024,32020],{"class":133},[109,36026,32117],{"class":126},[109,36028,130],{"class":122},[109,36030,32028],{"class":126},[109,36032,32031],{"class":6553},[109,36034,130],{"class":122},[109,36036,1747],{"class":133},[109,36038,1914],{"class":126},[109,36040,32040],{"class":6553},[109,36042,130],{"class":122},[109,36044,36045],{"class":133},"256",[109,36047,1914],{"class":126},[109,36049,32049],{"class":6553},[109,36051,130],{"class":122},[109,36053,1856],{"class":133},[109,36055,1914],{"class":126},[109,36057,32058],{"class":6553},[109,36059,130],{"class":122},[109,36061,1618],{"class":133},[109,36063,1330],{"class":126},[109,36065,36066,36068,36070,36072,36074,36076,36078,36080,36082,36084,36086,36088],{"class":111,"line":244},[109,36067,32020],{"class":133},[109,36069,32152],{"class":126},[109,36071,130],{"class":122},[109,36073,36004],{"class":126},[109,36075,32049],{"class":6553},[109,36077,130],{"class":122},[109,36079,1612],{"class":133},[109,36081,1914],{"class":126},[109,36083,32104],{"class":6553},[109,36085,130],{"class":122},[109,36087,1618],{"class":133},[109,36089,1330],{"class":126},[109,36091,36092,36094,36097,36099,36101,36103,36105,36107,36109,36111,36113,36116,36118,36120,36122,36124,36126,36128,36130,36132],{"class":111,"line":258},[109,36093,32020],{"class":133},[109,36095,36096],{"class":126},".c5",[109,36098,130],{"class":122},[109,36100,32028],{"class":126},[109,36102,32031],{"class":6553},[109,36104,130],{"class":122},[109,36106,36045],{"class":133},[109,36108,1914],{"class":126},[109,36110,32040],{"class":6553},[109,36112,130],{"class":122},[109,36114,36115],{"class":133},"384",[109,36117,1914],{"class":126},[109,36119,32049],{"class":6553},[109,36121,130],{"class":122},[109,36123,1612],{"class":133},[109,36125,1914],{"class":126},[109,36127,32058],{"class":6553},[109,36129,130],{"class":122},[109,36131,1755],{"class":133},[109,36133,1330],{"class":126},[109,36135,36136,36138,36141,36143,36145,36147,36149,36151,36153,36155,36157,36159,36161,36163,36165,36167,36169,36171,36173,36175],{"class":111,"line":263},[109,36137,32020],{"class":133},[109,36139,36140],{"class":126},".c6",[109,36142,130],{"class":122},[109,36144,32028],{"class":126},[109,36146,32031],{"class":6553},[109,36148,130],{"class":122},[109,36150,36115],{"class":133},[109,36152,1914],{"class":126},[109,36154,32040],{"class":6553},[109,36156,130],{"class":122},[109,36158,36115],{"class":133},[109,36160,1914],{"class":126},[109,36162,32049],{"class":6553},[109,36164,130],{"class":122},[109,36166,1612],{"class":133},[109,36168,1914],{"class":126},[109,36170,32058],{"class":6553},[109,36172,130],{"class":122},[109,36174,1755],{"class":133},[109,36176,1330],{"class":126},[109,36178,36179,36181,36184,36186,36188,36190,36192,36194,36196,36198,36200,36202,36204,36206,36208,36210,36212,36214,36216,36218],{"class":111,"line":269},[109,36180,32020],{"class":133},[109,36182,36183],{"class":126},".c7",[109,36185,130],{"class":122},[109,36187,32028],{"class":126},[109,36189,32031],{"class":6553},[109,36191,130],{"class":122},[109,36193,36115],{"class":133},[109,36195,1914],{"class":126},[109,36197,32040],{"class":6553},[109,36199,130],{"class":122},[109,36201,36045],{"class":133},[109,36203,1914],{"class":126},[109,36205,32049],{"class":6553},[109,36207,130],{"class":122},[109,36209,1612],{"class":133},[109,36211,1914],{"class":126},[109,36213,32058],{"class":6553},[109,36215,130],{"class":122},[109,36217,1755],{"class":133},[109,36219,1330],{"class":126},[109,36221,36222,36224,36227,36229,36231,36233,36235,36237,36239,36241,36243,36245],{"class":111,"line":304},[109,36223,32020],{"class":133},[109,36225,36226],{"class":126},".s8",[109,36228,130],{"class":122},[109,36230,36004],{"class":126},[109,36232,32049],{"class":6553},[109,36234,130],{"class":122},[109,36236,1612],{"class":133},[109,36238,1914],{"class":126},[109,36240,32104],{"class":6553},[109,36242,130],{"class":122},[109,36244,1618],{"class":133},[109,36246,1330],{"class":126},[109,36248,36249],{"class":111,"line":331},[109,36250,32177],{"class":115},[109,36252,36253,36255,36257,36259],{"class":111,"line":336},[109,36254,32020],{"class":133},[109,36256,32184],{"class":126},[109,36258,130],{"class":122},[109,36260,32189],{"class":126},[109,36262,36263],{"class":111,"line":364},[109,36264,36265],{"class":115},"       # 定义全连接层\n",[109,36267,36268,36270,36273,36275,36277,36279,36281,36283,36285,36287,36289,36292],{"class":111,"line":391},[109,36269,32020],{"class":133},[109,36271,36272],{"class":126},".f1",[109,36274,130],{"class":122},[109,36276,32206],{"class":126},[109,36278,1881],{"class":133},[109,36280,1988],{"class":122},[109,36282,1881],{"class":133},[109,36284,1988],{"class":122},[109,36286,36045],{"class":133},[109,36288,1914],{"class":126},[109,36290,36291],{"class":133},"4096",[109,36293,1330],{"class":126},[109,36295,36296,36298,36301,36303,36305,36307,36309,36311],{"class":111,"line":396},[109,36297,32020],{"class":133},[109,36299,36300],{"class":126},".f2",[109,36302,130],{"class":122},[109,36304,32206],{"class":126},[109,36306,36291],{"class":133},[109,36308,1914],{"class":126},[109,36310,36291],{"class":133},[109,36312,1330],{"class":126},[109,36314,36315,36317,36320,36322,36324,36326,36328,36330],{"class":111,"line":402},[109,36316,32020],{"class":133},[109,36318,36319],{"class":126},".f3",[109,36321,130],{"class":122},[109,36323,32206],{"class":126},[109,36325,36291],{"class":133},[109,36327,1914],{"class":126},[109,36329,1008],{"class":133},[109,36331,1330],{"class":126},[109,36333,36334],{"class":111,"line":419},[109,36335,158],{"emptyLinePlaceholder":157},[109,36337,36338],{"class":111,"line":435},[109,36339,36340],{"class":115},"    # 定义前向传播\n",[109,36342,36343,36345,36347],{"class":111,"line":440},[109,36344,31976],{"class":122},[109,36346,32268],{"class":211},[109,36348,32271],{"class":126},[109,36350,36351,36353,36355,36357,36360,36362],{"class":111,"line":467},[109,36352,32276],{"class":126},[109,36354,130],{"class":122},[109,36356,31998],{"class":133},[109,36358,36359],{"class":126},".ReLu(",[109,36361,31998],{"class":133},[109,36363,32288],{"class":126},[109,36365,36366,36368,36370,36372],{"class":111,"line":494},[109,36367,32276],{"class":126},[109,36369,130],{"class":122},[109,36371,31998],{"class":133},[109,36373,32299],{"class":126},[109,36375,36376,36378,36380,36382,36384,36386],{"class":111,"line":499},[109,36377,32276],{"class":126},[109,36379,130],{"class":122},[109,36381,31998],{"class":133},[109,36383,36359],{"class":126},[109,36385,31998],{"class":133},[109,36387,32314],{"class":126},[109,36389,36390,36392,36394,36396],{"class":111,"line":526},[109,36391,32276],{"class":126},[109,36393,130],{"class":122},[109,36395,31998],{"class":133},[109,36397,32325],{"class":126},[109,36399,36400,36402,36404,36406,36408,36410],{"class":111,"line":552},[109,36401,32276],{"class":126},[109,36403,130],{"class":122},[109,36405,31998],{"class":133},[109,36407,36359],{"class":126},[109,36409,31998],{"class":133},[109,36411,36412],{"class":126},".c5(x))\n",[109,36414,36415,36417,36419,36421,36423,36425],{"class":111,"line":557},[109,36416,32276],{"class":126},[109,36418,130],{"class":122},[109,36420,31998],{"class":133},[109,36422,36359],{"class":126},[109,36424,31998],{"class":133},[109,36426,36427],{"class":126},".c6(x))\n",[109,36429,36430,36432,36434,36436,36438,36440],{"class":111,"line":584},[109,36431,32276],{"class":126},[109,36433,130],{"class":122},[109,36435,31998],{"class":133},[109,36437,36359],{"class":126},[109,36439,31998],{"class":133},[109,36441,36442],{"class":126},".c7(x))\n",[109,36444,36445,36447,36449,36451],{"class":111,"line":611},[109,36446,32276],{"class":126},[109,36448,130],{"class":122},[109,36450,31998],{"class":133},[109,36452,36453],{"class":126},".s8(x)\n",[109,36455,36456],{"class":111,"line":616},[109,36457,158],{"emptyLinePlaceholder":157},[109,36459,36460],{"class":111,"line":633},[109,36461,36462],{"class":115},"        # 展平加线性全连接层\n",[109,36464,36465,36467,36469,36471],{"class":111,"line":649},[109,36466,32276],{"class":126},[109,36468,130],{"class":122},[109,36470,31998],{"class":133},[109,36472,32336],{"class":126},[109,36474,36475,36477,36479,36481,36483,36485],{"class":111,"line":676},[109,36476,32276],{"class":126},[109,36478,130],{"class":122},[109,36480,31998],{"class":133},[109,36482,36359],{"class":126},[109,36484,31998],{"class":133},[109,36486,36487],{"class":126},".f1(x))\n",[109,36489,36490],{"class":111,"line":703},[109,36491,36492],{"class":115},"        # 还需要dropout对神经元随机进行失活\n",[109,36494,36495,36497,36499,36502,36505],{"class":111,"line":708},[109,36496,32276],{"class":126},[109,36498,130],{"class":122},[109,36500,36501],{"class":126},"F.dropout(x,",[109,36503,36504],{"class":133},"0.5",[109,36506,1330],{"class":126},[109,36508,36509,36511,36513,36515,36517,36519],{"class":111,"line":723},[109,36510,32276],{"class":126},[109,36512,130],{"class":122},[109,36514,31998],{"class":133},[109,36516,36359],{"class":126},[109,36518,31998],{"class":133},[109,36520,36521],{"class":126},".f2(x))\n",[109,36523,36524,36526,36528,36530,36532],{"class":111,"line":728},[109,36525,32276],{"class":126},[109,36527,130],{"class":122},[109,36529,36501],{"class":126},[109,36531,36504],{"class":133},[109,36533,1330],{"class":126},[109,36535,36536],{"class":111,"line":739},[109,36537,36538],{"class":115},"        # 直接输出\n",[109,36540,36541,36543,36545,36547],{"class":111,"line":9352},[109,36542,32276],{"class":126},[109,36544,130],{"class":122},[109,36546,31998],{"class":133},[109,36548,36549],{"class":126},".f3(x)\n",[109,36551,36552],{"class":111,"line":9364},[109,36553,36554],{"class":115},"        # 前向传播输出\n",[109,36556,36557,36559],{"class":111,"line":9376},[109,36558,15925],{"class":122},[109,36560,32384],{"class":126},[109,36562,36563],{"class":111,"line":11034},[109,36564,36565],{"class":115},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[109,36567,36568,36570,36572,36574,36576],{"class":111,"line":11059},[109,36569,2922],{"class":122},[109,36571,32395],{"class":133},[109,36573,4296],{"class":122},[109,36575,32400],{"class":278},[109,36577,5082],{"class":126},[109,36579,36580,36582,36584,36586,36588,36590,36592,36594,36596],{"class":111,"line":11082},[109,36581,32412],{"class":126},[109,36583,130],{"class":122},[109,36585,31626],{"class":126},[109,36587,32419],{"class":278},[109,36589,3080],{"class":122},[109,36591,32424],{"class":126},[109,36593,3077],{"class":122},[109,36595,31651],{"class":278},[109,36597,1330],{"class":126},[109,36599,36600],{"class":111,"line":11106},[109,36601,36602],{"class":115},"    # 模型实例化，然后将实例化的模型放到设备中\n",[109,36604,36605,36607,36609],{"class":111,"line":11111},[109,36606,32464],{"class":126},[109,36608,130],{"class":122},[109,36610,36611],{"class":126},"AlexNet().to(device)\n",[109,36613,36614,36616,36618,36620,36622,36625,36627,36629],{"class":111,"line":11116},[109,36615,32474],{"class":133},[109,36617,32477],{"class":126},[109,36619,1755],{"class":133},[109,36621,1914],{"class":126},[109,36623,36624],{"class":133},"227",[109,36626,1914],{"class":126},[109,36628,36624],{"class":133},[109,36630,32490],{"class":126},[765,36632,36633],{"start":119},[30,36634,32503],{},[99,36636,36638],{"className":31553,"code":36637,"language":31555,"meta":104,"style":104},"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",[106,36639,36640,36646,36652,36662,36668,36678,36688,36698,36708,36718,36722,36733,36743,36747,36751,36755,36763,36775,36785,36801,36811,36843,36857,36867,36877,36881,36891,36905,36915,36925,36935,36941,36945,36949,36953,36957,36961,36969,36989,36993,36997,37001,37005,37009,37025,37029,37033,37041,37045,37049,37057,37061,37065,37069,37077,37081,37085,37089,37093,37101,37105,37113,37117,37125,37129,37137,37141,37149,37153,37157,37165,37169,37173,37177,37189,37213,37227,37231,37235,37239,37247,37251,37259,37263,37271,37275,37283,37287,37295,37299,37307,37311,37323,37327,37335,37339,37347,37351,37355,37359,37363,37371,37375,37391,37395,37403,37407,37411,37415,37419,37423,37427,37431,37447,37451,37463,37467,37479,37483,37495,37499,37507,37511,37519,37523,37527,37532,37538,37542,37551,37555,37572,37576,37585,37589,37607,37620,37625,37638,37642,37646,37654,37658,37662,37670,37674,37682,37686,37694,37698,37702,37744,37786,37790,37794,37810,37814,37830,37834,37838,37846,37850,37854,37866,37904,37909,37914,37923,37927,37941,37951,37957,37963,37969,37975,37979,37983,37989,37993,37997,38005,38009,38027,38031,38035,38039,38055,38059,38063,38067,38071,38075,38095,38115,38119,38123,38127,38135,38143,38147,38163,38183,38203,38207,38211,38219,38227,38231,38235,38239,38251,38255,38265,38273,38290],{"__ignoreMap":104},[109,36641,36642,36644],{"class":111,"line":112},[109,36643,31567],{"class":122},[109,36645,32997],{"class":126},[109,36647,36648,36650],{"class":111,"line":119},[109,36649,31567],{"class":122},[109,36651,33004],{"class":126},[109,36653,36654,36656,36658,36660],{"class":111,"line":140},[109,36655,31567],{"class":122},[109,36657,33015],{"class":126},[109,36659,32558],{"class":122},[109,36661,33020],{"class":126},[109,36663,36664,36666],{"class":111,"line":154},[109,36665,31567],{"class":122},[109,36667,31570],{"class":126},[109,36669,36670,36672,36674,36676],{"class":111,"line":161},[109,36671,31912],{"class":122},[109,36673,32590],{"class":126},[109,36675,31567],{"class":122},[109,36677,33037],{"class":126},[109,36679,36680,36682,36684,36686],{"class":111,"line":167},[109,36681,31912],{"class":122},[109,36683,32543],{"class":126},[109,36685,31567],{"class":122},[109,36687,32548],{"class":126},[109,36689,36690,36692,36694,36696],{"class":111,"line":185},[109,36691,31912],{"class":122},[109,36693,32573],{"class":126},[109,36695,31567],{"class":122},[109,36697,32578],{"class":126},[109,36699,36700,36702,36704,36706],{"class":111,"line":201},[109,36701,31567],{"class":122},[109,36703,32590],{"class":126},[109,36705,32558],{"class":122},[109,36707,32595],{"class":126},[109,36709,36710,36712,36714,36716],{"class":111,"line":206},[109,36711,31567],{"class":122},[109,36713,32607],{"class":126},[109,36715,32558],{"class":122},[109,36717,32612],{"class":126},[109,36719,36720],{"class":111,"line":218},[109,36721,33082],{"class":115},[109,36723,36724,36726,36728,36730],{"class":111,"line":223},[109,36725,31912],{"class":122},[109,36727,33089],{"class":126},[109,36729,31567],{"class":122},[109,36731,36732],{"class":126}," AlexNet\n",[109,36734,36735,36737,36739,36741],{"class":111,"line":229},[109,36736,31912],{"class":122},[109,36738,31915],{"class":126},[109,36740,31567],{"class":122},[109,36742,31920],{"class":126},[109,36744,36745],{"class":111,"line":244},[109,36746,158],{"emptyLinePlaceholder":157},[109,36748,36749],{"class":111,"line":258},[109,36750,158],{"emptyLinePlaceholder":157},[109,36752,36753],{"class":111,"line":263},[109,36754,33117],{"class":115},[109,36756,36757,36759,36761],{"class":111,"line":269},[109,36758,33122],{"class":122},[109,36760,33125],{"class":211},[109,36762,33128],{"class":126},[109,36764,36765,36767,36769,36771,36773],{"class":111,"line":304},[109,36766,33133],{"class":126},[109,36768,130],{"class":122},[109,36770,32630],{"class":126},[109,36772,32638],{"class":278},[109,36774,32641],{"class":126},[109,36776,36777,36779,36781,36783],{"class":111,"line":331},[109,36778,33146],{"class":6553},[109,36780,130],{"class":122},[109,36782,32651],{"class":133},[109,36784,32641],{"class":126},[109,36786,36787,36789,36791,36793,36795,36797,36799],{"class":111,"line":336},[109,36788,33157],{"class":6553},[109,36790,130],{"class":122},[109,36792,32668],{"class":126},[109,36794,32671],{"class":6553},[109,36796,130],{"class":122},[109,36798,36624],{"class":133},[109,36800,32679],{"class":126},[109,36802,36803,36805,36807,36809],{"class":111,"line":364},[109,36804,33174],{"class":6553},[109,36806,130],{"class":122},[109,36808,32651],{"class":133},[109,36810,1330],{"class":126},[109,36812,36813,36815,36817,36819,36821,36823,36825,36827,36829,36831,36833,36835,36837,36839,36841],{"class":111,"line":391},[109,36814,33185],{"class":126},[109,36816,130],{"class":122},[109,36818,33190],{"class":126},[109,36820,33193],{"class":133},[109,36822,714],{"class":126},[109,36824,33198],{"class":133},[109,36826,1988],{"class":122},[109,36828,8684],{"class":133},[109,36830,33205],{"class":126},[109,36832,33193],{"class":133},[109,36834,714],{"class":126},[109,36836,33212],{"class":133},[109,36838,1988],{"class":122},[109,36840,8684],{"class":133},[109,36842,33219],{"class":126},[109,36844,36845,36847,36849,36851,36853,36855],{"class":111,"line":396},[109,36846,33224],{"class":126},[109,36848,130],{"class":122},[109,36850,33229],{"class":126},[109,36852,32712],{"class":6553},[109,36854,130],{"class":122},[109,36856,32717],{"class":126},[109,36858,36859,36861,36863,36865],{"class":111,"line":402},[109,36860,33240],{"class":6553},[109,36862,130],{"class":122},[109,36864,33245],{"class":133},[109,36866,32641],{"class":126},[109,36868,36869,36871,36873,36875],{"class":111,"line":419},[109,36870,33252],{"class":6553},[109,36872,130],{"class":122},[109,36874,32651],{"class":133},[109,36876,32641],{"class":126},[109,36878,36879],{"class":111,"line":435},[109,36880,33263],{"class":115},[109,36882,36883,36885,36887,36889],{"class":111,"line":440},[109,36884,33268],{"class":6553},[109,36886,130],{"class":122},[109,36888,1931],{"class":133},[109,36890,1330],{"class":126},[109,36892,36893,36895,36897,36899,36901,36903],{"class":111,"line":467},[109,36894,33279],{"class":126},[109,36896,130],{"class":122},[109,36898,32709],{"class":126},[109,36900,32712],{"class":6553},[109,36902,130],{"class":122},[109,36904,33290],{"class":126},[109,36906,36907,36909,36911,36913],{"class":111,"line":494},[109,36908,33295],{"class":6553},[109,36910,130],{"class":122},[109,36912,33245],{"class":133},[109,36914,32641],{"class":126},[109,36916,36917,36919,36921,36923],{"class":111,"line":499},[109,36918,33306],{"class":6553},[109,36920,130],{"class":122},[109,36922,32651],{"class":133},[109,36924,32641],{"class":126},[109,36926,36927,36929,36931,36933],{"class":111,"line":526},[109,36928,33317],{"class":6553},[109,36930,130],{"class":122},[109,36932,1931],{"class":133},[109,36934,1330],{"class":126},[109,36936,36937,36939],{"class":111,"line":552},[109,36938,731],{"class":122},[109,36940,33330],{"class":126},[109,36942,36943],{"class":111,"line":557},[109,36944,158],{"emptyLinePlaceholder":157},[109,36946,36947],{"class":111,"line":584},[109,36948,33339],{"class":115},[109,36950,36951],{"class":111,"line":611},[109,36952,33344],{"class":115},[109,36954,36955],{"class":111,"line":616},[109,36956,158],{"emptyLinePlaceholder":157},[109,36958,36959],{"class":111,"line":633},[109,36960,33353],{"class":115},[109,36962,36963,36965,36967],{"class":111,"line":649},[109,36964,33122],{"class":122},[109,36966,33360],{"class":211},[109,36968,33363],{"class":126},[109,36970,36971,36973,36975,36977,36979,36981,36983,36985,36987],{"class":111,"line":676},[109,36972,32412],{"class":126},[109,36974,130],{"class":122},[109,36976,31626],{"class":126},[109,36978,32419],{"class":278},[109,36980,3080],{"class":122},[109,36982,32424],{"class":126},[109,36984,3077],{"class":122},[109,36986,33382],{"class":278},[109,36988,1330],{"class":126},[109,36990,36991],{"class":111,"line":703},[109,36992,158],{"emptyLinePlaceholder":157},[109,36994,36995],{"class":111,"line":708},[109,36996,158],{"emptyLinePlaceholder":157},[109,36998,36999],{"class":111,"line":723},[109,37000,33397],{"class":115},[109,37002,37003],{"class":111,"line":728},[109,37004,33402],{"class":115},[109,37006,37007],{"class":111,"line":739},[109,37008,33407],{"class":115},[109,37010,37011,37013,37015,37017,37019,37021,37023],{"class":111,"line":9352},[109,37012,33412],{"class":126},[109,37014,130],{"class":122},[109,37016,33417],{"class":126},[109,37018,33420],{"class":6553},[109,37020,130],{"class":122},[109,37022,33425],{"class":133},[109,37024,1330],{"class":126},[109,37026,37027],{"class":111,"line":9364},[109,37028,158],{"emptyLinePlaceholder":157},[109,37030,37031],{"class":111,"line":9376},[109,37032,33436],{"class":115},[109,37034,37035,37037,37039],{"class":111,"line":11034},[109,37036,33441],{"class":126},[109,37038,130],{"class":122},[109,37040,33446],{"class":126},[109,37042,37043],{"class":111,"line":11059},[109,37044,158],{"emptyLinePlaceholder":157},[109,37046,37047],{"class":111,"line":11082},[109,37048,33455],{"class":115},[109,37050,37051,37053,37055],{"class":111,"line":11106},[109,37052,32464],{"class":126},[109,37054,130],{"class":122},[109,37056,33464],{"class":126},[109,37058,37059],{"class":111,"line":11111},[109,37060,33469],{"class":115},[109,37062,37063],{"class":111,"line":11116},[109,37064,33474],{"class":115},[109,37066,37067],{"class":111,"line":11121},[109,37068,33479],{"class":115},[109,37070,37071,37073,37075],{"class":111,"line":11130},[109,37072,33484],{"class":126},[109,37074,130],{"class":122},[109,37076,33489],{"class":126},[109,37078,37079],{"class":111,"line":11135},[109,37080,158],{"emptyLinePlaceholder":157},[109,37082,37083],{"class":111,"line":11141},[109,37084,158],{"emptyLinePlaceholder":157},[109,37086,37087],{"class":111,"line":11162},[109,37088,33502],{"class":115},[109,37090,37091],{"class":111,"line":11168},[109,37092,33507],{"class":115},[109,37094,37095,37097,37099],{"class":111,"line":11182},[109,37096,33512],{"class":126},[109,37098,130],{"class":122},[109,37100,33517],{"class":133},[109,37102,37103],{"class":111,"line":11188},[109,37104,33522],{"class":115},[109,37106,37107,37109,37111],{"class":111,"line":11215},[109,37108,33527],{"class":126},[109,37110,130],{"class":122},[109,37112,33532],{"class":126},[109,37114,37115],{"class":111,"line":11224},[109,37116,33537],{"class":115},[109,37118,37119,37121,37123],{"class":111,"line":11230},[109,37120,33542],{"class":126},[109,37122,130],{"class":122},[109,37124,33532],{"class":126},[109,37126,37127],{"class":111,"line":11238},[109,37128,33551],{"class":115},[109,37130,37131,37133,37135],{"class":111,"line":11243},[109,37132,33556],{"class":126},[109,37134,130],{"class":122},[109,37136,33532],{"class":126},[109,37138,37139],{"class":111,"line":17777},[109,37140,33565],{"class":115},[109,37142,37143,37145,37147],{"class":111,"line":17783},[109,37144,33570],{"class":126},[109,37146,130],{"class":122},[109,37148,33532],{"class":126},[109,37150,37151],{"class":111,"line":17806},[109,37152,158],{"emptyLinePlaceholder":157},[109,37154,37155],{"class":111,"line":17812},[109,37156,33583],{"class":115},[109,37158,37159,37161,37163],{"class":111,"line":17835},[109,37160,33588],{"class":126},[109,37162,130],{"class":122},[109,37164,33593],{"class":126},[109,37166,37167],{"class":111,"line":17849},[109,37168,158],{"emptyLinePlaceholder":157},[109,37170,37171],{"class":111,"line":17869},[109,37172,158],{"emptyLinePlaceholder":157},[109,37174,37175],{"class":111,"line":17875},[109,37176,33606],{"class":115},[109,37178,37179,37181,37183,37185,37187],{"class":111,"line":17886},[109,37180,1302],{"class":122},[109,37182,33613],{"class":126},[109,37184,27218],{"class":122},[109,37186,33618],{"class":133},[109,37188,33621],{"class":126},[109,37190,37191,37193,37195,37197,37199,37201,37203,37205,37207,37209,37211],{"class":111,"line":17909},[109,37192,33626],{"class":133},[109,37194,714],{"class":126},[109,37196,33631],{"class":278},[109,37198,33634],{"class":133},[109,37200,2116],{"class":278},[109,37202,33634],{"class":133},[109,37204,1789],{"class":278},[109,37206,33643],{"class":126},[109,37208,2064],{"class":122},[109,37210,1755],{"class":133},[109,37212,31672],{"class":126},[109,37214,37215,37217,37219,37221,37223,37225],{"class":111,"line":17931},[109,37216,33626],{"class":133},[109,37218,714],{"class":126},[109,37220,33658],{"class":278},[109,37222,1988],{"class":122},[109,37224,1008],{"class":133},[109,37226,1330],{"class":126},[109,37228,37229],{"class":111,"line":17936},[109,37230,158],{"emptyLinePlaceholder":157},[109,37232,37233],{"class":111,"line":17942},[109,37234,33673],{"class":115},[109,37236,37237],{"class":111,"line":17956},[109,37238,33678],{"class":115},[109,37240,37241,37243,37245],{"class":111,"line":17969},[109,37242,33683],{"class":126},[109,37244,130],{"class":122},[109,37246,33517],{"class":133},[109,37248,37249],{"class":111,"line":17974},[109,37250,33692],{"class":115},[109,37252,37253,37255,37257],{"class":111,"line":17988},[109,37254,33697],{"class":126},[109,37256,130],{"class":122},[109,37258,4430],{"class":133},[109,37260,37261],{"class":111,"line":17993},[109,37262,33706],{"class":115},[109,37264,37265,37267,37269],{"class":111,"line":17999},[109,37266,33711],{"class":126},[109,37268,130],{"class":122},[109,37270,33517],{"class":133},[109,37272,37273],{"class":111,"line":18004},[109,37274,33720],{"class":115},[109,37276,37277,37279,37281],{"class":111,"line":18018},[109,37278,33725],{"class":126},[109,37280,130],{"class":122},[109,37282,4430],{"class":133},[109,37284,37285],{"class":111,"line":18023},[109,37286,33734],{"class":115},[109,37288,37289,37291,37293],{"class":111,"line":18028},[109,37290,33739],{"class":126},[109,37292,130],{"class":122},[109,37294,4430],{"class":133},[109,37296,37297],{"class":111,"line":18042},[109,37298,33748],{"class":115},[109,37300,37301,37303,37305],{"class":111,"line":18054},[109,37302,33753],{"class":126},[109,37304,130],{"class":122},[109,37306,4430],{"class":133},[109,37308,37309],{"class":111,"line":18059},[109,37310,33762],{"class":115},[109,37312,37313,37315,37317,37319,37321],{"class":111,"line":18072},[109,37314,4747],{"class":122},[109,37316,32776],{"class":126},[109,37318,27218],{"class":122},[109,37320,32781],{"class":133},[109,37322,33775],{"class":126},[109,37324,37325],{"class":111,"line":18077},[109,37326,33780],{"class":115},[109,37328,37329,37331,37333],{"class":111,"line":18082},[109,37330,33785],{"class":126},[109,37332,130],{"class":122},[109,37334,33790],{"class":126},[109,37336,37337],{"class":111,"line":18087},[109,37338,33795],{"class":115},[109,37340,37341,37343,37345],{"class":111,"line":18100},[109,37342,33800],{"class":126},[109,37344,130],{"class":122},[109,37346,33805],{"class":126},[109,37348,37349],{"class":111,"line":18105},[109,37350,33811],{"class":115},[109,37352,37353],{"class":111,"line":33808},[109,37354,33817],{"class":126},[109,37356,37357],{"class":111,"line":33814},[109,37358,33823],{"class":115},[109,37360,37361],{"class":111,"line":33820},[109,37362,33829],{"class":115},[109,37364,37365,37367,37369],{"class":111,"line":33826},[109,37366,33835],{"class":126},[109,37368,130],{"class":122},[109,37370,33840],{"class":126},[109,37372,37373],{"class":111,"line":33832},[109,37374,33846],{"class":115},[109,37376,37377,37379,37381,37383,37385,37387,37389],{"class":111,"line":33843},[109,37378,33852],{"class":126},[109,37380,130],{"class":122},[109,37382,33857],{"class":126},[109,37384,33860],{"class":6553},[109,37386,130],{"class":122},[109,37388,1755],{"class":133},[109,37390,1330],{"class":126},[109,37392,37393],{"class":111,"line":33849},[109,37394,33872],{"class":115},[109,37396,37397,37399,37401],{"class":111,"line":33869},[109,37398,33878],{"class":126},[109,37400,130],{"class":122},[109,37402,33883],{"class":126},[109,37404,37405],{"class":111,"line":33875},[109,37406,33889],{"class":115},[109,37408,37409],{"class":111,"line":33886},[109,37410,33895],{"class":126},[109,37412,37413],{"class":111,"line":33892},[109,37414,33901],{"class":115},[109,37416,37417],{"class":111,"line":33898},[109,37418,33907],{"class":126},[109,37420,37421],{"class":111,"line":33904},[109,37422,33913],{"class":115},[109,37424,37425],{"class":111,"line":33910},[109,37426,33919],{"class":126},[109,37428,37429],{"class":111,"line":33916},[109,37430,33925],{"class":115},[109,37432,37433,37435,37437,37439,37441,37443,37445],{"class":111,"line":33922},[109,37434,33931],{"class":126},[109,37436,10795],{"class":122},[109,37438,33936],{"class":126},[109,37440,1988],{"class":122},[109,37442,33941],{"class":126},[109,37444,1314],{"class":133},[109,37446,1330],{"class":126},[109,37448,37449],{"class":111,"line":33928},[109,37450,33951],{"class":115},[109,37452,37453,37455,37457,37459,37461],{"class":111,"line":33948},[109,37454,33957],{"class":126},[109,37456,10795],{"class":122},[109,37458,33962],{"class":126},[109,37460,4296],{"class":122},[109,37462,33967],{"class":126},[109,37464,37465],{"class":111,"line":33954},[109,37466,33973],{"class":115},[109,37468,37469,37471,37473,37475,37477],{"class":111,"line":33970},[109,37470,33979],{"class":126},[109,37472,10795],{"class":122},[109,37474,33941],{"class":126},[109,37476,1314],{"class":133},[109,37478,1330],{"class":126},[109,37480,37481],{"class":111,"line":33976},[109,37482,33993],{"class":115},[109,37484,37485,37487,37489,37491,37493],{"class":111,"line":33990},[109,37486,4747],{"class":122},[109,37488,34001],{"class":126},[109,37490,27218],{"class":122},[109,37492,32781],{"class":133},[109,37494,34008],{"class":126},[109,37496,37497],{"class":111,"line":33996},[109,37498,34014],{"class":115},[109,37500,37501,37503,37505],{"class":111,"line":34011},[109,37502,33785],{"class":126},[109,37504,130],{"class":122},[109,37506,33790],{"class":126},[109,37508,37509],{"class":111,"line":34017},[109,37510,34029],{"class":115},[109,37512,37513,37515,37517],{"class":111,"line":34026},[109,37514,33800],{"class":126},[109,37516,130],{"class":122},[109,37518,33805],{"class":126},[109,37520,37521],{"class":111,"line":34032},[109,37522,34044],{"class":115},[109,37524,37525],{"class":111,"line":34041},[109,37526,34050],{"class":126},[109,37528,37529],{"class":111,"line":34047},[109,37530,37531],{"class":115},"            # 验证时不计算梯度以节省内存\u002F计算\n",[109,37533,37534,37536],{"class":111,"line":34053},[109,37535,34056],{"class":122},[109,37537,34059],{"class":126},[109,37539,37540],{"class":111,"line":34062},[109,37541,34065],{"class":115},[109,37543,37544,37547,37549],{"class":111,"line":34068},[109,37545,37546],{"class":126},"                output",[109,37548,130],{"class":122},[109,37550,33840],{"class":126},[109,37552,37553],{"class":111,"line":34079},[109,37554,34082],{"class":115},[109,37556,37557,37560,37562,37564,37566,37568,37570],{"class":111,"line":34085},[109,37558,37559],{"class":126},"                pre_lab",[109,37561,130],{"class":122},[109,37563,33857],{"class":126},[109,37565,33860],{"class":6553},[109,37567,130],{"class":122},[109,37569,1755],{"class":133},[109,37571,1330],{"class":126},[109,37573,37574],{"class":111,"line":34104},[109,37575,34107],{"class":115},[109,37577,37578,37581,37583],{"class":111,"line":34110},[109,37579,37580],{"class":126},"                val_batch_loss",[109,37582,130],{"class":122},[109,37584,33883],{"class":126},[109,37586,37587],{"class":111,"line":34121},[109,37588,34124],{"class":115},[109,37590,37591,37594,37596,37599,37601,37603,37605],{"class":111,"line":34127},[109,37592,37593],{"class":126},"                val_loss",[109,37595,10795],{"class":122},[109,37597,37598],{"class":126},"val_batch_loss.item()",[109,37600,1988],{"class":122},[109,37602,33941],{"class":126},[109,37604,1314],{"class":133},[109,37606,1330],{"class":126},[109,37608,37609,37612,37614,37616,37618],{"class":111,"line":34147},[109,37610,37611],{"class":126},"                val_corrects",[109,37613,10795],{"class":122},[109,37615,33962],{"class":126},[109,37617,4296],{"class":122},[109,37619,33967],{"class":126},[109,37621,37622],{"class":111,"line":34163},[109,37623,37624],{"class":115},"            # 当前用于验证的样本数量\n",[109,37626,37627,37630,37632,37634,37636],{"class":111,"line":34169},[109,37628,37629],{"class":126},"            val_num",[109,37631,10795],{"class":122},[109,37633,33941],{"class":126},[109,37635,1314],{"class":133},[109,37637,1330],{"class":126},[109,37639,37640],{"class":111,"line":34183},[109,37641,34186],{"class":115},[109,37643,37644],{"class":111,"line":34189},[109,37645,34192],{"class":115},[109,37647,37648,37650,37652],{"class":111,"line":34195},[109,37649,34198],{"class":126},[109,37651,2116],{"class":122},[109,37653,34203],{"class":126},[109,37655,37656],{"class":111,"line":34206},[109,37657,34209],{"class":115},[109,37659,37660],{"class":111,"line":34212},[109,37661,34215],{"class":115},[109,37663,37664,37666,37668],{"class":111,"line":34218},[109,37665,34221],{"class":126},[109,37667,2116],{"class":122},[109,37669,34203],{"class":126},[109,37671,37672],{"class":111,"line":34228},[109,37673,34231],{"class":115},[109,37675,37676,37678,37680],{"class":111,"line":34234},[109,37677,34237],{"class":126},[109,37679,2116],{"class":122},[109,37681,34242],{"class":126},[109,37683,37684],{"class":111,"line":34245},[109,37685,34248],{"class":115},[109,37687,37688,37690,37692],{"class":111,"line":34251},[109,37689,34254],{"class":126},[109,37691,2116],{"class":122},[109,37693,34242],{"class":126},[109,37695,37696],{"class":111,"line":34261},[109,37697,158],{"emptyLinePlaceholder":157},[109,37699,37700],{"class":111,"line":34266},[109,37701,34269],{"class":115},[109,37703,37704,37706,37708,37710,37712,37714,37716,37718,37720,37722,37724,37726,37728,37730,37732,37734,37736,37738,37740,37742],{"class":111,"line":34272},[109,37705,33626],{"class":133},[109,37707,714],{"class":126},[109,37709,4935],{"class":278},[109,37711,33634],{"class":133},[109,37713,34283],{"class":278},[109,37715,2427],{"class":133},[109,37717,34288],{"class":122},[109,37719,2476],{"class":133},[109,37721,34293],{"class":278},[109,37723,2427],{"class":133},[109,37725,34288],{"class":122},[109,37727,2476],{"class":133},[109,37729,4935],{"class":278},[109,37731,34304],{"class":126},[109,37733,2064],{"class":122},[109,37735,1755],{"class":133},[109,37737,34311],{"class":126},[109,37739,2064],{"class":122},[109,37741,1755],{"class":133},[109,37743,34318],{"class":126},[109,37745,37746,37748,37750,37752,37754,37756,37758,37760,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780,37782,37784],{"class":111,"line":34321},[109,37747,33626],{"class":133},[109,37749,714],{"class":126},[109,37751,4935],{"class":278},[109,37753,33634],{"class":133},[109,37755,34332],{"class":278},[109,37757,2427],{"class":133},[109,37759,34288],{"class":122},[109,37761,2476],{"class":133},[109,37763,34341],{"class":278},[109,37765,2427],{"class":133},[109,37767,34288],{"class":122},[109,37769,2476],{"class":133},[109,37771,4935],{"class":278},[109,37773,34352],{"class":126},[109,37775,2064],{"class":122},[109,37777,1755],{"class":133},[109,37779,34359],{"class":126},[109,37781,2064],{"class":122},[109,37783,1755],{"class":133},[109,37785,34318],{"class":126},[109,37787,37788],{"class":111,"line":34368},[109,37789,158],{"emptyLinePlaceholder":157},[109,37791,37792],{"class":111,"line":34373},[109,37793,34376],{"class":115},[109,37795,37796,37798,37800,37802,37804,37806,37808],{"class":111,"line":34379},[109,37797,3852],{"class":122},[109,37799,34384],{"class":126},[109,37801,2064],{"class":122},[109,37803,1755],{"class":133},[109,37805,2470],{"class":126},[109,37807,2490],{"class":122},[109,37809,34395],{"class":126},[109,37811,37812],{"class":111,"line":34398},[109,37813,34401],{"class":115},[109,37815,37816,37818,37820,37822,37824,37826,37828],{"class":111,"line":34404},[109,37817,34407],{"class":126},[109,37819,1584],{"class":133},[109,37821,130],{"class":122},[109,37823,34414],{"class":126},[109,37825,2064],{"class":122},[109,37827,1755],{"class":133},[109,37829,34421],{"class":126},[109,37831,37832],{"class":111,"line":34424},[109,37833,34427],{"class":115},[109,37835,37836],{"class":111,"line":34430},[109,37837,34433],{"class":115},[109,37839,37840,37842,37844],{"class":111,"line":34436},[109,37841,34439],{"class":126},[109,37843,130],{"class":122},[109,37845,33489],{"class":126},[109,37847,37848],{"class":111,"line":34446},[109,37849,158],{"emptyLinePlaceholder":157},[109,37851,37852],{"class":111,"line":34451},[109,37853,34454],{"class":115},[109,37855,37856,37858,37860,37862,37864],{"class":111,"line":34457},[109,37857,34460],{"class":126},[109,37859,130],{"class":122},[109,37861,34465],{"class":126},[109,37863,2064],{"class":122},[109,37865,34470],{"class":126},[109,37867,37868,37870,37872,37874,37876,37878,37880,37882,37884,37886,37888,37890,37892,37894,37896,37898,37900,37902],{"class":111,"line":34473},[109,37869,33626],{"class":133},[109,37871,714],{"class":126},[109,37873,34480],{"class":278},[109,37875,2427],{"class":133},[109,37877,34485],{"class":122},[109,37879,2476],{"class":133},[109,37881,2076],{"class":278},[109,37883,2427],{"class":133},[109,37885,34485],{"class":122},[109,37887,2476],{"class":133},[109,37889,34498],{"class":278},[109,37891,34501],{"class":126},[109,37893,34504],{"class":122},[109,37895,2438],{"class":133},[109,37897,34509],{"class":126},[109,37899,1865],{"class":122},[109,37901,2438],{"class":133},[109,37903,31672],{"class":126},[109,37905,37906],{"class":111,"line":34518},[109,37907,37908],{"class":115},"    # 选择最优参数并保存\n",[109,37910,37911],{"class":111,"line":34524},[109,37912,37913],{"class":115},"    # 保存最佳模型权重字典\n",[109,37915,37916,37919,37921],{"class":111,"line":34530},[109,37917,37918],{"class":126},"    torch.save(best_model_wts,",[109,37920,34542],{"class":278},[109,37922,1330],{"class":126},[109,37924,37925],{"class":111,"line":34536},[109,37926,34562],{"class":115},[109,37928,37929,37931,37933,37935,37937,37939],{"class":111,"line":34547},[109,37930,34568],{"class":126},[109,37932,130],{"class":122},[109,37934,34573],{"class":126},[109,37936,34576],{"class":6553},[109,37938,130],{"class":122},[109,37940,808],{"class":126},[109,37942,37943,37945,37947,37949],{"class":111,"line":34553},[109,37944,34586],{"class":278},[109,37946,2391],{"class":126},[109,37948,34591],{"class":133},[109,37950,34594],{"class":126},[109,37952,37953,37955],{"class":111,"line":34559},[109,37954,34600],{"class":278},[109,37956,34603],{"class":126},[109,37958,37959,37961],{"class":111,"line":34565},[109,37960,34609],{"class":278},[109,37962,34612],{"class":126},[109,37964,37965,37967],{"class":111,"line":34583},[109,37966,34618],{"class":278},[109,37968,34621],{"class":126},[109,37970,37971,37973],{"class":111,"line":34597},[109,37972,34627],{"class":278},[109,37974,34630],{"class":126},[109,37976,37977],{"class":111,"line":34606},[109,37978,34636],{"class":126},[109,37980,37981],{"class":111,"line":34615},[109,37982,34642],{"class":115},[109,37984,37985,37987],{"class":111,"line":34624},[109,37986,731],{"class":122},[109,37988,34650],{"class":126},[109,37990,37991],{"class":111,"line":34633},[109,37992,158],{"emptyLinePlaceholder":157},[109,37994,37995],{"class":111,"line":34639},[109,37996,34661],{"class":115},[109,37998,37999,38001,38003],{"class":111,"line":34645},[109,38000,33122],{"class":122},[109,38002,34669],{"class":211},[109,38004,34672],{"class":126},[109,38006,38007],{"class":111,"line":34653},[109,38008,34678],{"class":115},[109,38010,38011,38013,38015,38017,38019,38021,38023,38025],{"class":111,"line":34658},[109,38012,34684],{"class":126},[109,38014,32868],{"class":6553},[109,38016,130],{"class":122},[109,38018,714],{"class":126},[109,38020,2030],{"class":133},[109,38022,1914],{"class":126},[109,38024,1831],{"class":133},[109,38026,31672],{"class":126},[109,38028,38029],{"class":111,"line":34664},[109,38030,34704],{"class":115},[109,38032,38033],{"class":111,"line":34675},[109,38034,34710],{"class":115},[109,38036,38037],{"class":111,"line":34681},[109,38038,34716],{"class":115},[109,38040,38041,38043,38045,38047,38049,38051,38053],{"class":111,"line":34701},[109,38042,32902],{"class":126},[109,38044,1755],{"class":133},[109,38046,1914],{"class":126},[109,38048,1618],{"class":133},[109,38050,1914],{"class":126},[109,38052,1755],{"class":133},[109,38054,1330],{"class":126},[109,38056,38057],{"class":111,"line":34707},[109,38058,34739],{"class":115},[109,38060,38061],{"class":111,"line":34713},[109,38062,34745],{"class":115},[109,38064,38065],{"class":111,"line":34719},[109,38066,34751],{"class":115},[109,38068,38069],{"class":111,"line":34736},[109,38070,34757],{"class":115},[109,38072,38073],{"class":111,"line":34742},[109,38074,34763],{"class":115},[109,38076,38077,38079,38081,38083,38085,38087,38089,38091,38093],{"class":111,"line":34748},[109,38078,34769],{"class":126},[109,38080,34772],{"class":278},[109,38082,34775],{"class":126},[109,38084,34778],{"class":278},[109,38086,1914],{"class":126},[109,38088,34783],{"class":6553},[109,38090,130],{"class":122},[109,38092,34788],{"class":278},[109,38094,1330],{"class":126},[109,38096,38097,38099,38101,38103,38105,38107,38109,38111,38113],{"class":111,"line":34754},[109,38098,34769],{"class":126},[109,38100,34772],{"class":278},[109,38102,34800],{"class":126},[109,38104,34803],{"class":278},[109,38106,1914],{"class":126},[109,38108,34783],{"class":6553},[109,38110,130],{"class":122},[109,38112,34812],{"class":278},[109,38114,1330],{"class":126},[109,38116,38117],{"class":111,"line":34760},[109,38118,34820],{"class":115},[109,38120,38121],{"class":111,"line":34766},[109,38122,34826],{"class":126},[109,38124,38125],{"class":111,"line":34793},[109,38126,34832],{"class":115},[109,38128,38129,38131,38133],{"class":111,"line":34817},[109,38130,34838],{"class":126},[109,38132,34841],{"class":278},[109,38134,1330],{"class":126},[109,38136,38137,38139,38141],{"class":111,"line":34823},[109,38138,34849],{"class":126},[109,38140,34852],{"class":278},[109,38142,1330],{"class":126},[109,38144,38145],{"class":111,"line":34829},[109,38146,34860],{"class":115},[109,38148,38149,38151,38153,38155,38157,38159,38161],{"class":111,"line":34835},[109,38150,32902],{"class":126},[109,38152,1755],{"class":133},[109,38154,1914],{"class":126},[109,38156,1618],{"class":133},[109,38158,1914],{"class":126},[109,38160,1618],{"class":133},[109,38162,1330],{"class":126},[109,38164,38165,38167,38169,38171,38173,38175,38177,38179,38181],{"class":111,"line":34846},[109,38166,34769],{"class":126},[109,38168,34772],{"class":278},[109,38170,34887],{"class":126},[109,38172,34778],{"class":278},[109,38174,1914],{"class":126},[109,38176,34783],{"class":6553},[109,38178,130],{"class":122},[109,38180,34898],{"class":278},[109,38182,1330],{"class":126},[109,38184,38185,38187,38189,38191,38193,38195,38197,38199,38201],{"class":111,"line":34857},[109,38186,34769],{"class":126},[109,38188,34772],{"class":278},[109,38190,34910],{"class":126},[109,38192,34803],{"class":278},[109,38194,1914],{"class":126},[109,38196,34783],{"class":6553},[109,38198,130],{"class":122},[109,38200,34921],{"class":278},[109,38202,1330],{"class":126},[109,38204,38205],{"class":111,"line":34863},[109,38206,34929],{"class":115},[109,38208,38209],{"class":111,"line":34880},[109,38210,34826],{"class":126},[109,38212,38213,38215,38217],{"class":111,"line":34903},[109,38214,34838],{"class":126},[109,38216,34772],{"class":278},[109,38218,1330],{"class":126},[109,38220,38221,38223,38225],{"class":111,"line":34926},[109,38222,34849],{"class":126},[109,38224,34951],{"class":278},[109,38226,1330],{"class":126},[109,38228,38229],{"class":111,"line":34932},[109,38230,34959],{"class":126},[109,38232,38233],{"class":111,"line":34937},[109,38234,158],{"emptyLinePlaceholder":157},[109,38236,38237],{"class":111,"line":34946},[109,38238,34970],{"class":115},[109,38240,38241,38243,38245,38247,38249],{"class":111,"line":34956},[109,38242,2922],{"class":122},[109,38244,32395],{"class":133},[109,38246,4296],{"class":122},[109,38248,32400],{"class":278},[109,38250,5082],{"class":126},[109,38252,38253],{"class":111,"line":34962},[109,38254,34989],{"class":115},[109,38256,38257,38260,38262],{"class":111,"line":34967},[109,38258,38259],{"class":126},"    AlexNet",[109,38261,130],{"class":122},[109,38263,38264],{"class":126},"AlexNet()\n",[109,38266,38267,38269,38271],{"class":111,"line":34973},[109,38268,35006],{"class":126},[109,38270,130],{"class":122},[109,38272,35011],{"class":126},[109,38274,38275,38277,38279,38282,38284,38286,38288],{"class":111,"line":34986},[109,38276,34568],{"class":126},[109,38278,130],{"class":122},[109,38280,38281],{"class":126},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[109,38283,35024],{"class":6553},[109,38285,130],{"class":122},[109,38287,2232],{"class":133},[109,38289,1330],{"class":126},[109,38291,38292],{"class":111,"line":34992},[109,38293,35036],{"class":126},[765,38295,38296],{"start":140},[30,38297,35049],{},[99,38299,38301],{"className":31553,"code":38300,"language":31555,"meta":104,"style":104},"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",[106,38302,38303,38309,38319,38329,38339,38343,38353,38363,38374,38378,38382,38386,38394,38410,38420,38436,38446,38460,38464,38474,38484,38494,38500,38504,38508,38516,38520,38536,38544,38548,38552,38560,38568,38572,38576,38580,38584,38590,38594,38604,38612,38620,38624,38628,38632,38640,38644,38660,38664,38668,38672,38684,38688,38700,38704,38708,38720,38724,38734,38738,38742,38754,38758,38766,38770,38774,38782,38786,38794,38798,38802,38806,38810,38814,38830,38838,38842,38846,38894,38900,38904,38914,38922,38930,38934,38938,38942,38946,38954,38958,38974,38978,38986,38994],{"__ignoreMap":104},[109,38304,38305,38307],{"class":111,"line":112},[109,38306,31567],{"class":122},[109,38308,31570],{"class":126},[109,38310,38311,38313,38315,38317],{"class":111,"line":119},[109,38312,31567],{"class":122},[109,38314,32590],{"class":126},[109,38316,32558],{"class":122},[109,38318,32595],{"class":126},[109,38320,38321,38323,38325,38327],{"class":111,"line":140},[109,38322,31912],{"class":122},[109,38324,35077],{"class":126},[109,38326,31567],{"class":122},[109,38328,35082],{"class":126},[109,38330,38331,38333,38335,38337],{"class":111,"line":154},[109,38332,31912],{"class":122},[109,38334,32573],{"class":126},[109,38336,31567],{"class":122},[109,38338,32578],{"class":126},[109,38340,38341],{"class":111,"line":161},[109,38342,35097],{"class":115},[109,38344,38345,38347,38349,38351],{"class":111,"line":167},[109,38346,31912],{"class":122},[109,38348,32543],{"class":126},[109,38350,31567],{"class":122},[109,38352,32548],{"class":126},[109,38354,38355,38357,38359,38361],{"class":111,"line":185},[109,38356,31912],{"class":122},[109,38358,33089],{"class":126},[109,38360,31567],{"class":122},[109,38362,36732],{"class":126},[109,38364,38365,38367,38370,38372],{"class":111,"line":201},[109,38366,31912],{"class":122},[109,38368,38369],{"class":126}," 练习.AlexNet.model ",[109,38371,31567],{"class":122},[109,38373,36732],{"class":126},[109,38375,38376],{"class":111,"line":206},[109,38377,158],{"emptyLinePlaceholder":157},[109,38379,38380],{"class":111,"line":218},[109,38381,158],{"emptyLinePlaceholder":157},[109,38383,38384],{"class":111,"line":223},[109,38385,35126],{"class":115},[109,38387,38388,38390,38392],{"class":111,"line":229},[109,38389,33122],{"class":122},[109,38391,35133],{"class":211},[109,38393,33128],{"class":126},[109,38395,38396,38398,38400,38402,38404,38406,38408],{"class":111,"line":244},[109,38397,35140],{"class":126},[109,38399,130],{"class":122},[109,38401,32630],{"class":126},[109,38403,32633],{"class":6553},[109,38405,130],{"class":122},[109,38407,32638],{"class":278},[109,38409,32641],{"class":126},[109,38411,38412,38414,38416,38418],{"class":111,"line":258},[109,38413,35157],{"class":6553},[109,38415,130],{"class":122},[109,38417,35162],{"class":133},[109,38419,32641],{"class":126},[109,38421,38422,38424,38426,38428,38430,38432,38434],{"class":111,"line":263},[109,38423,35169],{"class":6553},[109,38425,130],{"class":122},[109,38427,32668],{"class":126},[109,38429,32671],{"class":6553},[109,38431,130],{"class":122},[109,38433,36624],{"class":133},[109,38435,32679],{"class":126},[109,38437,38438,38440,38442,38444],{"class":111,"line":269},[109,38439,35186],{"class":6553},[109,38441,130],{"class":122},[109,38443,32651],{"class":133},[109,38445,1330],{"class":126},[109,38447,38448,38450,38452,38454,38456,38458],{"class":111,"line":304},[109,38449,35197],{"class":126},[109,38451,130],{"class":122},[109,38453,32709],{"class":126},[109,38455,32712],{"class":6553},[109,38457,130],{"class":122},[109,38459,35208],{"class":126},[109,38461,38462],{"class":111,"line":331},[109,38463,35213],{"class":115},[109,38465,38466,38468,38470,38472],{"class":111,"line":336},[109,38467,35218],{"class":6553},[109,38469,130],{"class":122},[109,38471,1755],{"class":133},[109,38473,32641],{"class":126},[109,38475,38476,38478,38480,38482],{"class":111,"line":364},[109,38477,35229],{"class":6553},[109,38479,130],{"class":122},[109,38481,32651],{"class":133},[109,38483,32641],{"class":126},[109,38485,38486,38488,38490,38492],{"class":111,"line":391},[109,38487,35240],{"class":6553},[109,38489,130],{"class":122},[109,38491,1314],{"class":133},[109,38493,1330],{"class":126},[109,38495,38496,38498],{"class":111,"line":396},[109,38497,731],{"class":122},[109,38499,35253],{"class":126},[109,38501,38502],{"class":111,"line":402},[109,38503,158],{"emptyLinePlaceholder":157},[109,38505,38506],{"class":111,"line":419},[109,38507,35262],{"class":115},[109,38509,38510,38512,38514],{"class":111,"line":435},[109,38511,33122],{"class":122},[109,38513,35269],{"class":211},[109,38515,35272],{"class":126},[109,38517,38518],{"class":111,"line":440},[109,38519,35277],{"class":115},[109,38521,38522,38524,38526,38528,38530,38532,38534],{"class":111,"line":467},[109,38523,32412],{"class":126},[109,38525,130],{"class":122},[109,38527,32419],{"class":278},[109,38529,3080],{"class":122},[109,38531,32424],{"class":126},[109,38533,3077],{"class":122},[109,38535,35294],{"class":278},[109,38537,38538,38540,38542],{"class":111,"line":494},[109,38539,32464],{"class":126},[109,38541,130],{"class":122},[109,38543,33464],{"class":126},[109,38545,38546],{"class":111,"line":499},[109,38547,158],{"emptyLinePlaceholder":157},[109,38549,38550],{"class":111,"line":526},[109,38551,35311],{"class":115},[109,38553,38554,38556,38558],{"class":111,"line":552},[109,38555,35316],{"class":126},[109,38557,130],{"class":122},[109,38559,33517],{"class":133},[109,38561,38562,38564,38566],{"class":111,"line":557},[109,38563,35325],{"class":126},[109,38565,130],{"class":122},[109,38567,4430],{"class":133},[109,38569,38570],{"class":111,"line":584},[109,38571,158],{"emptyLinePlaceholder":157},[109,38573,38574],{"class":111,"line":611},[109,38575,35338],{"class":115},[109,38577,38578],{"class":111,"line":616},[109,38579,35343],{"class":115},[109,38581,38582],{"class":111,"line":633},[109,38583,35348],{"class":115},[109,38585,38586,38588],{"class":111,"line":649},[109,38587,35353],{"class":122},[109,38589,34059],{"class":126},[109,38591,38592],{"class":111,"line":676},[109,38593,35360],{"class":115},[109,38595,38596,38598,38600,38602],{"class":111,"line":703},[109,38597,4747],{"class":122},[109,38599,35367],{"class":126},[109,38601,27218],{"class":122},[109,38603,35372],{"class":126},[109,38605,38606,38608,38610],{"class":111,"line":708},[109,38607,35377],{"class":126},[109,38609,130],{"class":122},[109,38611,35382],{"class":126},[109,38613,38614,38616,38618],{"class":111,"line":723},[109,38615,35387],{"class":126},[109,38617,130],{"class":122},[109,38619,35392],{"class":126},[109,38621,38622],{"class":111,"line":728},[109,38623,35397],{"class":115},[109,38625,38626],{"class":111,"line":739},[109,38627,34050],{"class":126},[109,38629,38630],{"class":111,"line":9352},[109,38631,35406],{"class":115},[109,38633,38634,38636,38638],{"class":111,"line":9364},[109,38635,33835],{"class":126},[109,38637,130],{"class":122},[109,38639,35415],{"class":126},[109,38641,38642],{"class":111,"line":9376},[109,38643,35420],{"class":115},[109,38645,38646,38648,38650,38652,38654,38656,38658],{"class":111,"line":11034},[109,38647,33852],{"class":126},[109,38649,130],{"class":122},[109,38651,33857],{"class":126},[109,38653,33860],{"class":6553},[109,38655,130],{"class":122},[109,38657,1755],{"class":133},[109,38659,1330],{"class":126},[109,38661,38662],{"class":111,"line":11059},[109,38663,35441],{"class":115},[109,38665,38666],{"class":111,"line":11082},[109,38667,35446],{"class":115},[109,38669,38670],{"class":111,"line":11106},[109,38671,35451],{"class":115},[109,38673,38674,38676,38678,38680,38682],{"class":111,"line":11111},[109,38675,35456],{"class":126},[109,38677,10795],{"class":122},[109,38679,33962],{"class":126},[109,38681,4296],{"class":122},[109,38683,35465],{"class":126},[109,38685,38686],{"class":111,"line":11116},[109,38687,35470],{"class":115},[109,38689,38690,38692,38694,38696,38698],{"class":111,"line":11121},[109,38691,35475],{"class":126},[109,38693,10795],{"class":122},[109,38695,35480],{"class":126},[109,38697,1314],{"class":133},[109,38699,1330],{"class":126},[109,38701,38702],{"class":111,"line":11130},[109,38703,158],{"emptyLinePlaceholder":157},[109,38705,38706],{"class":111,"line":11135},[109,38707,35493],{"class":115},[109,38709,38710,38712,38714,38716,38718],{"class":111,"line":11141},[109,38711,35498],{"class":126},[109,38713,130],{"class":122},[109,38715,35503],{"class":126},[109,38717,2116],{"class":122},[109,38719,35508],{"class":126},[109,38721,38722],{"class":111,"line":11162},[109,38723,35513],{"class":115},[109,38725,38726,38728,38730,38732],{"class":111,"line":11168},[109,38727,33626],{"class":133},[109,38729,714],{"class":126},[109,38731,35522],{"class":278},[109,38733,35525],{"class":126},[109,38735,38736],{"class":111,"line":11182},[109,38737,158],{"emptyLinePlaceholder":157},[109,38739,38740],{"class":111,"line":11188},[109,38741,35534],{"class":115},[109,38743,38744,38746,38748,38750,38752],{"class":111,"line":11215},[109,38745,2922],{"class":122},[109,38747,32395],{"class":133},[109,38749,4296],{"class":122},[109,38751,32400],{"class":278},[109,38753,5082],{"class":126},[109,38755,38756],{"class":111,"line":11224},[109,38757,35551],{"class":115},[109,38759,38760,38762,38764],{"class":111,"line":11230},[109,38761,32464],{"class":126},[109,38763,130],{"class":122},[109,38765,38264],{"class":126},[109,38767,38768],{"class":111,"line":11238},[109,38769,35564],{"class":115},[109,38771,38772],{"class":111,"line":11243},[109,38773,35569],{"class":115},[109,38775,38776,38778,38780],{"class":111,"line":17777},[109,38777,35574],{"class":126},[109,38779,35577],{"class":278},[109,38781,31672],{"class":126},[109,38783,38784],{"class":111,"line":17783},[109,38785,35584],{"class":115},[109,38787,38788,38790,38792],{"class":111,"line":17806},[109,38789,35197],{"class":126},[109,38791,130],{"class":122},[109,38793,35593],{"class":126},[109,38795,38796],{"class":111,"line":17812},[109,38797,35598],{"class":115},[109,38799,38800],{"class":111,"line":17835},[109,38801,35603],{"class":126},[109,38803,38804],{"class":111,"line":17849},[109,38805,158],{"emptyLinePlaceholder":157},[109,38807,38808],{"class":111,"line":17869},[109,38809,35612],{"class":115},[109,38811,38812],{"class":111,"line":17875},[109,38813,35617],{"class":115},[109,38815,38816,38818,38820,38822,38824,38826,38828],{"class":111,"line":17886},[109,38817,32412],{"class":126},[109,38819,130],{"class":122},[109,38821,32419],{"class":278},[109,38823,3080],{"class":122},[109,38825,32424],{"class":126},[109,38827,3077],{"class":122},[109,38829,35294],{"class":278},[109,38831,38832,38834,38836],{"class":111,"line":17909},[109,38833,32464],{"class":126},[109,38835,130],{"class":122},[109,38837,33464],{"class":126},[109,38839,38840],{"class":111,"line":17931},[109,38841,35646],{"class":115},[109,38843,38844],{"class":111,"line":17936},[109,38845,35651],{"class":115},[109,38847,38848,38850,38852,38854,38856,38858,38860,38862,38864,38866,38868,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888,38890,38892],{"class":111,"line":17942},[109,38849,35656],{"class":126},[109,38851,130],{"class":122},[109,38853,1289],{"class":126},[109,38855,35663],{"class":278},[109,38857,1914],{"class":126},[109,38859,35668],{"class":278},[109,38861,1914],{"class":126},[109,38863,35673],{"class":278},[109,38865,1914],{"class":126},[109,38867,35678],{"class":278},[109,38869,1914],{"class":126},[109,38871,35683],{"class":278},[109,38873,1914],{"class":126},[109,38875,35688],{"class":278},[109,38877,1914],{"class":126},[109,38879,35693],{"class":278},[109,38881,1914],{"class":126},[109,38883,35698],{"class":278},[109,38885,1914],{"class":126},[109,38887,35703],{"class":278},[109,38889,1914],{"class":126},[109,38891,35708],{"class":278},[109,38893,34421],{"class":126},[109,38895,38896,38898],{"class":111,"line":17956},[109,38897,35353],{"class":122},[109,38899,34059],{"class":126},[109,38901,38902],{"class":111,"line":17969},[109,38903,35721],{"class":115},[109,38905,38906,38908,38910,38912],{"class":111,"line":17974},[109,38907,4747],{"class":122},[109,38909,35728],{"class":126},[109,38911,27218],{"class":122},[109,38913,35372],{"class":126},[109,38915,38916,38918,38920],{"class":111,"line":17988},[109,38917,33785],{"class":126},[109,38919,130],{"class":122},[109,38921,33790],{"class":126},[109,38923,38924,38926,38928],{"class":111,"line":17993},[109,38925,33800],{"class":126},[109,38927,130],{"class":122},[109,38929,33805],{"class":126},[109,38931,38932],{"class":111,"line":17999},[109,38933,158],{"emptyLinePlaceholder":157},[109,38935,38936],{"class":111,"line":18004},[109,38937,35757],{"class":115},[109,38939,38940],{"class":111,"line":18018},[109,38941,34050],{"class":126},[109,38943,38944],{"class":111,"line":18023},[109,38945,35766],{"class":115},[109,38947,38948,38950,38952],{"class":111,"line":18028},[109,38949,33835],{"class":126},[109,38951,130],{"class":122},[109,38953,33840],{"class":126},[109,38955,38956],{"class":111,"line":18042},[109,38957,35779],{"class":115},[109,38959,38960,38962,38964,38966,38968,38970,38972],{"class":111,"line":18054},[109,38961,33852],{"class":126},[109,38963,130],{"class":122},[109,38965,33857],{"class":126},[109,38967,33860],{"class":6553},[109,38969,130],{"class":122},[109,38971,1755],{"class":133},[109,38973,1330],{"class":126},[109,38975,38976],{"class":111,"line":18059},[109,38977,35800],{"class":115},[109,38979,38980,38982,38984],{"class":111,"line":18072},[109,38981,35805],{"class":126},[109,38983,130],{"class":122},[109,38985,35810],{"class":126},[109,38987,38988,38990,38992],{"class":111,"line":18077},[109,38989,35815],{"class":126},[109,38991,130],{"class":122},[109,38993,35820],{"class":126},[109,38995,38996,38998,39000,39002,39004,39006,39008,39010],{"class":111,"line":18082},[109,38997,35825],{"class":133},[109,38999,714],{"class":126},[109,39001,35830],{"class":278},[109,39003,35833],{"class":126},[109,39005,35836],{"class":278},[109,39007,1914],{"class":126},[109,39009,35841],{"class":278},[109,39011,35844],{"class":126},[51,39013,39015],{"id":39014},"_22vgg","2.2.VGG",[23171,39017,39019],{"id":39018},"_221原理","2.2.1.原理",[19,39021,39022],{},[938,39023],{"alt":104,"src":39024},"\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,39026,39027],{},[938,39028],{"alt":104,"src":39029},"\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,39031,39032],{},[938,39033],{"alt":104,"src":39034},"\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,39036,39037],{},"参数详细描述：",[19,39039,39040],{},[938,39041],{"alt":104,"src":39042},"\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,39044,39045],{},[938,39046],{"alt":104,"src":39047},"\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,39049,39050],{},[938,39051],{"alt":104,"src":39052},"\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,39054,39055],{},[938,39056],{"alt":104,"src":39057},"\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,39059,39060],{},[938,39061],{"alt":104,"src":39062},"\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",[23171,39064,39066],{"id":39065},"_222代码实现","2.2.2.代码实现",[765,39068,39069],{},[30,39070,39071],{},"网络搭建",[99,39073,39075],{"className":31553,"code":39074,"language":31555,"meta":104,"style":104},"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",[106,39076,39077,39083,39095,39105,39115,39119,39136,39144,39163,39168,39173,39185,39223,39228,39264,39268,39297,39302,39307,39318,39354,39358,39394,39398,39426,39430,39435,39446,39482,39486,39522,39526,39562,39566,39594,39598,39603,39614,39651,39655,39691,39695,39731,39735,39763,39767,39772,39783,39819,39823,39859,39863,39899,39903,39931,39935,39940,39951,39956,39961,39966,39987,39991,40003,40007,40019,40023,40027,40032,40037,40052,40057,40067,40072,40087,40092,40111,40116,40125,40130,40140,40145,40150,40164,40169,40183,40191,40195,40199,40207,40218,40229,40240,40251,40262,40273,40279,40283,40288,40301,40321,40327,40336],{"__ignoreMap":104},[109,39078,39079,39081],{"class":111,"line":112},[109,39080,31567],{"class":122},[109,39082,31570],{"class":126},[109,39084,39085,39087,39090,39092],{"class":111,"line":119},[109,39086,31912],{"class":122},[109,39088,39089],{"class":126}," sympy.core.sympify ",[109,39091,31567],{"class":122},[109,39093,39094],{"class":126}," kernS\n",[109,39096,39097,39099,39101,39103],{"class":111,"line":140},[109,39098,31912],{"class":122},[109,39100,31915],{"class":126},[109,39102,31567],{"class":122},[109,39104,31920],{"class":126},[109,39106,39107,39109,39111,39113],{"class":111,"line":154},[109,39108,31912],{"class":122},[109,39110,31932],{"class":126},[109,39112,31567],{"class":122},[109,39114,31937],{"class":126},[109,39116,39117],{"class":111,"line":161},[109,39118,158],{"emptyLinePlaceholder":157},[109,39120,39121,39123,39126,39128,39130,39132,39134],{"class":111,"line":167},[109,39122,15867],{"class":122},[109,39124,39125],{"class":211}," VGG16",[109,39127,714],{"class":126},[109,39129,31953],{"class":211},[109,39131,2090],{"class":126},[109,39133,31958],{"class":211},[109,39135,31961],{"class":126},[109,39137,39138,39140,39142],{"class":111,"line":185},[109,39139,31976],{"class":122},[109,39141,31979],{"class":133},[109,39143,31982],{"class":126},[109,39145,39146,39148,39150,39153,39155,39157,39159,39161],{"class":111,"line":201},[109,39147,31992],{"class":133},[109,39149,714],{"class":126},[109,39151,39152],{"class":133},"VGG16",[109,39154,13608],{"class":126},[109,39156,31998],{"class":133},[109,39158,32001],{"class":126},[109,39160,32004],{"class":133},[109,39162,803],{"class":126},[109,39164,39165],{"class":111,"line":206},[109,39166,39167],{"class":115},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[109,39169,39170],{"class":111,"line":218},[109,39171,39172],{"class":115},"        # 这里用的是灰度图\n",[109,39174,39175,39177,39180,39182],{"class":111,"line":223},[109,39176,32020],{"class":133},[109,39178,39179],{"class":126},".block1",[109,39181,130],{"class":122},[109,39183,39184],{"class":126},"nn.Sequential(\n",[109,39186,39187,39190,39192,39194,39196,39198,39200,39202,39204,39206,39208,39210,39212,39214,39216,39218,39220],{"class":111,"line":229},[109,39188,39189],{"class":126},"            nn.Conv2d(",[109,39191,32031],{"class":6553},[109,39193,130],{"class":122},[109,39195,1755],{"class":133},[109,39197,1914],{"class":126},[109,39199,32040],{"class":6553},[109,39201,130],{"class":122},[109,39203,1741],{"class":133},[109,39205,1914],{"class":126},[109,39207,32049],{"class":6553},[109,39209,130],{"class":122},[109,39211,1612],{"class":133},[109,39213,1914],{"class":126},[109,39215,32058],{"class":6553},[109,39217,130],{"class":122},[109,39219,1755],{"class":133},[109,39221,39222],{"class":126},"),\n",[109,39224,39225],{"class":111,"line":244},[109,39226,39227],{"class":126},"            nn.ReLU(),\n",[109,39229,39230,39232,39234,39236,39238,39240,39242,39244,39246,39248,39250,39252,39254,39256,39258,39260,39262],{"class":111,"line":258},[109,39231,39189],{"class":126},[109,39233,32031],{"class":6553},[109,39235,130],{"class":122},[109,39237,1741],{"class":133},[109,39239,1914],{"class":126},[109,39241,32040],{"class":6553},[109,39243,130],{"class":122},[109,39245,1741],{"class":133},[109,39247,1914],{"class":126},[109,39249,32049],{"class":6553},[109,39251,130],{"class":122},[109,39253,1612],{"class":133},[109,39255,1914],{"class":126},[109,39257,32058],{"class":6553},[109,39259,130],{"class":122},[109,39261,1755],{"class":133},[109,39263,39222],{"class":126},[109,39265,39266],{"class":111,"line":263},[109,39267,39227],{"class":126},[109,39269,39270,39273,39275,39277,39279,39281,39283,39285,39287,39289,39291,39293,39295],{"class":111,"line":269},[109,39271,39272],{"class":126},"            nn.MaxPool2d(",[109,39274,32049],{"class":6553},[109,39276,130],{"class":122},[109,39278,1618],{"class":133},[109,39280,1914],{"class":126},[109,39282,32104],{"class":6553},[109,39284,130],{"class":122},[109,39286,1618],{"class":133},[109,39288,1914],{"class":126},[109,39290,32058],{"class":6553},[109,39292,130],{"class":122},[109,39294,1314],{"class":133},[109,39296,1330],{"class":126},[109,39298,39299],{"class":111,"line":304},[109,39300,39301],{"class":126},"        )\n",[109,39303,39304],{"class":111,"line":331},[109,39305,39306],{"class":115},"        # 第二层\n",[109,39308,39309,39311,39314,39316],{"class":111,"line":336},[109,39310,32020],{"class":133},[109,39312,39313],{"class":126},".block2",[109,39315,130],{"class":122},[109,39317,39184],{"class":126},[109,39319,39320,39322,39324,39326,39328,39330,39332,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352],{"class":111,"line":364},[109,39321,39189],{"class":126},[109,39323,32031],{"class":6553},[109,39325,130],{"class":122},[109,39327,1741],{"class":133},[109,39329,1914],{"class":126},[109,39331,32040],{"class":6553},[109,39333,130],{"class":122},[109,39335,33245],{"class":133},[109,39337,1914],{"class":126},[109,39339,32049],{"class":6553},[109,39341,130],{"class":122},[109,39343,1612],{"class":133},[109,39345,1914],{"class":126},[109,39347,32058],{"class":6553},[109,39349,130],{"class":122},[109,39351,1755],{"class":133},[109,39353,39222],{"class":126},[109,39355,39356],{"class":111,"line":391},[109,39357,39227],{"class":126},[109,39359,39360,39362,39364,39366,39368,39370,39372,39374,39376,39378,39380,39382,39384,39386,39388,39390,39392],{"class":111,"line":396},[109,39361,39189],{"class":126},[109,39363,32031],{"class":6553},[109,39365,130],{"class":122},[109,39367,33245],{"class":133},[109,39369,1914],{"class":126},[109,39371,32040],{"class":6553},[109,39373,130],{"class":122},[109,39375,33245],{"class":133},[109,39377,1914],{"class":126},[109,39379,32049],{"class":6553},[109,39381,130],{"class":122},[109,39383,1612],{"class":133},[109,39385,1914],{"class":126},[109,39387,32058],{"class":6553},[109,39389,130],{"class":122},[109,39391,1755],{"class":133},[109,39393,39222],{"class":126},[109,39395,39396],{"class":111,"line":402},[109,39397,39227],{"class":126},[109,39399,39400,39402,39404,39406,39408,39410,39412,39414,39416,39418,39420,39422,39424],{"class":111,"line":419},[109,39401,39272],{"class":126},[109,39403,32049],{"class":6553},[109,39405,130],{"class":122},[109,39407,1618],{"class":133},[109,39409,1914],{"class":126},[109,39411,32104],{"class":6553},[109,39413,130],{"class":122},[109,39415,1618],{"class":133},[109,39417,1914],{"class":126},[109,39419,32058],{"class":6553},[109,39421,130],{"class":122},[109,39423,1314],{"class":133},[109,39425,1330],{"class":126},[109,39427,39428],{"class":111,"line":435},[109,39429,39301],{"class":126},[109,39431,39432],{"class":111,"line":440},[109,39433,39434],{"class":115},"        # 第三层\n",[109,39436,39437,39439,39442,39444],{"class":111,"line":467},[109,39438,32020],{"class":133},[109,39440,39441],{"class":126},".block3",[109,39443,130],{"class":122},[109,39445,39184],{"class":126},[109,39447,39448,39450,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472,39474,39476,39478,39480],{"class":111,"line":494},[109,39449,39189],{"class":126},[109,39451,32031],{"class":6553},[109,39453,130],{"class":122},[109,39455,33245],{"class":133},[109,39457,1914],{"class":126},[109,39459,32040],{"class":6553},[109,39461,130],{"class":122},[109,39463,36045],{"class":133},[109,39465,1914],{"class":126},[109,39467,32049],{"class":6553},[109,39469,130],{"class":122},[109,39471,1612],{"class":133},[109,39473,1914],{"class":126},[109,39475,32058],{"class":6553},[109,39477,130],{"class":122},[109,39479,1755],{"class":133},[109,39481,39222],{"class":126},[109,39483,39484],{"class":111,"line":499},[109,39485,39227],{"class":126},[109,39487,39488,39490,39492,39494,39496,39498,39500,39502,39504,39506,39508,39510,39512,39514,39516,39518,39520],{"class":111,"line":526},[109,39489,39189],{"class":126},[109,39491,32031],{"class":6553},[109,39493,130],{"class":122},[109,39495,36045],{"class":133},[109,39497,1914],{"class":126},[109,39499,32040],{"class":6553},[109,39501,130],{"class":122},[109,39503,36045],{"class":133},[109,39505,1914],{"class":126},[109,39507,32049],{"class":6553},[109,39509,130],{"class":122},[109,39511,1612],{"class":133},[109,39513,1914],{"class":126},[109,39515,32058],{"class":6553},[109,39517,130],{"class":122},[109,39519,1755],{"class":133},[109,39521,39222],{"class":126},[109,39523,39524],{"class":111,"line":552},[109,39525,39227],{"class":126},[109,39527,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554,39556,39558,39560],{"class":111,"line":557},[109,39529,39189],{"class":126},[109,39531,32031],{"class":6553},[109,39533,130],{"class":122},[109,39535,36045],{"class":133},[109,39537,1914],{"class":126},[109,39539,32040],{"class":6553},[109,39541,130],{"class":122},[109,39543,36045],{"class":133},[109,39545,1914],{"class":126},[109,39547,32049],{"class":6553},[109,39549,130],{"class":122},[109,39551,1612],{"class":133},[109,39553,1914],{"class":126},[109,39555,32058],{"class":6553},[109,39557,130],{"class":122},[109,39559,1755],{"class":133},[109,39561,39222],{"class":126},[109,39563,39564],{"class":111,"line":584},[109,39565,39227],{"class":126},[109,39567,39568,39570,39572,39574,39576,39578,39580,39582,39584,39586,39588,39590,39592],{"class":111,"line":611},[109,39569,39272],{"class":126},[109,39571,32049],{"class":6553},[109,39573,130],{"class":122},[109,39575,1618],{"class":133},[109,39577,1914],{"class":126},[109,39579,32104],{"class":6553},[109,39581,130],{"class":122},[109,39583,1618],{"class":133},[109,39585,1914],{"class":126},[109,39587,32058],{"class":6553},[109,39589,130],{"class":122},[109,39591,1314],{"class":133},[109,39593,1330],{"class":126},[109,39595,39596],{"class":111,"line":616},[109,39597,39301],{"class":126},[109,39599,39600],{"class":111,"line":633},[109,39601,39602],{"class":115},"        # 第四层\n",[109,39604,39605,39607,39610,39612],{"class":111,"line":649},[109,39606,32020],{"class":133},[109,39608,39609],{"class":126},".block4",[109,39611,130],{"class":122},[109,39613,39184],{"class":126},[109,39615,39616,39618,39620,39622,39624,39626,39628,39630,39633,39635,39637,39639,39641,39643,39645,39647,39649],{"class":111,"line":676},[109,39617,39189],{"class":126},[109,39619,32031],{"class":6553},[109,39621,130],{"class":122},[109,39623,36045],{"class":133},[109,39625,1914],{"class":126},[109,39627,32040],{"class":6553},[109,39629,130],{"class":122},[109,39631,39632],{"class":133},"512",[109,39634,1914],{"class":126},[109,39636,32049],{"class":6553},[109,39638,130],{"class":122},[109,39640,1612],{"class":133},[109,39642,1914],{"class":126},[109,39644,32058],{"class":6553},[109,39646,130],{"class":122},[109,39648,1755],{"class":133},[109,39650,39222],{"class":126},[109,39652,39653],{"class":111,"line":703},[109,39654,39227],{"class":126},[109,39656,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689],{"class":111,"line":708},[109,39658,39189],{"class":126},[109,39660,32031],{"class":6553},[109,39662,130],{"class":122},[109,39664,39632],{"class":133},[109,39666,1914],{"class":126},[109,39668,32040],{"class":6553},[109,39670,130],{"class":122},[109,39672,39632],{"class":133},[109,39674,1914],{"class":126},[109,39676,32049],{"class":6553},[109,39678,130],{"class":122},[109,39680,1612],{"class":133},[109,39682,1914],{"class":126},[109,39684,32058],{"class":6553},[109,39686,130],{"class":122},[109,39688,1755],{"class":133},[109,39690,39222],{"class":126},[109,39692,39693],{"class":111,"line":723},[109,39694,39227],{"class":126},[109,39696,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729],{"class":111,"line":728},[109,39698,39189],{"class":126},[109,39700,32031],{"class":6553},[109,39702,130],{"class":122},[109,39704,39632],{"class":133},[109,39706,1914],{"class":126},[109,39708,32040],{"class":6553},[109,39710,130],{"class":122},[109,39712,39632],{"class":133},[109,39714,1914],{"class":126},[109,39716,32049],{"class":6553},[109,39718,130],{"class":122},[109,39720,1612],{"class":133},[109,39722,1914],{"class":126},[109,39724,32058],{"class":6553},[109,39726,130],{"class":122},[109,39728,1755],{"class":133},[109,39730,39222],{"class":126},[109,39732,39733],{"class":111,"line":739},[109,39734,39227],{"class":126},[109,39736,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761],{"class":111,"line":9352},[109,39738,39272],{"class":126},[109,39740,32049],{"class":6553},[109,39742,130],{"class":122},[109,39744,1618],{"class":133},[109,39746,1914],{"class":126},[109,39748,32104],{"class":6553},[109,39750,130],{"class":122},[109,39752,1618],{"class":133},[109,39754,1914],{"class":126},[109,39756,32058],{"class":6553},[109,39758,130],{"class":122},[109,39760,1314],{"class":133},[109,39762,1330],{"class":126},[109,39764,39765],{"class":111,"line":9364},[109,39766,39301],{"class":126},[109,39768,39769],{"class":111,"line":9376},[109,39770,39771],{"class":115},"        # 第五层\n",[109,39773,39774,39776,39779,39781],{"class":111,"line":11034},[109,39775,32020],{"class":133},[109,39777,39778],{"class":126},".block5",[109,39780,130],{"class":122},[109,39782,39184],{"class":126},[109,39784,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817],{"class":111,"line":11059},[109,39786,39189],{"class":126},[109,39788,32031],{"class":6553},[109,39790,130],{"class":122},[109,39792,39632],{"class":133},[109,39794,1914],{"class":126},[109,39796,32040],{"class":6553},[109,39798,130],{"class":122},[109,39800,39632],{"class":133},[109,39802,1914],{"class":126},[109,39804,32049],{"class":6553},[109,39806,130],{"class":122},[109,39808,1612],{"class":133},[109,39810,1914],{"class":126},[109,39812,32058],{"class":6553},[109,39814,130],{"class":122},[109,39816,1755],{"class":133},[109,39818,39222],{"class":126},[109,39820,39821],{"class":111,"line":11082},[109,39822,39227],{"class":126},[109,39824,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857],{"class":111,"line":11106},[109,39826,39189],{"class":126},[109,39828,32031],{"class":6553},[109,39830,130],{"class":122},[109,39832,39632],{"class":133},[109,39834,1914],{"class":126},[109,39836,32040],{"class":6553},[109,39838,130],{"class":122},[109,39840,39632],{"class":133},[109,39842,1914],{"class":126},[109,39844,32049],{"class":6553},[109,39846,130],{"class":122},[109,39848,1612],{"class":133},[109,39850,1914],{"class":126},[109,39852,32058],{"class":6553},[109,39854,130],{"class":122},[109,39856,1755],{"class":133},[109,39858,39222],{"class":126},[109,39860,39861],{"class":111,"line":11111},[109,39862,39227],{"class":126},[109,39864,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897],{"class":111,"line":11116},[109,39866,39189],{"class":126},[109,39868,32031],{"class":6553},[109,39870,130],{"class":122},[109,39872,39632],{"class":133},[109,39874,1914],{"class":126},[109,39876,32040],{"class":6553},[109,39878,130],{"class":122},[109,39880,39632],{"class":133},[109,39882,1914],{"class":126},[109,39884,32049],{"class":6553},[109,39886,130],{"class":122},[109,39888,1612],{"class":133},[109,39890,1914],{"class":126},[109,39892,32058],{"class":6553},[109,39894,130],{"class":122},[109,39896,1755],{"class":133},[109,39898,39222],{"class":126},[109,39900,39901],{"class":111,"line":11121},[109,39902,39227],{"class":126},[109,39904,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929],{"class":111,"line":11130},[109,39906,39272],{"class":126},[109,39908,32049],{"class":6553},[109,39910,130],{"class":122},[109,39912,1618],{"class":133},[109,39914,1914],{"class":126},[109,39916,32104],{"class":6553},[109,39918,130],{"class":122},[109,39920,1618],{"class":133},[109,39922,1914],{"class":126},[109,39924,32058],{"class":6553},[109,39926,130],{"class":122},[109,39928,1314],{"class":133},[109,39930,1330],{"class":126},[109,39932,39933],{"class":111,"line":11135},[109,39934,39301],{"class":126},[109,39936,39937],{"class":111,"line":11141},[109,39938,39939],{"class":115},"        # 全连接层\n",[109,39941,39942,39944,39947,39949],{"class":111,"line":11162},[109,39943,32020],{"class":133},[109,39945,39946],{"class":126},".block6",[109,39948,130],{"class":122},[109,39950,39184],{"class":126},[109,39952,39953],{"class":111,"line":11168},[109,39954,39955],{"class":115},"            # 平展操作\n",[109,39957,39958],{"class":111,"line":11182},[109,39959,39960],{"class":115},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[109,39962,39963],{"class":111,"line":11188},[109,39964,39965],{"class":126},"            nn.Flatten(),\n",[109,39967,39968,39971,39973,39975,39977,39979,39981,39983,39985],{"class":111,"line":11215},[109,39969,39970],{"class":126},"            nn.Linear(",[109,39972,1905],{"class":133},[109,39974,1988],{"class":122},[109,39976,1905],{"class":133},[109,39978,1988],{"class":122},[109,39980,39632],{"class":133},[109,39982,1914],{"class":126},[109,39984,36045],{"class":133},[109,39986,39222],{"class":126},[109,39988,39989],{"class":111,"line":11224},[109,39990,39227],{"class":126},[109,39992,39993,39995,39997,39999,40001],{"class":111,"line":11230},[109,39994,39970],{"class":126},[109,39996,36045],{"class":133},[109,39998,1914],{"class":126},[109,40000,33245],{"class":133},[109,40002,39222],{"class":126},[109,40004,40005],{"class":111,"line":11238},[109,40006,39227],{"class":126},[109,40008,40009,40011,40013,40015,40017],{"class":111,"line":11243},[109,40010,39970],{"class":126},[109,40012,33245],{"class":133},[109,40014,1914],{"class":126},[109,40016,1008],{"class":133},[109,40018,1330],{"class":126},[109,40020,40021],{"class":111,"line":17777},[109,40022,39301],{"class":126},[109,40024,40025],{"class":111,"line":17783},[109,40026,158],{"emptyLinePlaceholder":157},[109,40028,40029],{"class":111,"line":17806},[109,40030,40031],{"class":115},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[109,40033,40034],{"class":111,"line":17812},[109,40035,40036],{"class":115},"        # 循环遍历模型\n",[109,40038,40039,40041,40044,40046,40049],{"class":111,"line":17835},[109,40040,4747],{"class":122},[109,40042,40043],{"class":126}," m ",[109,40045,27218],{"class":122},[109,40047,40048],{"class":133}," self",[109,40050,40051],{"class":126},".modules():\n",[109,40053,40054],{"class":111,"line":17849},[109,40055,40056],{"class":115},"            # print(m)\n",[109,40058,40059,40061,40064],{"class":111,"line":17869},[109,40060,5979],{"class":122},[109,40062,40063],{"class":133}," isinstance",[109,40065,40066],{"class":126},"(m,nn.Conv2d):\n",[109,40068,40069],{"class":111,"line":17875},[109,40070,40071],{"class":115},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[109,40073,40074,40077,40080,40082,40085],{"class":111,"line":17886},[109,40075,40076],{"class":126},"                nn.init.kaiming_normal_(m.weight,",[109,40078,40079],{"class":6553},"nonlinearity",[109,40081,130],{"class":122},[109,40083,40084],{"class":278},"'relu'",[109,40086,1330],{"class":126},[109,40088,40089],{"class":111,"line":17909},[109,40090,40091],{"class":115},"                # 判断b参数是否存在\n",[109,40093,40094,40097,40100,40103,40106,40109],{"class":111,"line":17931},[109,40095,40096],{"class":122},"                if",[109,40098,40099],{"class":126}," m.bias ",[109,40101,40102],{"class":122},"is",[109,40104,40105],{"class":122}," not",[109,40107,40108],{"class":133}," None",[109,40110,5082],{"class":126},[109,40112,40113],{"class":111,"line":17936},[109,40114,40115],{"class":115},"                    # 如果参数不存在的化初始化b=0\n",[109,40117,40118,40121,40123],{"class":111,"line":17942},[109,40119,40120],{"class":126},"                    nn.init.constant_(m.bias,",[109,40122,1314],{"class":133},[109,40124,1330],{"class":126},[109,40126,40127],{"class":111,"line":17956},[109,40128,40129],{"class":115},"            # 全连接层初始化\n",[109,40131,40132,40135,40137],{"class":111,"line":17969},[109,40133,40134],{"class":122},"            elif",[109,40136,40063],{"class":133},[109,40138,40139],{"class":126},"(m,nn.Linear):\n",[109,40141,40142],{"class":111,"line":17974},[109,40143,40144],{"class":115},"                # 这个初始化方法是利用的是正太分布的方式\n",[109,40146,40147],{"class":111,"line":17988},[109,40148,40149],{"class":115},"                # 均值为0，方差为0.01\n",[109,40151,40152,40155,40157,40159,40162],{"class":111,"line":17993},[109,40153,40154],{"class":126},"                nn.init.normal_(m.weight,",[109,40156,1314],{"class":133},[109,40158,1914],{"class":126},[109,40160,40161],{"class":133},"0.01",[109,40163,1330],{"class":126},[109,40165,40166],{"class":111,"line":17999},[109,40167,40168],{"class":115},"                # 初始化b参数\n",[109,40170,40171,40173,40175,40177,40179,40181],{"class":111,"line":18004},[109,40172,40096],{"class":122},[109,40174,40099],{"class":126},[109,40176,40102],{"class":122},[109,40178,40105],{"class":122},[109,40180,40108],{"class":133},[109,40182,5082],{"class":126},[109,40184,40185,40187,40189],{"class":111,"line":18018},[109,40186,40120],{"class":126},[109,40188,1314],{"class":133},[109,40190,1330],{"class":126},[109,40192,40193],{"class":111,"line":18023},[109,40194,158],{"emptyLinePlaceholder":157},[109,40196,40197],{"class":111,"line":18028},[109,40198,36340],{"class":115},[109,40200,40201,40203,40205],{"class":111,"line":18042},[109,40202,31976],{"class":122},[109,40204,32268],{"class":211},[109,40206,32271],{"class":126},[109,40208,40209,40211,40213,40215],{"class":111,"line":18054},[109,40210,32276],{"class":126},[109,40212,130],{"class":122},[109,40214,31998],{"class":133},[109,40216,40217],{"class":126},".block1(x)\n",[109,40219,40220,40222,40224,40226],{"class":111,"line":18059},[109,40221,32276],{"class":126},[109,40223,130],{"class":122},[109,40225,31998],{"class":133},[109,40227,40228],{"class":126},".block2(x)\n",[109,40230,40231,40233,40235,40237],{"class":111,"line":18072},[109,40232,32276],{"class":126},[109,40234,130],{"class":122},[109,40236,31998],{"class":133},[109,40238,40239],{"class":126},".block3(x)\n",[109,40241,40242,40244,40246,40248],{"class":111,"line":18077},[109,40243,32276],{"class":126},[109,40245,130],{"class":122},[109,40247,31998],{"class":133},[109,40249,40250],{"class":126},".block4(x)\n",[109,40252,40253,40255,40257,40259],{"class":111,"line":18082},[109,40254,32276],{"class":126},[109,40256,130],{"class":122},[109,40258,31998],{"class":133},[109,40260,40261],{"class":126},".block5(x)\n",[109,40263,40264,40266,40268,40270],{"class":111,"line":18087},[109,40265,32276],{"class":126},[109,40267,130],{"class":122},[109,40269,31998],{"class":133},[109,40271,40272],{"class":126},".block6(x)\n",[109,40274,40275,40277],{"class":111,"line":18100},[109,40276,15925],{"class":122},[109,40278,32384],{"class":126},[109,40280,40281],{"class":111,"line":18105},[109,40282,158],{"emptyLinePlaceholder":157},[109,40284,40285],{"class":111,"line":33808},[109,40286,40287],{"class":115},"# 验证模型\n",[109,40289,40290,40292,40294,40296,40299],{"class":111,"line":33814},[109,40291,2922],{"class":122},[109,40293,32395],{"class":133},[109,40295,4296],{"class":122},[109,40297,40298],{"class":278},"'__main__'",[109,40300,5082],{"class":126},[109,40302,40303,40305,40307,40309,40311,40313,40315,40317,40319],{"class":111,"line":33820},[109,40304,32412],{"class":126},[109,40306,130],{"class":122},[109,40308,31626],{"class":126},[109,40310,32419],{"class":278},[109,40312,3080],{"class":122},[109,40314,32424],{"class":126},[109,40316,3077],{"class":122},[109,40318,31651],{"class":278},[109,40320,1330],{"class":126},[109,40322,40323,40325],{"class":111,"line":33826},[109,40324,32474],{"class":133},[109,40326,31660],{"class":126},[109,40328,40329,40331,40333],{"class":111,"line":33832},[109,40330,32464],{"class":126},[109,40332,130],{"class":122},[109,40334,40335],{"class":126},"VGG16().to(device)\n",[109,40337,40338,40340,40342,40344,40346,40348,40350,40352],{"class":111,"line":33843},[109,40339,32474],{"class":133},[109,40341,32477],{"class":126},[109,40343,1755],{"class":133},[109,40345,1914],{"class":126},[109,40347,32676],{"class":133},[109,40349,1914],{"class":126},[109,40351,32676],{"class":133},[109,40353,32490],{"class":126},[765,40355,40356],{"start":119},[30,40357,40358],{},"训练代码",[19,40360,40361],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40363,40364],{},"解决方式:",[19,40366,40367],{},"①权重初始化",[99,40369,40371],{"className":31553,"code":40370,"language":31555,"meta":104,"style":104},"# 权重初始化,保证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",[106,40372,40373,40378,40383,40395,40400,40408,40413,40426,40431,40445,40450,40459,40464,40473,40478,40483,40496,40501,40515],{"__ignoreMap":104},[109,40374,40375],{"class":111,"line":112},[109,40376,40377],{"class":115},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[109,40379,40380],{"class":111,"line":119},[109,40381,40382],{"class":115},"# 循环遍历模型\n",[109,40384,40385,40387,40389,40391,40393],{"class":111,"line":140},[109,40386,4372],{"class":122},[109,40388,40043],{"class":126},[109,40390,27218],{"class":122},[109,40392,40048],{"class":133},[109,40394,40051],{"class":126},[109,40396,40397],{"class":111,"line":154},[109,40398,40399],{"class":115},"    # print(m)\n",[109,40401,40402,40404,40406],{"class":111,"line":161},[109,40403,4446],{"class":122},[109,40405,40063],{"class":133},[109,40407,40066],{"class":126},[109,40409,40410],{"class":111,"line":167},[109,40411,40412],{"class":115},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[109,40414,40415,40418,40420,40422,40424],{"class":111,"line":185},[109,40416,40417],{"class":126},"        nn.init.kaiming_normal_(m.weight,",[109,40419,40079],{"class":6553},[109,40421,130],{"class":122},[109,40423,40084],{"class":278},[109,40425,1330],{"class":126},[109,40427,40428],{"class":111,"line":201},[109,40429,40430],{"class":115},"        # 判断b参数是否存在\n",[109,40432,40433,40435,40437,40439,40441,40443],{"class":111,"line":206},[109,40434,3852],{"class":122},[109,40436,40099],{"class":126},[109,40438,40102],{"class":122},[109,40440,40105],{"class":122},[109,40442,40108],{"class":133},[109,40444,5082],{"class":126},[109,40446,40447],{"class":111,"line":218},[109,40448,40449],{"class":115},"            # 如果参数不存在的化初始化b=0\n",[109,40451,40452,40455,40457],{"class":111,"line":223},[109,40453,40454],{"class":126},"            nn.init.constant_(m.bias,",[109,40456,1314],{"class":133},[109,40458,1330],{"class":126},[109,40460,40461],{"class":111,"line":229},[109,40462,40463],{"class":115},"    # 全连接层初始化\n",[109,40465,40466,40469,40471],{"class":111,"line":244},[109,40467,40468],{"class":122},"    elif",[109,40470,40063],{"class":133},[109,40472,40139],{"class":126},[109,40474,40475],{"class":111,"line":258},[109,40476,40477],{"class":115},"        # 这个初始化方法是利用的是正太分布的方式\n",[109,40479,40480],{"class":111,"line":263},[109,40481,40482],{"class":115},"        # 均值为0，方差为0.01\n",[109,40484,40485,40488,40490,40492,40494],{"class":111,"line":269},[109,40486,40487],{"class":126},"        nn.init.normal_(m.weight,",[109,40489,1314],{"class":133},[109,40491,1914],{"class":126},[109,40493,40161],{"class":133},[109,40495,1330],{"class":126},[109,40497,40498],{"class":111,"line":304},[109,40499,40500],{"class":115},"        # 初始化b参数\n",[109,40502,40503,40505,40507,40509,40511,40513],{"class":111,"line":331},[109,40504,3852],{"class":122},[109,40506,40099],{"class":126},[109,40508,40102],{"class":122},[109,40510,40105],{"class":122},[109,40512,40108],{"class":133},[109,40514,5082],{"class":126},[109,40516,40517,40519,40521],{"class":111,"line":336},[109,40518,40454],{"class":126},[109,40520,1314],{"class":133},[109,40522,1330],{"class":126},[19,40524,40525],{},"②尽可能地增加批次",[19,40527,40528],{},"训练完整代码：",[99,40530,40531],{"className":31553,"code":39074,"language":31555,"meta":104,"style":104},[106,40532,40533,40539,40549,40559,40569,40573,40589,40597,40615,40619,40623,40633,40669,40673,40709,40713,40741,40745,40749,40759,40795,40799,40835,40839,40867,40871,40875,40885,40921,40925,40961,40965,41001,41005,41033,41037,41041,41051,41087,41091,41127,41131,41167,41171,41199,41203,41207,41217,41253,41257,41293,41297,41333,41337,41365,41369,41373,41383,41387,41391,41395,41415,41419,41431,41435,41447,41451,41455,41459,41463,41475,41479,41487,41491,41503,41507,41521,41525,41533,41537,41545,41549,41553,41565,41569,41583,41591,41595,41599,41607,41617,41627,41637,41647,41657,41667,41673,41677,41681,41693,41713,41719,41727],{"__ignoreMap":104},[109,40534,40535,40537],{"class":111,"line":112},[109,40536,31567],{"class":122},[109,40538,31570],{"class":126},[109,40540,40541,40543,40545,40547],{"class":111,"line":119},[109,40542,31912],{"class":122},[109,40544,39089],{"class":126},[109,40546,31567],{"class":122},[109,40548,39094],{"class":126},[109,40550,40551,40553,40555,40557],{"class":111,"line":140},[109,40552,31912],{"class":122},[109,40554,31915],{"class":126},[109,40556,31567],{"class":122},[109,40558,31920],{"class":126},[109,40560,40561,40563,40565,40567],{"class":111,"line":154},[109,40562,31912],{"class":122},[109,40564,31932],{"class":126},[109,40566,31567],{"class":122},[109,40568,31937],{"class":126},[109,40570,40571],{"class":111,"line":161},[109,40572,158],{"emptyLinePlaceholder":157},[109,40574,40575,40577,40579,40581,40583,40585,40587],{"class":111,"line":167},[109,40576,15867],{"class":122},[109,40578,39125],{"class":211},[109,40580,714],{"class":126},[109,40582,31953],{"class":211},[109,40584,2090],{"class":126},[109,40586,31958],{"class":211},[109,40588,31961],{"class":126},[109,40590,40591,40593,40595],{"class":111,"line":185},[109,40592,31976],{"class":122},[109,40594,31979],{"class":133},[109,40596,31982],{"class":126},[109,40598,40599,40601,40603,40605,40607,40609,40611,40613],{"class":111,"line":201},[109,40600,31992],{"class":133},[109,40602,714],{"class":126},[109,40604,39152],{"class":133},[109,40606,13608],{"class":126},[109,40608,31998],{"class":133},[109,40610,32001],{"class":126},[109,40612,32004],{"class":133},[109,40614,803],{"class":126},[109,40616,40617],{"class":111,"line":206},[109,40618,39167],{"class":115},[109,40620,40621],{"class":111,"line":218},[109,40622,39172],{"class":115},[109,40624,40625,40627,40629,40631],{"class":111,"line":223},[109,40626,32020],{"class":133},[109,40628,39179],{"class":126},[109,40630,130],{"class":122},[109,40632,39184],{"class":126},[109,40634,40635,40637,40639,40641,40643,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665,40667],{"class":111,"line":229},[109,40636,39189],{"class":126},[109,40638,32031],{"class":6553},[109,40640,130],{"class":122},[109,40642,1755],{"class":133},[109,40644,1914],{"class":126},[109,40646,32040],{"class":6553},[109,40648,130],{"class":122},[109,40650,1741],{"class":133},[109,40652,1914],{"class":126},[109,40654,32049],{"class":6553},[109,40656,130],{"class":122},[109,40658,1612],{"class":133},[109,40660,1914],{"class":126},[109,40662,32058],{"class":6553},[109,40664,130],{"class":122},[109,40666,1755],{"class":133},[109,40668,39222],{"class":126},[109,40670,40671],{"class":111,"line":244},[109,40672,39227],{"class":126},[109,40674,40675,40677,40679,40681,40683,40685,40687,40689,40691,40693,40695,40697,40699,40701,40703,40705,40707],{"class":111,"line":258},[109,40676,39189],{"class":126},[109,40678,32031],{"class":6553},[109,40680,130],{"class":122},[109,40682,1741],{"class":133},[109,40684,1914],{"class":126},[109,40686,32040],{"class":6553},[109,40688,130],{"class":122},[109,40690,1741],{"class":133},[109,40692,1914],{"class":126},[109,40694,32049],{"class":6553},[109,40696,130],{"class":122},[109,40698,1612],{"class":133},[109,40700,1914],{"class":126},[109,40702,32058],{"class":6553},[109,40704,130],{"class":122},[109,40706,1755],{"class":133},[109,40708,39222],{"class":126},[109,40710,40711],{"class":111,"line":263},[109,40712,39227],{"class":126},[109,40714,40715,40717,40719,40721,40723,40725,40727,40729,40731,40733,40735,40737,40739],{"class":111,"line":269},[109,40716,39272],{"class":126},[109,40718,32049],{"class":6553},[109,40720,130],{"class":122},[109,40722,1618],{"class":133},[109,40724,1914],{"class":126},[109,40726,32104],{"class":6553},[109,40728,130],{"class":122},[109,40730,1618],{"class":133},[109,40732,1914],{"class":126},[109,40734,32058],{"class":6553},[109,40736,130],{"class":122},[109,40738,1314],{"class":133},[109,40740,1330],{"class":126},[109,40742,40743],{"class":111,"line":304},[109,40744,39301],{"class":126},[109,40746,40747],{"class":111,"line":331},[109,40748,39306],{"class":115},[109,40750,40751,40753,40755,40757],{"class":111,"line":336},[109,40752,32020],{"class":133},[109,40754,39313],{"class":126},[109,40756,130],{"class":122},[109,40758,39184],{"class":126},[109,40760,40761,40763,40765,40767,40769,40771,40773,40775,40777,40779,40781,40783,40785,40787,40789,40791,40793],{"class":111,"line":364},[109,40762,39189],{"class":126},[109,40764,32031],{"class":6553},[109,40766,130],{"class":122},[109,40768,1741],{"class":133},[109,40770,1914],{"class":126},[109,40772,32040],{"class":6553},[109,40774,130],{"class":122},[109,40776,33245],{"class":133},[109,40778,1914],{"class":126},[109,40780,32049],{"class":6553},[109,40782,130],{"class":122},[109,40784,1612],{"class":133},[109,40786,1914],{"class":126},[109,40788,32058],{"class":6553},[109,40790,130],{"class":122},[109,40792,1755],{"class":133},[109,40794,39222],{"class":126},[109,40796,40797],{"class":111,"line":391},[109,40798,39227],{"class":126},[109,40800,40801,40803,40805,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825,40827,40829,40831,40833],{"class":111,"line":396},[109,40802,39189],{"class":126},[109,40804,32031],{"class":6553},[109,40806,130],{"class":122},[109,40808,33245],{"class":133},[109,40810,1914],{"class":126},[109,40812,32040],{"class":6553},[109,40814,130],{"class":122},[109,40816,33245],{"class":133},[109,40818,1914],{"class":126},[109,40820,32049],{"class":6553},[109,40822,130],{"class":122},[109,40824,1612],{"class":133},[109,40826,1914],{"class":126},[109,40828,32058],{"class":6553},[109,40830,130],{"class":122},[109,40832,1755],{"class":133},[109,40834,39222],{"class":126},[109,40836,40837],{"class":111,"line":402},[109,40838,39227],{"class":126},[109,40840,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865],{"class":111,"line":419},[109,40842,39272],{"class":126},[109,40844,32049],{"class":6553},[109,40846,130],{"class":122},[109,40848,1618],{"class":133},[109,40850,1914],{"class":126},[109,40852,32104],{"class":6553},[109,40854,130],{"class":122},[109,40856,1618],{"class":133},[109,40858,1914],{"class":126},[109,40860,32058],{"class":6553},[109,40862,130],{"class":122},[109,40864,1314],{"class":133},[109,40866,1330],{"class":126},[109,40868,40869],{"class":111,"line":435},[109,40870,39301],{"class":126},[109,40872,40873],{"class":111,"line":440},[109,40874,39434],{"class":115},[109,40876,40877,40879,40881,40883],{"class":111,"line":467},[109,40878,32020],{"class":133},[109,40880,39441],{"class":126},[109,40882,130],{"class":122},[109,40884,39184],{"class":126},[109,40886,40887,40889,40891,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911,40913,40915,40917,40919],{"class":111,"line":494},[109,40888,39189],{"class":126},[109,40890,32031],{"class":6553},[109,40892,130],{"class":122},[109,40894,33245],{"class":133},[109,40896,1914],{"class":126},[109,40898,32040],{"class":6553},[109,40900,130],{"class":122},[109,40902,36045],{"class":133},[109,40904,1914],{"class":126},[109,40906,32049],{"class":6553},[109,40908,130],{"class":122},[109,40910,1612],{"class":133},[109,40912,1914],{"class":126},[109,40914,32058],{"class":6553},[109,40916,130],{"class":122},[109,40918,1755],{"class":133},[109,40920,39222],{"class":126},[109,40922,40923],{"class":111,"line":499},[109,40924,39227],{"class":126},[109,40926,40927,40929,40931,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951,40953,40955,40957,40959],{"class":111,"line":526},[109,40928,39189],{"class":126},[109,40930,32031],{"class":6553},[109,40932,130],{"class":122},[109,40934,36045],{"class":133},[109,40936,1914],{"class":126},[109,40938,32040],{"class":6553},[109,40940,130],{"class":122},[109,40942,36045],{"class":133},[109,40944,1914],{"class":126},[109,40946,32049],{"class":6553},[109,40948,130],{"class":122},[109,40950,1612],{"class":133},[109,40952,1914],{"class":126},[109,40954,32058],{"class":6553},[109,40956,130],{"class":122},[109,40958,1755],{"class":133},[109,40960,39222],{"class":126},[109,40962,40963],{"class":111,"line":552},[109,40964,39227],{"class":126},[109,40966,40967,40969,40971,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995,40997,40999],{"class":111,"line":557},[109,40968,39189],{"class":126},[109,40970,32031],{"class":6553},[109,40972,130],{"class":122},[109,40974,36045],{"class":133},[109,40976,1914],{"class":126},[109,40978,32040],{"class":6553},[109,40980,130],{"class":122},[109,40982,36045],{"class":133},[109,40984,1914],{"class":126},[109,40986,32049],{"class":6553},[109,40988,130],{"class":122},[109,40990,1612],{"class":133},[109,40992,1914],{"class":126},[109,40994,32058],{"class":6553},[109,40996,130],{"class":122},[109,40998,1755],{"class":133},[109,41000,39222],{"class":126},[109,41002,41003],{"class":111,"line":584},[109,41004,39227],{"class":126},[109,41006,41007,41009,41011,41013,41015,41017,41019,41021,41023,41025,41027,41029,41031],{"class":111,"line":611},[109,41008,39272],{"class":126},[109,41010,32049],{"class":6553},[109,41012,130],{"class":122},[109,41014,1618],{"class":133},[109,41016,1914],{"class":126},[109,41018,32104],{"class":6553},[109,41020,130],{"class":122},[109,41022,1618],{"class":133},[109,41024,1914],{"class":126},[109,41026,32058],{"class":6553},[109,41028,130],{"class":122},[109,41030,1314],{"class":133},[109,41032,1330],{"class":126},[109,41034,41035],{"class":111,"line":616},[109,41036,39301],{"class":126},[109,41038,41039],{"class":111,"line":633},[109,41040,39602],{"class":115},[109,41042,41043,41045,41047,41049],{"class":111,"line":649},[109,41044,32020],{"class":133},[109,41046,39609],{"class":126},[109,41048,130],{"class":122},[109,41050,39184],{"class":126},[109,41052,41053,41055,41057,41059,41061,41063,41065,41067,41069,41071,41073,41075,41077,41079,41081,41083,41085],{"class":111,"line":676},[109,41054,39189],{"class":126},[109,41056,32031],{"class":6553},[109,41058,130],{"class":122},[109,41060,36045],{"class":133},[109,41062,1914],{"class":126},[109,41064,32040],{"class":6553},[109,41066,130],{"class":122},[109,41068,39632],{"class":133},[109,41070,1914],{"class":126},[109,41072,32049],{"class":6553},[109,41074,130],{"class":122},[109,41076,1612],{"class":133},[109,41078,1914],{"class":126},[109,41080,32058],{"class":6553},[109,41082,130],{"class":122},[109,41084,1755],{"class":133},[109,41086,39222],{"class":126},[109,41088,41089],{"class":111,"line":703},[109,41090,39227],{"class":126},[109,41092,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125],{"class":111,"line":708},[109,41094,39189],{"class":126},[109,41096,32031],{"class":6553},[109,41098,130],{"class":122},[109,41100,39632],{"class":133},[109,41102,1914],{"class":126},[109,41104,32040],{"class":6553},[109,41106,130],{"class":122},[109,41108,39632],{"class":133},[109,41110,1914],{"class":126},[109,41112,32049],{"class":6553},[109,41114,130],{"class":122},[109,41116,1612],{"class":133},[109,41118,1914],{"class":126},[109,41120,32058],{"class":6553},[109,41122,130],{"class":122},[109,41124,1755],{"class":133},[109,41126,39222],{"class":126},[109,41128,41129],{"class":111,"line":723},[109,41130,39227],{"class":126},[109,41132,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161,41163,41165],{"class":111,"line":728},[109,41134,39189],{"class":126},[109,41136,32031],{"class":6553},[109,41138,130],{"class":122},[109,41140,39632],{"class":133},[109,41142,1914],{"class":126},[109,41144,32040],{"class":6553},[109,41146,130],{"class":122},[109,41148,39632],{"class":133},[109,41150,1914],{"class":126},[109,41152,32049],{"class":6553},[109,41154,130],{"class":122},[109,41156,1612],{"class":133},[109,41158,1914],{"class":126},[109,41160,32058],{"class":6553},[109,41162,130],{"class":122},[109,41164,1755],{"class":133},[109,41166,39222],{"class":126},[109,41168,41169],{"class":111,"line":739},[109,41170,39227],{"class":126},[109,41172,41173,41175,41177,41179,41181,41183,41185,41187,41189,41191,41193,41195,41197],{"class":111,"line":9352},[109,41174,39272],{"class":126},[109,41176,32049],{"class":6553},[109,41178,130],{"class":122},[109,41180,1618],{"class":133},[109,41182,1914],{"class":126},[109,41184,32104],{"class":6553},[109,41186,130],{"class":122},[109,41188,1618],{"class":133},[109,41190,1914],{"class":126},[109,41192,32058],{"class":6553},[109,41194,130],{"class":122},[109,41196,1314],{"class":133},[109,41198,1330],{"class":126},[109,41200,41201],{"class":111,"line":9364},[109,41202,39301],{"class":126},[109,41204,41205],{"class":111,"line":9376},[109,41206,39771],{"class":115},[109,41208,41209,41211,41213,41215],{"class":111,"line":11034},[109,41210,32020],{"class":133},[109,41212,39778],{"class":126},[109,41214,130],{"class":122},[109,41216,39184],{"class":126},[109,41218,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241,41243,41245,41247,41249,41251],{"class":111,"line":11059},[109,41220,39189],{"class":126},[109,41222,32031],{"class":6553},[109,41224,130],{"class":122},[109,41226,39632],{"class":133},[109,41228,1914],{"class":126},[109,41230,32040],{"class":6553},[109,41232,130],{"class":122},[109,41234,39632],{"class":133},[109,41236,1914],{"class":126},[109,41238,32049],{"class":6553},[109,41240,130],{"class":122},[109,41242,1612],{"class":133},[109,41244,1914],{"class":126},[109,41246,32058],{"class":6553},[109,41248,130],{"class":122},[109,41250,1755],{"class":133},[109,41252,39222],{"class":126},[109,41254,41255],{"class":111,"line":11082},[109,41256,39227],{"class":126},[109,41258,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279,41281,41283,41285,41287,41289,41291],{"class":111,"line":11106},[109,41260,39189],{"class":126},[109,41262,32031],{"class":6553},[109,41264,130],{"class":122},[109,41266,39632],{"class":133},[109,41268,1914],{"class":126},[109,41270,32040],{"class":6553},[109,41272,130],{"class":122},[109,41274,39632],{"class":133},[109,41276,1914],{"class":126},[109,41278,32049],{"class":6553},[109,41280,130],{"class":122},[109,41282,1612],{"class":133},[109,41284,1914],{"class":126},[109,41286,32058],{"class":6553},[109,41288,130],{"class":122},[109,41290,1755],{"class":133},[109,41292,39222],{"class":126},[109,41294,41295],{"class":111,"line":11111},[109,41296,39227],{"class":126},[109,41298,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327,41329,41331],{"class":111,"line":11116},[109,41300,39189],{"class":126},[109,41302,32031],{"class":6553},[109,41304,130],{"class":122},[109,41306,39632],{"class":133},[109,41308,1914],{"class":126},[109,41310,32040],{"class":6553},[109,41312,130],{"class":122},[109,41314,39632],{"class":133},[109,41316,1914],{"class":126},[109,41318,32049],{"class":6553},[109,41320,130],{"class":122},[109,41322,1612],{"class":133},[109,41324,1914],{"class":126},[109,41326,32058],{"class":6553},[109,41328,130],{"class":122},[109,41330,1755],{"class":133},[109,41332,39222],{"class":126},[109,41334,41335],{"class":111,"line":11121},[109,41336,39227],{"class":126},[109,41338,41339,41341,41343,41345,41347,41349,41351,41353,41355,41357,41359,41361,41363],{"class":111,"line":11130},[109,41340,39272],{"class":126},[109,41342,32049],{"class":6553},[109,41344,130],{"class":122},[109,41346,1618],{"class":133},[109,41348,1914],{"class":126},[109,41350,32104],{"class":6553},[109,41352,130],{"class":122},[109,41354,1618],{"class":133},[109,41356,1914],{"class":126},[109,41358,32058],{"class":6553},[109,41360,130],{"class":122},[109,41362,1314],{"class":133},[109,41364,1330],{"class":126},[109,41366,41367],{"class":111,"line":11135},[109,41368,39301],{"class":126},[109,41370,41371],{"class":111,"line":11141},[109,41372,39939],{"class":115},[109,41374,41375,41377,41379,41381],{"class":111,"line":11162},[109,41376,32020],{"class":133},[109,41378,39946],{"class":126},[109,41380,130],{"class":122},[109,41382,39184],{"class":126},[109,41384,41385],{"class":111,"line":11168},[109,41386,39955],{"class":115},[109,41388,41389],{"class":111,"line":11182},[109,41390,39960],{"class":115},[109,41392,41393],{"class":111,"line":11188},[109,41394,39965],{"class":126},[109,41396,41397,41399,41401,41403,41405,41407,41409,41411,41413],{"class":111,"line":11215},[109,41398,39970],{"class":126},[109,41400,1905],{"class":133},[109,41402,1988],{"class":122},[109,41404,1905],{"class":133},[109,41406,1988],{"class":122},[109,41408,39632],{"class":133},[109,41410,1914],{"class":126},[109,41412,36045],{"class":133},[109,41414,39222],{"class":126},[109,41416,41417],{"class":111,"line":11224},[109,41418,39227],{"class":126},[109,41420,41421,41423,41425,41427,41429],{"class":111,"line":11230},[109,41422,39970],{"class":126},[109,41424,36045],{"class":133},[109,41426,1914],{"class":126},[109,41428,33245],{"class":133},[109,41430,39222],{"class":126},[109,41432,41433],{"class":111,"line":11238},[109,41434,39227],{"class":126},[109,41436,41437,41439,41441,41443,41445],{"class":111,"line":11243},[109,41438,39970],{"class":126},[109,41440,33245],{"class":133},[109,41442,1914],{"class":126},[109,41444,1008],{"class":133},[109,41446,1330],{"class":126},[109,41448,41449],{"class":111,"line":17777},[109,41450,39301],{"class":126},[109,41452,41453],{"class":111,"line":17783},[109,41454,158],{"emptyLinePlaceholder":157},[109,41456,41457],{"class":111,"line":17806},[109,41458,40031],{"class":115},[109,41460,41461],{"class":111,"line":17812},[109,41462,40036],{"class":115},[109,41464,41465,41467,41469,41471,41473],{"class":111,"line":17835},[109,41466,4747],{"class":122},[109,41468,40043],{"class":126},[109,41470,27218],{"class":122},[109,41472,40048],{"class":133},[109,41474,40051],{"class":126},[109,41476,41477],{"class":111,"line":17849},[109,41478,40056],{"class":115},[109,41480,41481,41483,41485],{"class":111,"line":17869},[109,41482,5979],{"class":122},[109,41484,40063],{"class":133},[109,41486,40066],{"class":126},[109,41488,41489],{"class":111,"line":17875},[109,41490,40071],{"class":115},[109,41492,41493,41495,41497,41499,41501],{"class":111,"line":17886},[109,41494,40076],{"class":126},[109,41496,40079],{"class":6553},[109,41498,130],{"class":122},[109,41500,40084],{"class":278},[109,41502,1330],{"class":126},[109,41504,41505],{"class":111,"line":17909},[109,41506,40091],{"class":115},[109,41508,41509,41511,41513,41515,41517,41519],{"class":111,"line":17931},[109,41510,40096],{"class":122},[109,41512,40099],{"class":126},[109,41514,40102],{"class":122},[109,41516,40105],{"class":122},[109,41518,40108],{"class":133},[109,41520,5082],{"class":126},[109,41522,41523],{"class":111,"line":17936},[109,41524,40115],{"class":115},[109,41526,41527,41529,41531],{"class":111,"line":17942},[109,41528,40120],{"class":126},[109,41530,1314],{"class":133},[109,41532,1330],{"class":126},[109,41534,41535],{"class":111,"line":17956},[109,41536,40129],{"class":115},[109,41538,41539,41541,41543],{"class":111,"line":17969},[109,41540,40134],{"class":122},[109,41542,40063],{"class":133},[109,41544,40139],{"class":126},[109,41546,41547],{"class":111,"line":17974},[109,41548,40144],{"class":115},[109,41550,41551],{"class":111,"line":17988},[109,41552,40149],{"class":115},[109,41554,41555,41557,41559,41561,41563],{"class":111,"line":17993},[109,41556,40154],{"class":126},[109,41558,1314],{"class":133},[109,41560,1914],{"class":126},[109,41562,40161],{"class":133},[109,41564,1330],{"class":126},[109,41566,41567],{"class":111,"line":17999},[109,41568,40168],{"class":115},[109,41570,41571,41573,41575,41577,41579,41581],{"class":111,"line":18004},[109,41572,40096],{"class":122},[109,41574,40099],{"class":126},[109,41576,40102],{"class":122},[109,41578,40105],{"class":122},[109,41580,40108],{"class":133},[109,41582,5082],{"class":126},[109,41584,41585,41587,41589],{"class":111,"line":18018},[109,41586,40120],{"class":126},[109,41588,1314],{"class":133},[109,41590,1330],{"class":126},[109,41592,41593],{"class":111,"line":18023},[109,41594,158],{"emptyLinePlaceholder":157},[109,41596,41597],{"class":111,"line":18028},[109,41598,36340],{"class":115},[109,41600,41601,41603,41605],{"class":111,"line":18042},[109,41602,31976],{"class":122},[109,41604,32268],{"class":211},[109,41606,32271],{"class":126},[109,41608,41609,41611,41613,41615],{"class":111,"line":18054},[109,41610,32276],{"class":126},[109,41612,130],{"class":122},[109,41614,31998],{"class":133},[109,41616,40217],{"class":126},[109,41618,41619,41621,41623,41625],{"class":111,"line":18059},[109,41620,32276],{"class":126},[109,41622,130],{"class":122},[109,41624,31998],{"class":133},[109,41626,40228],{"class":126},[109,41628,41629,41631,41633,41635],{"class":111,"line":18072},[109,41630,32276],{"class":126},[109,41632,130],{"class":122},[109,41634,31998],{"class":133},[109,41636,40239],{"class":126},[109,41638,41639,41641,41643,41645],{"class":111,"line":18077},[109,41640,32276],{"class":126},[109,41642,130],{"class":122},[109,41644,31998],{"class":133},[109,41646,40250],{"class":126},[109,41648,41649,41651,41653,41655],{"class":111,"line":18082},[109,41650,32276],{"class":126},[109,41652,130],{"class":122},[109,41654,31998],{"class":133},[109,41656,40261],{"class":126},[109,41658,41659,41661,41663,41665],{"class":111,"line":18087},[109,41660,32276],{"class":126},[109,41662,130],{"class":122},[109,41664,31998],{"class":133},[109,41666,40272],{"class":126},[109,41668,41669,41671],{"class":111,"line":18100},[109,41670,15925],{"class":122},[109,41672,32384],{"class":126},[109,41674,41675],{"class":111,"line":18105},[109,41676,158],{"emptyLinePlaceholder":157},[109,41678,41679],{"class":111,"line":33808},[109,41680,40287],{"class":115},[109,41682,41683,41685,41687,41689,41691],{"class":111,"line":33814},[109,41684,2922],{"class":122},[109,41686,32395],{"class":133},[109,41688,4296],{"class":122},[109,41690,40298],{"class":278},[109,41692,5082],{"class":126},[109,41694,41695,41697,41699,41701,41703,41705,41707,41709,41711],{"class":111,"line":33820},[109,41696,32412],{"class":126},[109,41698,130],{"class":122},[109,41700,31626],{"class":126},[109,41702,32419],{"class":278},[109,41704,3080],{"class":122},[109,41706,32424],{"class":126},[109,41708,3077],{"class":122},[109,41710,31651],{"class":278},[109,41712,1330],{"class":126},[109,41714,41715,41717],{"class":111,"line":33826},[109,41716,32474],{"class":133},[109,41718,31660],{"class":126},[109,41720,41721,41723,41725],{"class":111,"line":33832},[109,41722,32464],{"class":126},[109,41724,130],{"class":122},[109,41726,40335],{"class":126},[109,41728,41729,41731,41733,41735,41737,41739,41741,41743],{"class":111,"line":33843},[109,41730,32474],{"class":133},[109,41732,32477],{"class":126},[109,41734,1755],{"class":133},[109,41736,1914],{"class":126},[109,41738,32676],{"class":133},[109,41740,1914],{"class":126},[109,41742,32676],{"class":133},[109,41744,32490],{"class":126},[765,41746,41747],{"start":140},[30,41748,41749],{},"测试代码",[99,41751,41753],{"className":31553,"code":41752,"language":31555,"meta":104,"style":104},"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",[106,41754,41755,41761,41771,41781,41785,41795,41806,41810,41814,41818,41826,41842,41852,41868,41878,41892,41896,41906,41916,41926,41932,41936,41940,41948,41952,41968,41976,41980,41984,41992,42000,42004,42008,42012,42016,42022,42026,42036,42044,42052,42056,42060,42064,42072,42076,42092,42096,42100,42104,42116,42120,42132,42136,42140,42152,42156,42166,42170,42174,42186,42190,42199,42203,42207,42215,42219,42227,42231,42235,42239,42243,42247,42263,42271,42275,42279,42327,42333,42337,42347,42355,42363,42367,42371,42375,42379,42387,42391,42407,42411,42419,42427],{"__ignoreMap":104},[109,41756,41757,41759],{"class":111,"line":112},[109,41758,31567],{"class":122},[109,41760,31570],{"class":126},[109,41762,41763,41765,41767,41769],{"class":111,"line":119},[109,41764,31567],{"class":122},[109,41766,32590],{"class":126},[109,41768,32558],{"class":122},[109,41770,32595],{"class":126},[109,41772,41773,41775,41777,41779],{"class":111,"line":140},[109,41774,31912],{"class":122},[109,41776,32573],{"class":126},[109,41778,31567],{"class":122},[109,41780,32578],{"class":126},[109,41782,41783],{"class":111,"line":154},[109,41784,35097],{"class":115},[109,41786,41787,41789,41791,41793],{"class":111,"line":161},[109,41788,31912],{"class":122},[109,41790,32543],{"class":126},[109,41792,31567],{"class":122},[109,41794,32548],{"class":126},[109,41796,41797,41799,41801,41803],{"class":111,"line":167},[109,41798,31912],{"class":122},[109,41800,33089],{"class":126},[109,41802,31567],{"class":122},[109,41804,41805],{"class":133}," VGG16\n",[109,41807,41808],{"class":111,"line":185},[109,41809,158],{"emptyLinePlaceholder":157},[109,41811,41812],{"class":111,"line":201},[109,41813,158],{"emptyLinePlaceholder":157},[109,41815,41816],{"class":111,"line":206},[109,41817,35126],{"class":115},[109,41819,41820,41822,41824],{"class":111,"line":218},[109,41821,33122],{"class":122},[109,41823,35133],{"class":211},[109,41825,33128],{"class":126},[109,41827,41828,41830,41832,41834,41836,41838,41840],{"class":111,"line":223},[109,41829,35140],{"class":126},[109,41831,130],{"class":122},[109,41833,32630],{"class":126},[109,41835,32633],{"class":6553},[109,41837,130],{"class":122},[109,41839,32638],{"class":278},[109,41841,32641],{"class":126},[109,41843,41844,41846,41848,41850],{"class":111,"line":229},[109,41845,35157],{"class":6553},[109,41847,130],{"class":122},[109,41849,35162],{"class":133},[109,41851,32641],{"class":126},[109,41853,41854,41856,41858,41860,41862,41864,41866],{"class":111,"line":244},[109,41855,35169],{"class":6553},[109,41857,130],{"class":122},[109,41859,32668],{"class":126},[109,41861,32671],{"class":6553},[109,41863,130],{"class":122},[109,41865,32676],{"class":133},[109,41867,32679],{"class":126},[109,41869,41870,41872,41874,41876],{"class":111,"line":258},[109,41871,35186],{"class":6553},[109,41873,130],{"class":122},[109,41875,32651],{"class":133},[109,41877,1330],{"class":126},[109,41879,41880,41882,41884,41886,41888,41890],{"class":111,"line":263},[109,41881,35197],{"class":126},[109,41883,130],{"class":122},[109,41885,32709],{"class":126},[109,41887,32712],{"class":6553},[109,41889,130],{"class":122},[109,41891,35208],{"class":126},[109,41893,41894],{"class":111,"line":269},[109,41895,35213],{"class":115},[109,41897,41898,41900,41902,41904],{"class":111,"line":304},[109,41899,35218],{"class":6553},[109,41901,130],{"class":122},[109,41903,1755],{"class":133},[109,41905,32641],{"class":126},[109,41907,41908,41910,41912,41914],{"class":111,"line":331},[109,41909,35229],{"class":6553},[109,41911,130],{"class":122},[109,41913,32651],{"class":133},[109,41915,32641],{"class":126},[109,41917,41918,41920,41922,41924],{"class":111,"line":336},[109,41919,35240],{"class":6553},[109,41921,130],{"class":122},[109,41923,1314],{"class":133},[109,41925,1330],{"class":126},[109,41927,41928,41930],{"class":111,"line":364},[109,41929,731],{"class":122},[109,41931,35253],{"class":126},[109,41933,41934],{"class":111,"line":391},[109,41935,158],{"emptyLinePlaceholder":157},[109,41937,41938],{"class":111,"line":396},[109,41939,35262],{"class":115},[109,41941,41942,41944,41946],{"class":111,"line":402},[109,41943,33122],{"class":122},[109,41945,35269],{"class":211},[109,41947,35272],{"class":126},[109,41949,41950],{"class":111,"line":419},[109,41951,35277],{"class":115},[109,41953,41954,41956,41958,41960,41962,41964,41966],{"class":111,"line":435},[109,41955,32412],{"class":126},[109,41957,130],{"class":122},[109,41959,32419],{"class":278},[109,41961,3080],{"class":122},[109,41963,32424],{"class":126},[109,41965,3077],{"class":122},[109,41967,35294],{"class":278},[109,41969,41970,41972,41974],{"class":111,"line":440},[109,41971,32464],{"class":126},[109,41973,130],{"class":122},[109,41975,33464],{"class":126},[109,41977,41978],{"class":111,"line":467},[109,41979,158],{"emptyLinePlaceholder":157},[109,41981,41982],{"class":111,"line":494},[109,41983,35311],{"class":115},[109,41985,41986,41988,41990],{"class":111,"line":499},[109,41987,35316],{"class":126},[109,41989,130],{"class":122},[109,41991,33517],{"class":133},[109,41993,41994,41996,41998],{"class":111,"line":526},[109,41995,35325],{"class":126},[109,41997,130],{"class":122},[109,41999,4430],{"class":133},[109,42001,42002],{"class":111,"line":552},[109,42003,158],{"emptyLinePlaceholder":157},[109,42005,42006],{"class":111,"line":557},[109,42007,35338],{"class":115},[109,42009,42010],{"class":111,"line":584},[109,42011,35343],{"class":115},[109,42013,42014],{"class":111,"line":611},[109,42015,35348],{"class":115},[109,42017,42018,42020],{"class":111,"line":616},[109,42019,35353],{"class":122},[109,42021,34059],{"class":126},[109,42023,42024],{"class":111,"line":633},[109,42025,35360],{"class":115},[109,42027,42028,42030,42032,42034],{"class":111,"line":649},[109,42029,4747],{"class":122},[109,42031,35367],{"class":126},[109,42033,27218],{"class":122},[109,42035,35372],{"class":126},[109,42037,42038,42040,42042],{"class":111,"line":676},[109,42039,35377],{"class":126},[109,42041,130],{"class":122},[109,42043,35382],{"class":126},[109,42045,42046,42048,42050],{"class":111,"line":703},[109,42047,35387],{"class":126},[109,42049,130],{"class":122},[109,42051,35392],{"class":126},[109,42053,42054],{"class":111,"line":708},[109,42055,35397],{"class":115},[109,42057,42058],{"class":111,"line":723},[109,42059,34050],{"class":126},[109,42061,42062],{"class":111,"line":728},[109,42063,35406],{"class":115},[109,42065,42066,42068,42070],{"class":111,"line":739},[109,42067,33835],{"class":126},[109,42069,130],{"class":122},[109,42071,35415],{"class":126},[109,42073,42074],{"class":111,"line":9352},[109,42075,35420],{"class":115},[109,42077,42078,42080,42082,42084,42086,42088,42090],{"class":111,"line":9364},[109,42079,33852],{"class":126},[109,42081,130],{"class":122},[109,42083,33857],{"class":126},[109,42085,33860],{"class":6553},[109,42087,130],{"class":122},[109,42089,1755],{"class":133},[109,42091,1330],{"class":126},[109,42093,42094],{"class":111,"line":9376},[109,42095,35441],{"class":115},[109,42097,42098],{"class":111,"line":11034},[109,42099,35446],{"class":115},[109,42101,42102],{"class":111,"line":11059},[109,42103,35451],{"class":115},[109,42105,42106,42108,42110,42112,42114],{"class":111,"line":11082},[109,42107,35456],{"class":126},[109,42109,10795],{"class":122},[109,42111,33962],{"class":126},[109,42113,4296],{"class":122},[109,42115,35465],{"class":126},[109,42117,42118],{"class":111,"line":11106},[109,42119,35470],{"class":115},[109,42121,42122,42124,42126,42128,42130],{"class":111,"line":11111},[109,42123,35475],{"class":126},[109,42125,10795],{"class":122},[109,42127,35480],{"class":126},[109,42129,1314],{"class":133},[109,42131,1330],{"class":126},[109,42133,42134],{"class":111,"line":11116},[109,42135,158],{"emptyLinePlaceholder":157},[109,42137,42138],{"class":111,"line":11121},[109,42139,35493],{"class":115},[109,42141,42142,42144,42146,42148,42150],{"class":111,"line":11130},[109,42143,35498],{"class":126},[109,42145,130],{"class":122},[109,42147,35503],{"class":126},[109,42149,2116],{"class":122},[109,42151,35508],{"class":126},[109,42153,42154],{"class":111,"line":11135},[109,42155,35513],{"class":115},[109,42157,42158,42160,42162,42164],{"class":111,"line":11141},[109,42159,33626],{"class":133},[109,42161,714],{"class":126},[109,42163,35522],{"class":278},[109,42165,35525],{"class":126},[109,42167,42168],{"class":111,"line":11162},[109,42169,158],{"emptyLinePlaceholder":157},[109,42171,42172],{"class":111,"line":11168},[109,42173,35534],{"class":115},[109,42175,42176,42178,42180,42182,42184],{"class":111,"line":11182},[109,42177,2922],{"class":122},[109,42179,32395],{"class":133},[109,42181,4296],{"class":122},[109,42183,32400],{"class":278},[109,42185,5082],{"class":126},[109,42187,42188],{"class":111,"line":11188},[109,42189,35551],{"class":115},[109,42191,42192,42194,42196],{"class":111,"line":11215},[109,42193,32464],{"class":126},[109,42195,130],{"class":122},[109,42197,42198],{"class":126},"VGG16()\n",[109,42200,42201],{"class":111,"line":11224},[109,42202,35564],{"class":115},[109,42204,42205],{"class":111,"line":11230},[109,42206,35569],{"class":115},[109,42208,42209,42211,42213],{"class":111,"line":11238},[109,42210,35574],{"class":126},[109,42212,35577],{"class":278},[109,42214,31672],{"class":126},[109,42216,42217],{"class":111,"line":11243},[109,42218,35584],{"class":115},[109,42220,42221,42223,42225],{"class":111,"line":17777},[109,42222,35197],{"class":126},[109,42224,130],{"class":122},[109,42226,35593],{"class":126},[109,42228,42229],{"class":111,"line":17783},[109,42230,35598],{"class":115},[109,42232,42233],{"class":111,"line":17806},[109,42234,35603],{"class":126},[109,42236,42237],{"class":111,"line":17812},[109,42238,158],{"emptyLinePlaceholder":157},[109,42240,42241],{"class":111,"line":17835},[109,42242,35612],{"class":115},[109,42244,42245],{"class":111,"line":17849},[109,42246,35617],{"class":115},[109,42248,42249,42251,42253,42255,42257,42259,42261],{"class":111,"line":17869},[109,42250,32412],{"class":126},[109,42252,130],{"class":122},[109,42254,32419],{"class":278},[109,42256,3080],{"class":122},[109,42258,32424],{"class":126},[109,42260,3077],{"class":122},[109,42262,35294],{"class":278},[109,42264,42265,42267,42269],{"class":111,"line":17875},[109,42266,32464],{"class":126},[109,42268,130],{"class":122},[109,42270,33464],{"class":126},[109,42272,42273],{"class":111,"line":17886},[109,42274,35646],{"class":115},[109,42276,42277],{"class":111,"line":17909},[109,42278,35651],{"class":115},[109,42280,42281,42283,42285,42287,42289,42291,42293,42295,42297,42299,42301,42303,42305,42307,42309,42311,42313,42315,42317,42319,42321,42323,42325],{"class":111,"line":17931},[109,42282,35656],{"class":126},[109,42284,130],{"class":122},[109,42286,1289],{"class":126},[109,42288,35663],{"class":278},[109,42290,1914],{"class":126},[109,42292,35668],{"class":278},[109,42294,1914],{"class":126},[109,42296,35673],{"class":278},[109,42298,1914],{"class":126},[109,42300,35678],{"class":278},[109,42302,1914],{"class":126},[109,42304,35683],{"class":278},[109,42306,1914],{"class":126},[109,42308,35688],{"class":278},[109,42310,1914],{"class":126},[109,42312,35693],{"class":278},[109,42314,1914],{"class":126},[109,42316,35698],{"class":278},[109,42318,1914],{"class":126},[109,42320,35703],{"class":278},[109,42322,1914],{"class":126},[109,42324,35708],{"class":278},[109,42326,34421],{"class":126},[109,42328,42329,42331],{"class":111,"line":17936},[109,42330,35353],{"class":122},[109,42332,34059],{"class":126},[109,42334,42335],{"class":111,"line":17942},[109,42336,35721],{"class":115},[109,42338,42339,42341,42343,42345],{"class":111,"line":17956},[109,42340,4747],{"class":122},[109,42342,35728],{"class":126},[109,42344,27218],{"class":122},[109,42346,35372],{"class":126},[109,42348,42349,42351,42353],{"class":111,"line":17969},[109,42350,33785],{"class":126},[109,42352,130],{"class":122},[109,42354,33790],{"class":126},[109,42356,42357,42359,42361],{"class":111,"line":17974},[109,42358,33800],{"class":126},[109,42360,130],{"class":122},[109,42362,33805],{"class":126},[109,42364,42365],{"class":111,"line":17988},[109,42366,158],{"emptyLinePlaceholder":157},[109,42368,42369],{"class":111,"line":17993},[109,42370,35757],{"class":115},[109,42372,42373],{"class":111,"line":17999},[109,42374,34050],{"class":126},[109,42376,42377],{"class":111,"line":18004},[109,42378,35766],{"class":115},[109,42380,42381,42383,42385],{"class":111,"line":18018},[109,42382,33835],{"class":126},[109,42384,130],{"class":122},[109,42386,33840],{"class":126},[109,42388,42389],{"class":111,"line":18023},[109,42390,35779],{"class":115},[109,42392,42393,42395,42397,42399,42401,42403,42405],{"class":111,"line":18028},[109,42394,33852],{"class":126},[109,42396,130],{"class":122},[109,42398,33857],{"class":126},[109,42400,33860],{"class":6553},[109,42402,130],{"class":122},[109,42404,1755],{"class":133},[109,42406,1330],{"class":126},[109,42408,42409],{"class":111,"line":18042},[109,42410,35800],{"class":115},[109,42412,42413,42415,42417],{"class":111,"line":18054},[109,42414,35805],{"class":126},[109,42416,130],{"class":122},[109,42418,35810],{"class":126},[109,42420,42421,42423,42425],{"class":111,"line":18059},[109,42422,35815],{"class":126},[109,42424,130],{"class":122},[109,42426,35820],{"class":126},[109,42428,42429,42431,42433,42435,42437,42439,42441,42443],{"class":111,"line":18072},[109,42430,35825],{"class":133},[109,42432,714],{"class":126},[109,42434,35830],{"class":278},[109,42436,35833],{"class":126},[109,42438,35836],{"class":278},[109,42440,1914],{"class":126},[109,42442,35841],{"class":278},[109,42444,35844],{"class":126},[51,42446,42448],{"id":42447},"_23googlenet","2.3.GoogLeNet",[23171,42450,42452],{"id":42451},"_231原理","2.3.1.原理",[765,42454,42455],{},[30,42456,42457],{},"网络结构",[19,42459,42460],{},[938,42461],{"alt":104,"src":42462},"\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,42464,42465],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42467,42468],{},[938,42469],{"alt":104,"src":42470},"\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,42472,42473],{},[938,42474],{"alt":104,"src":42475},"\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,42477,42478],{},[938,42479],{"alt":104,"src":42480},"\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",[765,42482,42483],{"start":119},[30,42484,42485],{},"1x1卷积的优点",[19,42487,42488],{},[938,42489],{"alt":104,"src":42490},"\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",[765,42492,42493],{"start":140},[30,42494,42495],{},"全局平均池化层优点",[19,42497,42498],{},[938,42499],{"alt":104,"src":42500},"\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,42502,42503],{},[938,42504],{"alt":104,"src":42505},"\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",[765,42507,42508],{"start":154},[30,42509,42510],{},"参数详细描述",[19,42512,42513],{},[938,42514],{"alt":104,"src":42515},"\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,42517,42518],{},[938,42519],{"alt":104,"src":42520},"\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,42522,42523],{},[938,42524],{"alt":104,"src":42525},"\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,42527,42528],{},[938,42529],{"alt":104,"src":42530},"\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,42532,42533],{},[938,42534],{"alt":104,"src":42535},"\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,42537,42538],{},[938,42539],{"alt":104,"src":42540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42542,42543],{},[938,42544],{"alt":104,"src":42545},"\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,42547,42548],{},[938,42549],{"alt":104,"src":42550},"\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,42552,42553],{},[938,42554],{"alt":104,"src":42555},"\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,42557,42558],{},[938,42559],{"alt":104,"src":42560},"\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,42562,42563],{},[938,42564],{"alt":104,"src":42565},"\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,42567,42568],{},[938,42569],{"alt":104,"src":42570},"\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,42572,42573],{},[938,42574],{"alt":104,"src":42575},"\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,42577,42578],{},[938,42579],{"alt":104,"src":42580},"\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,42582,42583],{},[938,42584],{"alt":104,"src":42585},"\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,42587,42588],{},[938,42589],{"alt":104,"src":42590},"\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,42592,42593],{},[938,42594],{"alt":104,"src":42595},"\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,42597,42598],{},[938,42599],{"alt":104,"src":42600},"\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,42602,42603],{},[938,42604],{"alt":104,"src":42605},"\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,42607,42608],{},[938,42609],{"alt":104,"src":42610},"\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,42612,42613],{},[938,42614],{"alt":104,"src":42615},"\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",[23171,42617,42619],{"id":42618},"_232代码实现","2.3.2.代码实现",[765,42621,42622],{},[30,42623,31886],{},[19,42625,42626],{},"根据原理一步一步搭建即可",[99,42628,42630],{"className":31553,"code":42629,"language":31555,"meta":104,"style":104},"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",[106,42631,42632,42638,42648,42658,42662,42679,42688,42703,42713,42718,42751,42756,42793,42840,42845,42881,42928,42933,42938,42973,43005,43009,43017,43033,43057,43082,43103,43108,43123,43127,43131,43136,43153,43158,43167,43182,43193,43237,43241,43269,43273,43284,43312,43316,43353,43357,43385,43389,43400,43436,43468,43496,43500,43511,43545,43577,43609,43642,43676,43704,43708,43719,43752,43784,43798,43802,43815,43819,43824,43836,43844,43866,43871,43876,43881,43886,43891,43896,43910,43918,43927,43940,43955,43964,43968,43976,43987,43998,44009,44020,44031,44037,44041,44046,44058,44078,44087],{"__ignoreMap":104},[109,42633,42634,42636],{"class":111,"line":112},[109,42635,31567],{"class":122},[109,42637,31570],{"class":126},[109,42639,42640,42642,42644,42646],{"class":111,"line":119},[109,42641,31912],{"class":122},[109,42643,31915],{"class":126},[109,42645,31567],{"class":122},[109,42647,31920],{"class":126},[109,42649,42650,42652,42654,42656],{"class":111,"line":140},[109,42651,31912],{"class":122},[109,42653,31932],{"class":126},[109,42655,31567],{"class":122},[109,42657,31937],{"class":126},[109,42659,42660],{"class":111,"line":154},[109,42661,158],{"emptyLinePlaceholder":157},[109,42663,42664,42666,42669,42671,42673,42675,42677],{"class":111,"line":161},[109,42665,15867],{"class":122},[109,42667,42668],{"class":211}," Inception",[109,42670,714],{"class":126},[109,42672,31953],{"class":211},[109,42674,2090],{"class":126},[109,42676,31958],{"class":211},[109,42678,31961],{"class":126},[109,42680,42681,42683,42685],{"class":111,"line":167},[109,42682,31976],{"class":122},[109,42684,31979],{"class":133},[109,42686,42687],{"class":126},"(self,in_channels,c1,c2,c3,c4):\n",[109,42689,42690,42692,42695,42697,42699,42701],{"class":111,"line":185},[109,42691,31992],{"class":133},[109,42693,42694],{"class":126},"(Inception,",[109,42696,31998],{"class":133},[109,42698,32001],{"class":126},[109,42700,32004],{"class":133},[109,42702,803],{"class":126},[109,42704,42705,42707,42709,42711],{"class":111,"line":201},[109,42706,32020],{"class":133},[109,42708,35946],{"class":126},[109,42710,130],{"class":122},[109,42712,35951],{"class":126},[109,42714,42715],{"class":111,"line":206},[109,42716,42717],{"class":115},"        # 路线1：定义1*1卷积\n",[109,42719,42720,42722,42725,42727,42729,42731,42733,42736,42738,42740,42743,42745,42747,42749],{"class":111,"line":218},[109,42721,32020],{"class":133},[109,42723,42724],{"class":126},".p1_1",[109,42726,130],{"class":122},[109,42728,32028],{"class":126},[109,42730,32031],{"class":6553},[109,42732,130],{"class":122},[109,42734,42735],{"class":126},"in_channels,",[109,42737,32040],{"class":6553},[109,42739,130],{"class":122},[109,42741,42742],{"class":126},"c1,",[109,42744,32049],{"class":6553},[109,42746,130],{"class":122},[109,42748,1755],{"class":133},[109,42750,1330],{"class":126},[109,42752,42753],{"class":111,"line":223},[109,42754,42755],{"class":115},"        # 路线2：定义1*1卷积和3*3\n",[109,42757,42758,42760,42763,42765,42767,42769,42771,42773,42775,42777,42780,42782,42785,42787,42789,42791],{"class":111,"line":229},[109,42759,32020],{"class":133},[109,42761,42762],{"class":126},".p2_1",[109,42764,130],{"class":122},[109,42766,32028],{"class":126},[109,42768,32031],{"class":6553},[109,42770,130],{"class":122},[109,42772,42735],{"class":126},[109,42774,32040],{"class":6553},[109,42776,130],{"class":122},[109,42778,42779],{"class":126},"c2[",[109,42781,1314],{"class":133},[109,42783,42784],{"class":126},"],",[109,42786,32049],{"class":6553},[109,42788,130],{"class":122},[109,42790,1755],{"class":133},[109,42792,1330],{"class":126},[109,42794,42795,42797,42800,42802,42804,42806,42808,42810,42812,42814,42816,42818,42820,42822,42824,42826,42828,42830,42832,42834,42836,42838],{"class":111,"line":244},[109,42796,32020],{"class":133},[109,42798,42799],{"class":126},".p2_2",[109,42801,130],{"class":122},[109,42803,32028],{"class":126},[109,42805,32031],{"class":6553},[109,42807,130],{"class":122},[109,42809,42779],{"class":126},[109,42811,1314],{"class":133},[109,42813,42784],{"class":126},[109,42815,32040],{"class":6553},[109,42817,130],{"class":122},[109,42819,42779],{"class":126},[109,42821,1755],{"class":133},[109,42823,42784],{"class":126},[109,42825,32049],{"class":6553},[109,42827,130],{"class":122},[109,42829,1612],{"class":133},[109,42831,1914],{"class":126},[109,42833,32058],{"class":6553},[109,42835,130],{"class":122},[109,42837,1755],{"class":133},[109,42839,1330],{"class":126},[109,42841,42842],{"class":111,"line":258},[109,42843,42844],{"class":115},"        # 路线3：定义1*1卷积和5*5\n",[109,42846,42847,42849,42852,42854,42856,42858,42860,42862,42864,42866,42869,42871,42873,42875,42877,42879],{"class":111,"line":263},[109,42848,32020],{"class":133},[109,42850,42851],{"class":126},".p3_1",[109,42853,130],{"class":122},[109,42855,32028],{"class":126},[109,42857,32031],{"class":6553},[109,42859,130],{"class":122},[109,42861,42735],{"class":126},[109,42863,32040],{"class":6553},[109,42865,130],{"class":122},[109,42867,42868],{"class":126},"c3[",[109,42870,1314],{"class":133},[109,42872,42784],{"class":126},[109,42874,32049],{"class":6553},[109,42876,130],{"class":122},[109,42878,1755],{"class":133},[109,42880,1330],{"class":126},[109,42882,42883,42885,42888,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908,42910,42912,42914,42916,42918,42920,42922,42924,42926],{"class":111,"line":269},[109,42884,32020],{"class":133},[109,42886,42887],{"class":126},".p3_2",[109,42889,130],{"class":122},[109,42891,32028],{"class":126},[109,42893,32031],{"class":6553},[109,42895,130],{"class":122},[109,42897,42868],{"class":126},[109,42899,1314],{"class":133},[109,42901,42784],{"class":126},[109,42903,32040],{"class":6553},[109,42905,130],{"class":122},[109,42907,42868],{"class":126},[109,42909,1755],{"class":133},[109,42911,42784],{"class":126},[109,42913,32049],{"class":6553},[109,42915,130],{"class":122},[109,42917,1856],{"class":133},[109,42919,1914],{"class":126},[109,42921,32058],{"class":6553},[109,42923,130],{"class":122},[109,42925,1618],{"class":133},[109,42927,1330],{"class":126},[109,42929,42930],{"class":111,"line":304},[109,42931,42932],{"class":115},"        # 路线4：定义3*3最大池化和1*1卷积\n",[109,42934,42935],{"class":111,"line":331},[109,42936,42937],{"class":115},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[109,42939,42940,42942,42945,42947,42949,42951,42953,42955,42957,42959,42961,42963,42965,42967,42969,42971],{"class":111,"line":336},[109,42941,32020],{"class":133},[109,42943,42944],{"class":126},".p4_1",[109,42946,130],{"class":122},[109,42948,36004],{"class":126},[109,42950,32049],{"class":6553},[109,42952,130],{"class":122},[109,42954,1612],{"class":133},[109,42956,1914],{"class":126},[109,42958,32104],{"class":6553},[109,42960,130],{"class":122},[109,42962,1755],{"class":133},[109,42964,1914],{"class":126},[109,42966,32058],{"class":6553},[109,42968,130],{"class":122},[109,42970,1755],{"class":133},[109,42972,1330],{"class":126},[109,42974,42975,42977,42980,42982,42984,42986,42988,42990,42992,42994,42997,42999,43001,43003],{"class":111,"line":364},[109,42976,32020],{"class":133},[109,42978,42979],{"class":126},".p4_2",[109,42981,130],{"class":122},[109,42983,32028],{"class":126},[109,42985,32031],{"class":6553},[109,42987,130],{"class":122},[109,42989,42735],{"class":126},[109,42991,32040],{"class":6553},[109,42993,130],{"class":122},[109,42995,42996],{"class":126},"c4,",[109,42998,32049],{"class":6553},[109,43000,130],{"class":122},[109,43002,1755],{"class":133},[109,43004,1330],{"class":126},[109,43006,43007],{"class":111,"line":391},[109,43008,158],{"emptyLinePlaceholder":157},[109,43010,43011,43013,43015],{"class":111,"line":396},[109,43012,31976],{"class":122},[109,43014,32268],{"class":211},[109,43016,32271],{"class":126},[109,43018,43019,43022,43024,43026,43028,43030],{"class":111,"line":402},[109,43020,43021],{"class":126},"        p1",[109,43023,130],{"class":122},[109,43025,31998],{"class":133},[109,43027,36359],{"class":126},[109,43029,31998],{"class":133},[109,43031,43032],{"class":126},".p1_1(x))\n",[109,43034,43035,43037,43039,43041,43043,43045,43048,43050,43052,43054],{"class":111,"line":419},[109,43036,8411],{"class":126},[109,43038,130],{"class":122},[109,43040,31998],{"class":133},[109,43042,36359],{"class":126},[109,43044,31998],{"class":133},[109,43046,43047],{"class":126},".p2_2(",[109,43049,31998],{"class":133},[109,43051,36359],{"class":126},[109,43053,31998],{"class":133},[109,43055,43056],{"class":126},".p2_1(x))))\n",[109,43058,43059,43062,43064,43066,43068,43070,43073,43075,43077,43079],{"class":111,"line":435},[109,43060,43061],{"class":126},"        p3",[109,43063,130],{"class":122},[109,43065,31998],{"class":133},[109,43067,36359],{"class":126},[109,43069,31998],{"class":133},[109,43071,43072],{"class":126},".p3_2(",[109,43074,31998],{"class":133},[109,43076,36359],{"class":126},[109,43078,31998],{"class":133},[109,43080,43081],{"class":126},".p3_1(x))))\n",[109,43083,43084,43087,43089,43091,43093,43095,43098,43100],{"class":111,"line":440},[109,43085,43086],{"class":126},"        p4",[109,43088,130],{"class":122},[109,43090,31998],{"class":133},[109,43092,36359],{"class":126},[109,43094,31998],{"class":133},[109,43096,43097],{"class":126},".p4_2(",[109,43099,31998],{"class":133},[109,43101,43102],{"class":126},".p4_1(x)))\n",[109,43104,43105],{"class":111,"line":467},[109,43106,43107],{"class":115},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[109,43109,43110,43112,43115,43117,43119,43121],{"class":111,"line":494},[109,43111,15925],{"class":122},[109,43113,43114],{"class":126}," torch.cat((p1,p2,p3,p4),",[109,43116,33860],{"class":6553},[109,43118,130],{"class":122},[109,43120,1755],{"class":133},[109,43122,1330],{"class":126},[109,43124,43125],{"class":111,"line":499},[109,43126,158],{"emptyLinePlaceholder":157},[109,43128,43129],{"class":111,"line":526},[109,43130,158],{"emptyLinePlaceholder":157},[109,43132,43133],{"class":111,"line":552},[109,43134,43135],{"class":115},"# 搭建GoogLeNet网络\n",[109,43137,43138,43140,43143,43145,43147,43149,43151],{"class":111,"line":557},[109,43139,15867],{"class":122},[109,43141,43142],{"class":211}," GoogLeNet",[109,43144,714],{"class":126},[109,43146,31953],{"class":211},[109,43148,2090],{"class":126},[109,43150,31958],{"class":211},[109,43152,31961],{"class":126},[109,43154,43155],{"class":111,"line":584},[109,43156,43157],{"class":115},"    # 必须把Inception导入到里边\n",[109,43159,43160,43162,43164],{"class":111,"line":611},[109,43161,31976],{"class":122},[109,43163,31979],{"class":133},[109,43165,43166],{"class":126},"(self,Inception):\n",[109,43168,43169,43171,43174,43176,43178,43180],{"class":111,"line":616},[109,43170,31992],{"class":133},[109,43172,43173],{"class":126},"(GoogLeNet,",[109,43175,31998],{"class":133},[109,43177,32001],{"class":126},[109,43179,32004],{"class":133},[109,43181,803],{"class":126},[109,43183,43184,43186,43189,43191],{"class":111,"line":633},[109,43185,32020],{"class":133},[109,43187,43188],{"class":126},".b1",[109,43190,130],{"class":122},[109,43192,39184],{"class":126},[109,43194,43195,43197,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217,43219,43221,43223,43225,43227,43229,43231,43233,43235],{"class":111,"line":649},[109,43196,39189],{"class":126},[109,43198,32031],{"class":6553},[109,43200,130],{"class":122},[109,43202,1755],{"class":133},[109,43204,1914],{"class":126},[109,43206,32040],{"class":6553},[109,43208,130],{"class":122},[109,43210,1741],{"class":133},[109,43212,1914],{"class":126},[109,43214,32049],{"class":6553},[109,43216,130],{"class":122},[109,43218,1905],{"class":133},[109,43220,1914],{"class":126},[109,43222,32104],{"class":6553},[109,43224,130],{"class":122},[109,43226,1618],{"class":133},[109,43228,1914],{"class":126},[109,43230,32058],{"class":6553},[109,43232,130],{"class":122},[109,43234,1612],{"class":133},[109,43236,39222],{"class":126},[109,43238,43239],{"class":111,"line":676},[109,43240,39227],{"class":126},[109,43242,43243,43245,43247,43249,43251,43253,43255,43257,43259,43261,43263,43265,43267],{"class":111,"line":703},[109,43244,39272],{"class":126},[109,43246,32049],{"class":6553},[109,43248,130],{"class":122},[109,43250,1612],{"class":133},[109,43252,1914],{"class":126},[109,43254,32104],{"class":6553},[109,43256,130],{"class":122},[109,43258,1618],{"class":133},[109,43260,1914],{"class":126},[109,43262,32058],{"class":6553},[109,43264,130],{"class":122},[109,43266,1755],{"class":133},[109,43268,1330],{"class":126},[109,43270,43271],{"class":111,"line":708},[109,43272,39301],{"class":126},[109,43274,43275,43277,43280,43282],{"class":111,"line":723},[109,43276,32020],{"class":133},[109,43278,43279],{"class":126},".b2",[109,43281,130],{"class":122},[109,43283,39184],{"class":126},[109,43285,43286,43288,43290,43292,43294,43296,43298,43300,43302,43304,43306,43308,43310],{"class":111,"line":728},[109,43287,39189],{"class":126},[109,43289,32031],{"class":6553},[109,43291,130],{"class":122},[109,43293,1741],{"class":133},[109,43295,1914],{"class":126},[109,43297,32040],{"class":6553},[109,43299,130],{"class":122},[109,43301,1741],{"class":133},[109,43303,1914],{"class":126},[109,43305,32049],{"class":6553},[109,43307,130],{"class":122},[109,43309,1755],{"class":133},[109,43311,39222],{"class":126},[109,43313,43314],{"class":111,"line":739},[109,43315,39227],{"class":126},[109,43317,43318,43320,43322,43324,43326,43328,43330,43332,43335,43337,43339,43341,43343,43345,43347,43349,43351],{"class":111,"line":9352},[109,43319,39189],{"class":126},[109,43321,32031],{"class":6553},[109,43323,130],{"class":122},[109,43325,1741],{"class":133},[109,43327,1914],{"class":126},[109,43329,32040],{"class":6553},[109,43331,130],{"class":122},[109,43333,43334],{"class":133},"192",[109,43336,1914],{"class":126},[109,43338,32049],{"class":6553},[109,43340,130],{"class":122},[109,43342,1612],{"class":133},[109,43344,1914],{"class":126},[109,43346,32058],{"class":6553},[109,43348,130],{"class":122},[109,43350,1755],{"class":133},[109,43352,39222],{"class":126},[109,43354,43355],{"class":111,"line":9364},[109,43356,39227],{"class":126},[109,43358,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383],{"class":111,"line":9376},[109,43360,39272],{"class":126},[109,43362,32049],{"class":6553},[109,43364,130],{"class":122},[109,43366,1612],{"class":133},[109,43368,1914],{"class":126},[109,43370,32104],{"class":6553},[109,43372,130],{"class":122},[109,43374,1618],{"class":133},[109,43376,1914],{"class":126},[109,43378,32058],{"class":6553},[109,43380,130],{"class":122},[109,43382,1755],{"class":133},[109,43384,1330],{"class":126},[109,43386,43387],{"class":111,"line":11034},[109,43388,39301],{"class":126},[109,43390,43391,43393,43396,43398],{"class":111,"line":11059},[109,43392,32020],{"class":133},[109,43394,43395],{"class":126},".b3",[109,43397,130],{"class":122},[109,43399,39184],{"class":126},[109,43401,43402,43405,43407,43409,43411,43414,43416,43418,43420,43423,43425,43427,43429,43432,43434],{"class":111,"line":11082},[109,43403,43404],{"class":126},"            Inception(",[109,43406,43334],{"class":133},[109,43408,1914],{"class":126},[109,43410,1741],{"class":133},[109,43412,43413],{"class":126},",(",[109,43415,1747],{"class":133},[109,43417,1914],{"class":126},[109,43419,33245],{"class":133},[109,43421,43422],{"class":126},"),(",[109,43424,2133],{"class":133},[109,43426,1914],{"class":126},[109,43428,1735],{"class":133},[109,43430,43431],{"class":126},"),",[109,43433,1735],{"class":133},[109,43435,39222],{"class":126},[109,43437,43438,43440,43442,43444,43446,43448,43450,43452,43454,43456,43458,43460,43462,43464,43466],{"class":111,"line":11106},[109,43439,43404],{"class":126},[109,43441,36045],{"class":133},[109,43443,1914],{"class":126},[109,43445,33245],{"class":133},[109,43447,43413],{"class":126},[109,43449,33245],{"class":133},[109,43451,1914],{"class":126},[109,43453,43334],{"class":133},[109,43455,43422],{"class":126},[109,43457,1735],{"class":133},[109,43459,1914],{"class":126},[109,43461,1747],{"class":133},[109,43463,43431],{"class":126},[109,43465,1741],{"class":133},[109,43467,39222],{"class":126},[109,43469,43470,43472,43474,43476,43478,43480,43482,43484,43486,43488,43490,43492,43494],{"class":111,"line":11111},[109,43471,39272],{"class":126},[109,43473,32049],{"class":6553},[109,43475,130],{"class":122},[109,43477,1612],{"class":133},[109,43479,1914],{"class":126},[109,43481,32104],{"class":6553},[109,43483,130],{"class":122},[109,43485,1618],{"class":133},[109,43487,1914],{"class":126},[109,43489,32058],{"class":6553},[109,43491,130],{"class":122},[109,43493,1755],{"class":133},[109,43495,1330],{"class":126},[109,43497,43498],{"class":111,"line":11116},[109,43499,39301],{"class":126},[109,43501,43502,43504,43507,43509],{"class":111,"line":11121},[109,43503,32020],{"class":133},[109,43505,43506],{"class":126},".b4",[109,43508,130],{"class":122},[109,43510,39184],{"class":126},[109,43512,43513,43515,43518,43520,43522,43524,43526,43528,43531,43533,43535,43537,43539,43541,43543],{"class":111,"line":11130},[109,43514,43404],{"class":126},[109,43516,43517],{"class":133},"480",[109,43519,1914],{"class":126},[109,43521,43334],{"class":133},[109,43523,43413],{"class":126},[109,43525,1747],{"class":133},[109,43527,1914],{"class":126},[109,43529,43530],{"class":133},"208",[109,43532,43422],{"class":126},[109,43534,2133],{"class":133},[109,43536,1914],{"class":126},[109,43538,2139],{"class":133},[109,43540,43431],{"class":126},[109,43542,1741],{"class":133},[109,43544,39222],{"class":126},[109,43546,43547,43549,43551,43553,43555,43557,43559,43561,43563,43565,43567,43569,43571,43573,43575],{"class":111,"line":11135},[109,43548,43404],{"class":126},[109,43550,39632],{"class":133},[109,43552,1914],{"class":126},[109,43554,22221],{"class":133},[109,43556,43413],{"class":126},[109,43558,2150],{"class":133},[109,43560,1914],{"class":126},[109,43562,32676],{"class":133},[109,43564,43422],{"class":126},[109,43566,2332],{"class":133},[109,43568,1914],{"class":126},[109,43570,1741],{"class":133},[109,43572,43431],{"class":126},[109,43574,1741],{"class":133},[109,43576,39222],{"class":126},[109,43578,43579,43581,43583,43585,43587,43589,43591,43593,43595,43597,43599,43601,43603,43605,43607],{"class":111,"line":11141},[109,43580,43404],{"class":126},[109,43582,39632],{"class":133},[109,43584,1914],{"class":126},[109,43586,33245],{"class":133},[109,43588,43413],{"class":126},[109,43590,33245],{"class":133},[109,43592,1914],{"class":126},[109,43594,36045],{"class":133},[109,43596,43422],{"class":126},[109,43598,2332],{"class":133},[109,43600,1914],{"class":126},[109,43602,1741],{"class":133},[109,43604,43431],{"class":126},[109,43606,1741],{"class":133},[109,43608,39222],{"class":126},[109,43610,43611,43613,43615,43617,43619,43621,43623,43625,43628,43630,43632,43634,43636,43638,43640],{"class":111,"line":11162},[109,43612,43404],{"class":126},[109,43614,39632],{"class":133},[109,43616,1914],{"class":126},[109,43618,2150],{"class":133},[109,43620,43413],{"class":126},[109,43622,33245],{"class":133},[109,43624,1914],{"class":126},[109,43626,43627],{"class":133},"288",[109,43629,43422],{"class":126},[109,43631,1735],{"class":133},[109,43633,1914],{"class":126},[109,43635,1741],{"class":133},[109,43637,43431],{"class":126},[109,43639,1741],{"class":133},[109,43641,39222],{"class":126},[109,43643,43644,43646,43649,43651,43653,43655,43657,43659,43662,43664,43666,43668,43670,43672,43674],{"class":111,"line":11168},[109,43645,43404],{"class":126},[109,43647,43648],{"class":133},"528",[109,43650,1914],{"class":126},[109,43652,36045],{"class":133},[109,43654,43413],{"class":126},[109,43656,22221],{"class":133},[109,43658,1914],{"class":126},[109,43660,43661],{"class":133},"320",[109,43663,43422],{"class":126},[109,43665,1735],{"class":133},[109,43667,1914],{"class":126},[109,43669,33245],{"class":133},[109,43671,43431],{"class":126},[109,43673,33245],{"class":133},[109,43675,39222],{"class":126},[109,43677,43678,43680,43682,43684,43686,43688,43690,43692,43694,43696,43698,43700,43702],{"class":111,"line":11182},[109,43679,39272],{"class":126},[109,43681,32049],{"class":6553},[109,43683,130],{"class":122},[109,43685,1612],{"class":133},[109,43687,1914],{"class":126},[109,43689,32104],{"class":6553},[109,43691,130],{"class":122},[109,43693,1618],{"class":133},[109,43695,1914],{"class":126},[109,43697,32058],{"class":6553},[109,43699,130],{"class":122},[109,43701,1755],{"class":133},[109,43703,1330],{"class":126},[109,43705,43706],{"class":111,"line":11188},[109,43707,39301],{"class":126},[109,43709,43710,43712,43715,43717],{"class":111,"line":11215},[109,43711,32020],{"class":133},[109,43713,43714],{"class":126},".b5",[109,43716,130],{"class":122},[109,43718,39184],{"class":126},[109,43720,43721,43723,43726,43728,43730,43732,43734,43736,43738,43740,43742,43744,43746,43748,43750],{"class":111,"line":11224},[109,43722,43404],{"class":126},[109,43724,43725],{"class":133},"832",[109,43727,1914],{"class":126},[109,43729,36045],{"class":133},[109,43731,43413],{"class":126},[109,43733,22221],{"class":133},[109,43735,1914],{"class":126},[109,43737,43661],{"class":133},[109,43739,43422],{"class":126},[109,43741,1735],{"class":133},[109,43743,1914],{"class":126},[109,43745,33245],{"class":133},[109,43747,43431],{"class":126},[109,43749,33245],{"class":133},[109,43751,39222],{"class":126},[109,43753,43754,43756,43758,43760,43762,43764,43766,43768,43770,43772,43774,43776,43778,43780,43782],{"class":111,"line":11230},[109,43755,43404],{"class":126},[109,43757,43725],{"class":133},[109,43759,1914],{"class":126},[109,43761,36115],{"class":133},[109,43763,43413],{"class":126},[109,43765,43334],{"class":133},[109,43767,1914],{"class":126},[109,43769,36115],{"class":133},[109,43771,43422],{"class":126},[109,43773,2139],{"class":133},[109,43775,1914],{"class":126},[109,43777,33245],{"class":133},[109,43779,43431],{"class":126},[109,43781,33245],{"class":133},[109,43783,39222],{"class":126},[109,43785,43786,43789,43791,43793,43795],{"class":111,"line":11238},[109,43787,43788],{"class":126},"            nn.AdaptiveAvgPool2d((",[109,43790,1755],{"class":133},[109,43792,1914],{"class":126},[109,43794,1755],{"class":133},[109,43796,43797],{"class":126},")),\n",[109,43799,43800],{"class":111,"line":11243},[109,43801,39965],{"class":126},[109,43803,43804,43806,43809,43811,43813],{"class":111,"line":17777},[109,43805,39970],{"class":126},[109,43807,43808],{"class":133},"1024",[109,43810,1914],{"class":126},[109,43812,1008],{"class":133},[109,43814,1330],{"class":126},[109,43816,43817],{"class":111,"line":17783},[109,43818,39301],{"class":126},[109,43820,43821],{"class":111,"line":17806},[109,43822,43823],{"class":115},"        # 对模型参数初始化\n",[109,43825,43826,43828,43830,43832,43834],{"class":111,"line":17812},[109,43827,4747],{"class":122},[109,43829,40043],{"class":126},[109,43831,27218],{"class":122},[109,43833,40048],{"class":133},[109,43835,40051],{"class":126},[109,43837,43838,43840,43842],{"class":111,"line":17835},[109,43839,5979],{"class":122},[109,43841,40063],{"class":133},[109,43843,40066],{"class":126},[109,43845,43846,43848,43851,43853,43856,43858,43860,43862,43864],{"class":111,"line":17849},[109,43847,40076],{"class":126},[109,43849,43850],{"class":6553},"mode",[109,43852,130],{"class":122},[109,43854,43855],{"class":278},"'fan_out'",[109,43857,1914],{"class":126},[109,43859,40079],{"class":6553},[109,43861,130],{"class":122},[109,43863,40084],{"class":278},[109,43865,1330],{"class":126},[109,43867,43868],{"class":111,"line":17869},[109,43869,43870],{"class":115},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[109,43872,43873],{"class":111,"line":17875},[109,43874,43875],{"class":115},"                # ② mode = 'fan_out'决定使用的fan值：\n",[109,43877,43878],{"class":111,"line":17886},[109,43879,43880],{"class":115},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[109,43882,43883],{"class":111,"line":17909},[109,43884,43885],{"class":115},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[109,43887,43888],{"class":111,"line":17931},[109,43889,43890],{"class":115},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[109,43892,43893],{"class":111,"line":17936},[109,43894,43895],{"class":115},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[109,43897,43898,43900,43902,43904,43906,43908],{"class":111,"line":17942},[109,43899,40096],{"class":122},[109,43901,40099],{"class":126},[109,43903,40102],{"class":122},[109,43905,40105],{"class":122},[109,43907,40108],{"class":133},[109,43909,5082],{"class":126},[109,43911,43912,43914,43916],{"class":111,"line":17956},[109,43913,40120],{"class":126},[109,43915,1314],{"class":133},[109,43917,1330],{"class":126},[109,43919,43920,43923,43925],{"class":111,"line":17969},[109,43921,43922],{"class":122},"                elif",[109,43924,40063],{"class":133},[109,43926,40139],{"class":126},[109,43928,43929,43932,43934,43936,43938],{"class":111,"line":17974},[109,43930,43931],{"class":126},"                    nn.init.normal_(m.weight,",[109,43933,1314],{"class":133},[109,43935,1914],{"class":126},[109,43937,40161],{"class":133},[109,43939,1330],{"class":126},[109,43941,43942,43945,43947,43949,43951,43953],{"class":111,"line":17988},[109,43943,43944],{"class":122},"                    if",[109,43946,40099],{"class":126},[109,43948,40102],{"class":122},[109,43950,40105],{"class":122},[109,43952,40108],{"class":133},[109,43954,5082],{"class":126},[109,43956,43957,43960,43962],{"class":111,"line":17993},[109,43958,43959],{"class":126},"                        nn.init.constant_(m.bias,",[109,43961,1314],{"class":133},[109,43963,1330],{"class":126},[109,43965,43966],{"class":111,"line":17999},[109,43967,36340],{"class":115},[109,43969,43970,43972,43974],{"class":111,"line":18004},[109,43971,31976],{"class":122},[109,43973,32268],{"class":211},[109,43975,32271],{"class":126},[109,43977,43978,43980,43982,43984],{"class":111,"line":18018},[109,43979,32276],{"class":126},[109,43981,130],{"class":122},[109,43983,31998],{"class":133},[109,43985,43986],{"class":126},".b1(x)\n",[109,43988,43989,43991,43993,43995],{"class":111,"line":18023},[109,43990,32276],{"class":126},[109,43992,130],{"class":122},[109,43994,31998],{"class":133},[109,43996,43997],{"class":126},".b2(x)\n",[109,43999,44000,44002,44004,44006],{"class":111,"line":18028},[109,44001,32276],{"class":126},[109,44003,130],{"class":122},[109,44005,31998],{"class":133},[109,44007,44008],{"class":126},".b3(x)\n",[109,44010,44011,44013,44015,44017],{"class":111,"line":18042},[109,44012,32276],{"class":126},[109,44014,130],{"class":122},[109,44016,31998],{"class":133},[109,44018,44019],{"class":126},".b4(x)\n",[109,44021,44022,44024,44026,44028],{"class":111,"line":18054},[109,44023,32276],{"class":126},[109,44025,130],{"class":122},[109,44027,31998],{"class":133},[109,44029,44030],{"class":126},".b5(x)\n",[109,44032,44033,44035],{"class":111,"line":18059},[109,44034,15925],{"class":122},[109,44036,32384],{"class":126},[109,44038,44039],{"class":111,"line":18072},[109,44040,158],{"emptyLinePlaceholder":157},[109,44042,44043],{"class":111,"line":18077},[109,44044,44045],{"class":115},"# 模型展示\n",[109,44047,44048,44050,44052,44054,44056],{"class":111,"line":18082},[109,44049,2922],{"class":122},[109,44051,32395],{"class":133},[109,44053,4296],{"class":122},[109,44055,32400],{"class":278},[109,44057,5082],{"class":126},[109,44059,44060,44062,44064,44066,44068,44070,44072,44074,44076],{"class":111,"line":18087},[109,44061,32412],{"class":126},[109,44063,130],{"class":122},[109,44065,31626],{"class":126},[109,44067,32419],{"class":278},[109,44069,3080],{"class":122},[109,44071,32424],{"class":126},[109,44073,3077],{"class":122},[109,44075,31651],{"class":278},[109,44077,1330],{"class":126},[109,44079,44080,44082,44084],{"class":111,"line":18100},[109,44081,32464],{"class":126},[109,44083,130],{"class":122},[109,44085,44086],{"class":126},"GoogLeNet(Inception).to(device)\n",[109,44088,44089,44091,44093,44095,44097,44099,44101,44103],{"class":111,"line":18105},[109,44090,32474],{"class":133},[109,44092,32477],{"class":126},[109,44094,1755],{"class":133},[109,44096,1914],{"class":126},[109,44098,32676],{"class":133},[109,44100,1914],{"class":126},[109,44102,32676],{"class":133},[109,44104,32490],{"class":126},[765,44106,44107],{"start":119},[30,44108,40358],{},[99,44110,44112],{"className":31553,"code":44111,"language":31555,"meta":104,"style":104},"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",[106,44113,44114,44120,44126,44136,44142,44152,44162,44172,44182,44192,44196,44207,44217,44221,44225,44229,44237,44249,44259,44275,44285,44317,44331,44341,44351,44355,44365,44379,44389,44399,44409,44415,44419,44423,44427,44431,44435,44443,44463,44467,44471,44475,44479,44483,44499,44503,44507,44515,44519,44523,44531,44535,44539,44543,44551,44555,44559,44563,44567,44575,44579,44587,44591,44599,44603,44611,44615,44623,44627,44631,44639,44643,44647,44651,44663,44687,44701,44705,44709,44713,44721,44725,44733,44737,44745,44749,44757,44761,44769,44773,44781,44785,44797,44801,44809,44813,44821,44825,44829,44833,44837,44845,44849,44865,44869,44877,44881,44885,44889,44893,44897,44901,44905,44921,44925,44937,44941,44953,44957,44969,44973,44981,44985,44993,44997,45001,45005,45011,45015,45023,45027,45043,45047,45055,45059,45075,45087,45091,45103,45107,45111,45119,45123,45127,45135,45139,45147,45151,45159,45163,45167,45209,45251,45255,45259,45275,45279,45295,45299,45303,45311,45315,45319,45331,45369,45373,45377,45385,45389,45403,45413,45419,45425,45431,45437,45441,45445,45451,45455,45459,45467,45471,45489,45493,45497,45501,45517,45521,45525,45529,45533,45537,45557,45577,45581,45585,45589,45597,45605,45609,45625,45645,45665,45669,45673,45681,45689,45693,45697,45701,45713,45717,45727,45735,45752],{"__ignoreMap":104},[109,44115,44116,44118],{"class":111,"line":112},[109,44117,31567],{"class":122},[109,44119,32997],{"class":126},[109,44121,44122,44124],{"class":111,"line":119},[109,44123,31567],{"class":122},[109,44125,33004],{"class":126},[109,44127,44128,44130,44132,44134],{"class":111,"line":140},[109,44129,31567],{"class":122},[109,44131,33015],{"class":126},[109,44133,32558],{"class":122},[109,44135,33020],{"class":126},[109,44137,44138,44140],{"class":111,"line":154},[109,44139,31567],{"class":122},[109,44141,31570],{"class":126},[109,44143,44144,44146,44148,44150],{"class":111,"line":161},[109,44145,31912],{"class":122},[109,44147,32590],{"class":126},[109,44149,31567],{"class":122},[109,44151,33037],{"class":126},[109,44153,44154,44156,44158,44160],{"class":111,"line":167},[109,44155,31912],{"class":122},[109,44157,32543],{"class":126},[109,44159,31567],{"class":122},[109,44161,32548],{"class":126},[109,44163,44164,44166,44168,44170],{"class":111,"line":185},[109,44165,31912],{"class":122},[109,44167,32573],{"class":126},[109,44169,31567],{"class":122},[109,44171,32578],{"class":126},[109,44173,44174,44176,44178,44180],{"class":111,"line":201},[109,44175,31567],{"class":122},[109,44177,32590],{"class":126},[109,44179,32558],{"class":122},[109,44181,32595],{"class":126},[109,44183,44184,44186,44188,44190],{"class":111,"line":206},[109,44185,31567],{"class":122},[109,44187,32607],{"class":126},[109,44189,32558],{"class":122},[109,44191,32612],{"class":126},[109,44193,44194],{"class":111,"line":218},[109,44195,33082],{"class":115},[109,44197,44198,44200,44202,44204],{"class":111,"line":223},[109,44199,31912],{"class":122},[109,44201,33089],{"class":126},[109,44203,31567],{"class":122},[109,44205,44206],{"class":126}," GoogLeNet, Inception\n",[109,44208,44209,44211,44213,44215],{"class":111,"line":229},[109,44210,31912],{"class":122},[109,44212,31915],{"class":126},[109,44214,31567],{"class":122},[109,44216,31920],{"class":126},[109,44218,44219],{"class":111,"line":244},[109,44220,158],{"emptyLinePlaceholder":157},[109,44222,44223],{"class":111,"line":258},[109,44224,158],{"emptyLinePlaceholder":157},[109,44226,44227],{"class":111,"line":263},[109,44228,33117],{"class":115},[109,44230,44231,44233,44235],{"class":111,"line":269},[109,44232,33122],{"class":122},[109,44234,33125],{"class":211},[109,44236,33128],{"class":126},[109,44238,44239,44241,44243,44245,44247],{"class":111,"line":304},[109,44240,33133],{"class":126},[109,44242,130],{"class":122},[109,44244,32630],{"class":126},[109,44246,32638],{"class":278},[109,44248,32641],{"class":126},[109,44250,44251,44253,44255,44257],{"class":111,"line":331},[109,44252,33146],{"class":6553},[109,44254,130],{"class":122},[109,44256,32651],{"class":133},[109,44258,32641],{"class":126},[109,44260,44261,44263,44265,44267,44269,44271,44273],{"class":111,"line":336},[109,44262,33157],{"class":6553},[109,44264,130],{"class":122},[109,44266,32668],{"class":126},[109,44268,32671],{"class":6553},[109,44270,130],{"class":122},[109,44272,36624],{"class":133},[109,44274,32679],{"class":126},[109,44276,44277,44279,44281,44283],{"class":111,"line":364},[109,44278,33174],{"class":6553},[109,44280,130],{"class":122},[109,44282,32651],{"class":133},[109,44284,1330],{"class":126},[109,44286,44287,44289,44291,44293,44295,44297,44299,44301,44303,44305,44307,44309,44311,44313,44315],{"class":111,"line":391},[109,44288,33185],{"class":126},[109,44290,130],{"class":122},[109,44292,33190],{"class":126},[109,44294,33193],{"class":133},[109,44296,714],{"class":126},[109,44298,33198],{"class":133},[109,44300,1988],{"class":122},[109,44302,8684],{"class":133},[109,44304,33205],{"class":126},[109,44306,33193],{"class":133},[109,44308,714],{"class":126},[109,44310,33212],{"class":133},[109,44312,1988],{"class":122},[109,44314,8684],{"class":133},[109,44316,33219],{"class":126},[109,44318,44319,44321,44323,44325,44327,44329],{"class":111,"line":396},[109,44320,33224],{"class":126},[109,44322,130],{"class":122},[109,44324,33229],{"class":126},[109,44326,32712],{"class":6553},[109,44328,130],{"class":122},[109,44330,32717],{"class":126},[109,44332,44333,44335,44337,44339],{"class":111,"line":402},[109,44334,33240],{"class":6553},[109,44336,130],{"class":122},[109,44338,1735],{"class":133},[109,44340,32641],{"class":126},[109,44342,44343,44345,44347,44349],{"class":111,"line":419},[109,44344,33252],{"class":6553},[109,44346,130],{"class":122},[109,44348,32651],{"class":133},[109,44350,32641],{"class":126},[109,44352,44353],{"class":111,"line":435},[109,44354,33263],{"class":115},[109,44356,44357,44359,44361,44363],{"class":111,"line":440},[109,44358,33268],{"class":6553},[109,44360,130],{"class":122},[109,44362,1931],{"class":133},[109,44364,1330],{"class":126},[109,44366,44367,44369,44371,44373,44375,44377],{"class":111,"line":467},[109,44368,33279],{"class":126},[109,44370,130],{"class":122},[109,44372,32709],{"class":126},[109,44374,32712],{"class":6553},[109,44376,130],{"class":122},[109,44378,33290],{"class":126},[109,44380,44381,44383,44385,44387],{"class":111,"line":494},[109,44382,33295],{"class":6553},[109,44384,130],{"class":122},[109,44386,1735],{"class":133},[109,44388,32641],{"class":126},[109,44390,44391,44393,44395,44397],{"class":111,"line":499},[109,44392,33306],{"class":6553},[109,44394,130],{"class":122},[109,44396,32651],{"class":133},[109,44398,32641],{"class":126},[109,44400,44401,44403,44405,44407],{"class":111,"line":526},[109,44402,33317],{"class":6553},[109,44404,130],{"class":122},[109,44406,1931],{"class":133},[109,44408,1330],{"class":126},[109,44410,44411,44413],{"class":111,"line":552},[109,44412,731],{"class":122},[109,44414,33330],{"class":126},[109,44416,44417],{"class":111,"line":557},[109,44418,158],{"emptyLinePlaceholder":157},[109,44420,44421],{"class":111,"line":584},[109,44422,33339],{"class":115},[109,44424,44425],{"class":111,"line":611},[109,44426,33344],{"class":115},[109,44428,44429],{"class":111,"line":616},[109,44430,158],{"emptyLinePlaceholder":157},[109,44432,44433],{"class":111,"line":633},[109,44434,33353],{"class":115},[109,44436,44437,44439,44441],{"class":111,"line":649},[109,44438,33122],{"class":122},[109,44440,33360],{"class":211},[109,44442,33363],{"class":126},[109,44444,44445,44447,44449,44451,44453,44455,44457,44459,44461],{"class":111,"line":676},[109,44446,32412],{"class":126},[109,44448,130],{"class":122},[109,44450,31626],{"class":126},[109,44452,32419],{"class":278},[109,44454,3080],{"class":122},[109,44456,32424],{"class":126},[109,44458,3077],{"class":122},[109,44460,33382],{"class":278},[109,44462,1330],{"class":126},[109,44464,44465],{"class":111,"line":703},[109,44466,158],{"emptyLinePlaceholder":157},[109,44468,44469],{"class":111,"line":708},[109,44470,158],{"emptyLinePlaceholder":157},[109,44472,44473],{"class":111,"line":723},[109,44474,33397],{"class":115},[109,44476,44477],{"class":111,"line":728},[109,44478,33402],{"class":115},[109,44480,44481],{"class":111,"line":739},[109,44482,33407],{"class":115},[109,44484,44485,44487,44489,44491,44493,44495,44497],{"class":111,"line":9352},[109,44486,33412],{"class":126},[109,44488,130],{"class":122},[109,44490,33417],{"class":126},[109,44492,33420],{"class":6553},[109,44494,130],{"class":122},[109,44496,33425],{"class":133},[109,44498,1330],{"class":126},[109,44500,44501],{"class":111,"line":9364},[109,44502,158],{"emptyLinePlaceholder":157},[109,44504,44505],{"class":111,"line":9376},[109,44506,33436],{"class":115},[109,44508,44509,44511,44513],{"class":111,"line":11034},[109,44510,33441],{"class":126},[109,44512,130],{"class":122},[109,44514,33446],{"class":126},[109,44516,44517],{"class":111,"line":11059},[109,44518,158],{"emptyLinePlaceholder":157},[109,44520,44521],{"class":111,"line":11082},[109,44522,33455],{"class":115},[109,44524,44525,44527,44529],{"class":111,"line":11106},[109,44526,32464],{"class":126},[109,44528,130],{"class":122},[109,44530,33464],{"class":126},[109,44532,44533],{"class":111,"line":11111},[109,44534,33469],{"class":115},[109,44536,44537],{"class":111,"line":11116},[109,44538,33474],{"class":115},[109,44540,44541],{"class":111,"line":11121},[109,44542,33479],{"class":115},[109,44544,44545,44547,44549],{"class":111,"line":11130},[109,44546,33484],{"class":126},[109,44548,130],{"class":122},[109,44550,33489],{"class":126},[109,44552,44553],{"class":111,"line":11135},[109,44554,158],{"emptyLinePlaceholder":157},[109,44556,44557],{"class":111,"line":11141},[109,44558,158],{"emptyLinePlaceholder":157},[109,44560,44561],{"class":111,"line":11162},[109,44562,33502],{"class":115},[109,44564,44565],{"class":111,"line":11168},[109,44566,33507],{"class":115},[109,44568,44569,44571,44573],{"class":111,"line":11182},[109,44570,33512],{"class":126},[109,44572,130],{"class":122},[109,44574,33517],{"class":133},[109,44576,44577],{"class":111,"line":11188},[109,44578,33522],{"class":115},[109,44580,44581,44583,44585],{"class":111,"line":11215},[109,44582,33527],{"class":126},[109,44584,130],{"class":122},[109,44586,33532],{"class":126},[109,44588,44589],{"class":111,"line":11224},[109,44590,33537],{"class":115},[109,44592,44593,44595,44597],{"class":111,"line":11230},[109,44594,33542],{"class":126},[109,44596,130],{"class":122},[109,44598,33532],{"class":126},[109,44600,44601],{"class":111,"line":11238},[109,44602,33551],{"class":115},[109,44604,44605,44607,44609],{"class":111,"line":11243},[109,44606,33556],{"class":126},[109,44608,130],{"class":122},[109,44610,33532],{"class":126},[109,44612,44613],{"class":111,"line":17777},[109,44614,33565],{"class":115},[109,44616,44617,44619,44621],{"class":111,"line":17783},[109,44618,33570],{"class":126},[109,44620,130],{"class":122},[109,44622,33532],{"class":126},[109,44624,44625],{"class":111,"line":17806},[109,44626,158],{"emptyLinePlaceholder":157},[109,44628,44629],{"class":111,"line":17812},[109,44630,33583],{"class":115},[109,44632,44633,44635,44637],{"class":111,"line":17835},[109,44634,33588],{"class":126},[109,44636,130],{"class":122},[109,44638,33593],{"class":126},[109,44640,44641],{"class":111,"line":17849},[109,44642,158],{"emptyLinePlaceholder":157},[109,44644,44645],{"class":111,"line":17869},[109,44646,158],{"emptyLinePlaceholder":157},[109,44648,44649],{"class":111,"line":17875},[109,44650,33606],{"class":115},[109,44652,44653,44655,44657,44659,44661],{"class":111,"line":17886},[109,44654,1302],{"class":122},[109,44656,33613],{"class":126},[109,44658,27218],{"class":122},[109,44660,33618],{"class":133},[109,44662,33621],{"class":126},[109,44664,44665,44667,44669,44671,44673,44675,44677,44679,44681,44683,44685],{"class":111,"line":17909},[109,44666,33626],{"class":133},[109,44668,714],{"class":126},[109,44670,33631],{"class":278},[109,44672,33634],{"class":133},[109,44674,2116],{"class":278},[109,44676,33634],{"class":133},[109,44678,1789],{"class":278},[109,44680,33643],{"class":126},[109,44682,2064],{"class":122},[109,44684,1755],{"class":133},[109,44686,31672],{"class":126},[109,44688,44689,44691,44693,44695,44697,44699],{"class":111,"line":17931},[109,44690,33626],{"class":133},[109,44692,714],{"class":126},[109,44694,33658],{"class":278},[109,44696,1988],{"class":122},[109,44698,1008],{"class":133},[109,44700,1330],{"class":126},[109,44702,44703],{"class":111,"line":17936},[109,44704,158],{"emptyLinePlaceholder":157},[109,44706,44707],{"class":111,"line":17942},[109,44708,33673],{"class":115},[109,44710,44711],{"class":111,"line":17956},[109,44712,33678],{"class":115},[109,44714,44715,44717,44719],{"class":111,"line":17969},[109,44716,33683],{"class":126},[109,44718,130],{"class":122},[109,44720,33517],{"class":133},[109,44722,44723],{"class":111,"line":17974},[109,44724,33692],{"class":115},[109,44726,44727,44729,44731],{"class":111,"line":17988},[109,44728,33697],{"class":126},[109,44730,130],{"class":122},[109,44732,4430],{"class":133},[109,44734,44735],{"class":111,"line":17993},[109,44736,33706],{"class":115},[109,44738,44739,44741,44743],{"class":111,"line":17999},[109,44740,33711],{"class":126},[109,44742,130],{"class":122},[109,44744,33517],{"class":133},[109,44746,44747],{"class":111,"line":18004},[109,44748,33720],{"class":115},[109,44750,44751,44753,44755],{"class":111,"line":18018},[109,44752,33725],{"class":126},[109,44754,130],{"class":122},[109,44756,4430],{"class":133},[109,44758,44759],{"class":111,"line":18023},[109,44760,33734],{"class":115},[109,44762,44763,44765,44767],{"class":111,"line":18028},[109,44764,33739],{"class":126},[109,44766,130],{"class":122},[109,44768,4430],{"class":133},[109,44770,44771],{"class":111,"line":18042},[109,44772,33748],{"class":115},[109,44774,44775,44777,44779],{"class":111,"line":18054},[109,44776,33753],{"class":126},[109,44778,130],{"class":122},[109,44780,4430],{"class":133},[109,44782,44783],{"class":111,"line":18059},[109,44784,33762],{"class":115},[109,44786,44787,44789,44791,44793,44795],{"class":111,"line":18072},[109,44788,4747],{"class":122},[109,44790,32776],{"class":126},[109,44792,27218],{"class":122},[109,44794,32781],{"class":133},[109,44796,33775],{"class":126},[109,44798,44799],{"class":111,"line":18077},[109,44800,33780],{"class":115},[109,44802,44803,44805,44807],{"class":111,"line":18082},[109,44804,33785],{"class":126},[109,44806,130],{"class":122},[109,44808,33790],{"class":126},[109,44810,44811],{"class":111,"line":18087},[109,44812,33795],{"class":115},[109,44814,44815,44817,44819],{"class":111,"line":18100},[109,44816,33800],{"class":126},[109,44818,130],{"class":122},[109,44820,33805],{"class":126},[109,44822,44823],{"class":111,"line":18105},[109,44824,33811],{"class":115},[109,44826,44827],{"class":111,"line":33808},[109,44828,33817],{"class":126},[109,44830,44831],{"class":111,"line":33814},[109,44832,33823],{"class":115},[109,44834,44835],{"class":111,"line":33820},[109,44836,33829],{"class":115},[109,44838,44839,44841,44843],{"class":111,"line":33826},[109,44840,33835],{"class":126},[109,44842,130],{"class":122},[109,44844,33840],{"class":126},[109,44846,44847],{"class":111,"line":33832},[109,44848,33846],{"class":115},[109,44850,44851,44853,44855,44857,44859,44861,44863],{"class":111,"line":33843},[109,44852,33852],{"class":126},[109,44854,130],{"class":122},[109,44856,33857],{"class":126},[109,44858,33860],{"class":6553},[109,44860,130],{"class":122},[109,44862,1755],{"class":133},[109,44864,1330],{"class":126},[109,44866,44867],{"class":111,"line":33849},[109,44868,33872],{"class":115},[109,44870,44871,44873,44875],{"class":111,"line":33869},[109,44872,33878],{"class":126},[109,44874,130],{"class":122},[109,44876,33883],{"class":126},[109,44878,44879],{"class":111,"line":33875},[109,44880,33889],{"class":115},[109,44882,44883],{"class":111,"line":33886},[109,44884,33895],{"class":126},[109,44886,44887],{"class":111,"line":33892},[109,44888,33901],{"class":115},[109,44890,44891],{"class":111,"line":33898},[109,44892,33907],{"class":126},[109,44894,44895],{"class":111,"line":33904},[109,44896,33913],{"class":115},[109,44898,44899],{"class":111,"line":33910},[109,44900,33919],{"class":126},[109,44902,44903],{"class":111,"line":33916},[109,44904,33925],{"class":115},[109,44906,44907,44909,44911,44913,44915,44917,44919],{"class":111,"line":33922},[109,44908,33931],{"class":126},[109,44910,10795],{"class":122},[109,44912,33936],{"class":126},[109,44914,1988],{"class":122},[109,44916,33941],{"class":126},[109,44918,1314],{"class":133},[109,44920,1330],{"class":126},[109,44922,44923],{"class":111,"line":33928},[109,44924,33951],{"class":115},[109,44926,44927,44929,44931,44933,44935],{"class":111,"line":33948},[109,44928,33957],{"class":126},[109,44930,10795],{"class":122},[109,44932,33962],{"class":126},[109,44934,4296],{"class":122},[109,44936,33967],{"class":126},[109,44938,44939],{"class":111,"line":33954},[109,44940,33973],{"class":115},[109,44942,44943,44945,44947,44949,44951],{"class":111,"line":33970},[109,44944,33979],{"class":126},[109,44946,10795],{"class":122},[109,44948,33941],{"class":126},[109,44950,1314],{"class":133},[109,44952,1330],{"class":126},[109,44954,44955],{"class":111,"line":33976},[109,44956,33993],{"class":115},[109,44958,44959,44961,44963,44965,44967],{"class":111,"line":33990},[109,44960,4747],{"class":122},[109,44962,34001],{"class":126},[109,44964,27218],{"class":122},[109,44966,32781],{"class":133},[109,44968,34008],{"class":126},[109,44970,44971],{"class":111,"line":33996},[109,44972,34014],{"class":115},[109,44974,44975,44977,44979],{"class":111,"line":34011},[109,44976,33785],{"class":126},[109,44978,130],{"class":122},[109,44980,33790],{"class":126},[109,44982,44983],{"class":111,"line":34017},[109,44984,34029],{"class":115},[109,44986,44987,44989,44991],{"class":111,"line":34026},[109,44988,33800],{"class":126},[109,44990,130],{"class":122},[109,44992,33805],{"class":126},[109,44994,44995],{"class":111,"line":34032},[109,44996,34044],{"class":115},[109,44998,44999],{"class":111,"line":34041},[109,45000,34050],{"class":126},[109,45002,45003],{"class":111,"line":34047},[109,45004,37531],{"class":115},[109,45006,45007,45009],{"class":111,"line":34053},[109,45008,34056],{"class":122},[109,45010,34059],{"class":126},[109,45012,45013],{"class":111,"line":34062},[109,45014,34065],{"class":115},[109,45016,45017,45019,45021],{"class":111,"line":34068},[109,45018,37546],{"class":126},[109,45020,130],{"class":122},[109,45022,33840],{"class":126},[109,45024,45025],{"class":111,"line":34079},[109,45026,34082],{"class":115},[109,45028,45029,45031,45033,45035,45037,45039,45041],{"class":111,"line":34085},[109,45030,37559],{"class":126},[109,45032,130],{"class":122},[109,45034,33857],{"class":126},[109,45036,33860],{"class":6553},[109,45038,130],{"class":122},[109,45040,1755],{"class":133},[109,45042,1330],{"class":126},[109,45044,45045],{"class":111,"line":34104},[109,45046,34107],{"class":115},[109,45048,45049,45051,45053],{"class":111,"line":34110},[109,45050,37580],{"class":126},[109,45052,130],{"class":122},[109,45054,33883],{"class":126},[109,45056,45057],{"class":111,"line":34121},[109,45058,34124],{"class":115},[109,45060,45061,45063,45065,45067,45069,45071,45073],{"class":111,"line":34127},[109,45062,37593],{"class":126},[109,45064,10795],{"class":122},[109,45066,37598],{"class":126},[109,45068,1988],{"class":122},[109,45070,33941],{"class":126},[109,45072,1314],{"class":133},[109,45074,1330],{"class":126},[109,45076,45077,45079,45081,45083,45085],{"class":111,"line":34147},[109,45078,37611],{"class":126},[109,45080,10795],{"class":122},[109,45082,33962],{"class":126},[109,45084,4296],{"class":122},[109,45086,33967],{"class":126},[109,45088,45089],{"class":111,"line":34163},[109,45090,37624],{"class":115},[109,45092,45093,45095,45097,45099,45101],{"class":111,"line":34169},[109,45094,37629],{"class":126},[109,45096,10795],{"class":122},[109,45098,33941],{"class":126},[109,45100,1314],{"class":133},[109,45102,1330],{"class":126},[109,45104,45105],{"class":111,"line":34183},[109,45106,34186],{"class":115},[109,45108,45109],{"class":111,"line":34189},[109,45110,34192],{"class":115},[109,45112,45113,45115,45117],{"class":111,"line":34195},[109,45114,34198],{"class":126},[109,45116,2116],{"class":122},[109,45118,34203],{"class":126},[109,45120,45121],{"class":111,"line":34206},[109,45122,34209],{"class":115},[109,45124,45125],{"class":111,"line":34212},[109,45126,34215],{"class":115},[109,45128,45129,45131,45133],{"class":111,"line":34218},[109,45130,34221],{"class":126},[109,45132,2116],{"class":122},[109,45134,34203],{"class":126},[109,45136,45137],{"class":111,"line":34228},[109,45138,34231],{"class":115},[109,45140,45141,45143,45145],{"class":111,"line":34234},[109,45142,34237],{"class":126},[109,45144,2116],{"class":122},[109,45146,34242],{"class":126},[109,45148,45149],{"class":111,"line":34245},[109,45150,34248],{"class":115},[109,45152,45153,45155,45157],{"class":111,"line":34251},[109,45154,34254],{"class":126},[109,45156,2116],{"class":122},[109,45158,34242],{"class":126},[109,45160,45161],{"class":111,"line":34261},[109,45162,158],{"emptyLinePlaceholder":157},[109,45164,45165],{"class":111,"line":34266},[109,45166,34269],{"class":115},[109,45168,45169,45171,45173,45175,45177,45179,45181,45183,45185,45187,45189,45191,45193,45195,45197,45199,45201,45203,45205,45207],{"class":111,"line":34272},[109,45170,33626],{"class":133},[109,45172,714],{"class":126},[109,45174,4935],{"class":278},[109,45176,33634],{"class":133},[109,45178,34283],{"class":278},[109,45180,2427],{"class":133},[109,45182,34288],{"class":122},[109,45184,2476],{"class":133},[109,45186,34293],{"class":278},[109,45188,2427],{"class":133},[109,45190,34288],{"class":122},[109,45192,2476],{"class":133},[109,45194,4935],{"class":278},[109,45196,34304],{"class":126},[109,45198,2064],{"class":122},[109,45200,1755],{"class":133},[109,45202,34311],{"class":126},[109,45204,2064],{"class":122},[109,45206,1755],{"class":133},[109,45208,34318],{"class":126},[109,45210,45211,45213,45215,45217,45219,45221,45223,45225,45227,45229,45231,45233,45235,45237,45239,45241,45243,45245,45247,45249],{"class":111,"line":34321},[109,45212,33626],{"class":133},[109,45214,714],{"class":126},[109,45216,4935],{"class":278},[109,45218,33634],{"class":133},[109,45220,34332],{"class":278},[109,45222,2427],{"class":133},[109,45224,34288],{"class":122},[109,45226,2476],{"class":133},[109,45228,34341],{"class":278},[109,45230,2427],{"class":133},[109,45232,34288],{"class":122},[109,45234,2476],{"class":133},[109,45236,4935],{"class":278},[109,45238,34352],{"class":126},[109,45240,2064],{"class":122},[109,45242,1755],{"class":133},[109,45244,34359],{"class":126},[109,45246,2064],{"class":122},[109,45248,1755],{"class":133},[109,45250,34318],{"class":126},[109,45252,45253],{"class":111,"line":34368},[109,45254,158],{"emptyLinePlaceholder":157},[109,45256,45257],{"class":111,"line":34373},[109,45258,34376],{"class":115},[109,45260,45261,45263,45265,45267,45269,45271,45273],{"class":111,"line":34379},[109,45262,3852],{"class":122},[109,45264,34384],{"class":126},[109,45266,2064],{"class":122},[109,45268,1755],{"class":133},[109,45270,2470],{"class":126},[109,45272,2490],{"class":122},[109,45274,34395],{"class":126},[109,45276,45277],{"class":111,"line":34398},[109,45278,34401],{"class":115},[109,45280,45281,45283,45285,45287,45289,45291,45293],{"class":111,"line":34404},[109,45282,34407],{"class":126},[109,45284,1584],{"class":133},[109,45286,130],{"class":122},[109,45288,34414],{"class":126},[109,45290,2064],{"class":122},[109,45292,1755],{"class":133},[109,45294,34421],{"class":126},[109,45296,45297],{"class":111,"line":34424},[109,45298,34427],{"class":115},[109,45300,45301],{"class":111,"line":34430},[109,45302,34433],{"class":115},[109,45304,45305,45307,45309],{"class":111,"line":34436},[109,45306,34439],{"class":126},[109,45308,130],{"class":122},[109,45310,33489],{"class":126},[109,45312,45313],{"class":111,"line":34446},[109,45314,158],{"emptyLinePlaceholder":157},[109,45316,45317],{"class":111,"line":34451},[109,45318,34454],{"class":115},[109,45320,45321,45323,45325,45327,45329],{"class":111,"line":34457},[109,45322,34460],{"class":126},[109,45324,130],{"class":122},[109,45326,34465],{"class":126},[109,45328,2064],{"class":122},[109,45330,34470],{"class":126},[109,45332,45333,45335,45337,45339,45341,45343,45345,45347,45349,45351,45353,45355,45357,45359,45361,45363,45365,45367],{"class":111,"line":34473},[109,45334,33626],{"class":133},[109,45336,714],{"class":126},[109,45338,34480],{"class":278},[109,45340,2427],{"class":133},[109,45342,34485],{"class":122},[109,45344,2476],{"class":133},[109,45346,2076],{"class":278},[109,45348,2427],{"class":133},[109,45350,34485],{"class":122},[109,45352,2476],{"class":133},[109,45354,34498],{"class":278},[109,45356,34501],{"class":126},[109,45358,34504],{"class":122},[109,45360,2438],{"class":133},[109,45362,34509],{"class":126},[109,45364,1865],{"class":122},[109,45366,2438],{"class":133},[109,45368,31672],{"class":126},[109,45370,45371],{"class":111,"line":34518},[109,45372,37908],{"class":115},[109,45374,45375],{"class":111,"line":34524},[109,45376,37913],{"class":115},[109,45378,45379,45381,45383],{"class":111,"line":34530},[109,45380,37918],{"class":126},[109,45382,34542],{"class":278},[109,45384,1330],{"class":126},[109,45386,45387],{"class":111,"line":34536},[109,45388,34562],{"class":115},[109,45390,45391,45393,45395,45397,45399,45401],{"class":111,"line":34547},[109,45392,34568],{"class":126},[109,45394,130],{"class":122},[109,45396,34573],{"class":126},[109,45398,34576],{"class":6553},[109,45400,130],{"class":122},[109,45402,808],{"class":126},[109,45404,45405,45407,45409,45411],{"class":111,"line":34553},[109,45406,34586],{"class":278},[109,45408,2391],{"class":126},[109,45410,34591],{"class":133},[109,45412,34594],{"class":126},[109,45414,45415,45417],{"class":111,"line":34559},[109,45416,34600],{"class":278},[109,45418,34603],{"class":126},[109,45420,45421,45423],{"class":111,"line":34565},[109,45422,34609],{"class":278},[109,45424,34612],{"class":126},[109,45426,45427,45429],{"class":111,"line":34583},[109,45428,34618],{"class":278},[109,45430,34621],{"class":126},[109,45432,45433,45435],{"class":111,"line":34597},[109,45434,34627],{"class":278},[109,45436,34630],{"class":126},[109,45438,45439],{"class":111,"line":34606},[109,45440,34636],{"class":126},[109,45442,45443],{"class":111,"line":34615},[109,45444,34642],{"class":115},[109,45446,45447,45449],{"class":111,"line":34624},[109,45448,731],{"class":122},[109,45450,34650],{"class":126},[109,45452,45453],{"class":111,"line":34633},[109,45454,158],{"emptyLinePlaceholder":157},[109,45456,45457],{"class":111,"line":34639},[109,45458,34661],{"class":115},[109,45460,45461,45463,45465],{"class":111,"line":34645},[109,45462,33122],{"class":122},[109,45464,34669],{"class":211},[109,45466,34672],{"class":126},[109,45468,45469],{"class":111,"line":34653},[109,45470,34678],{"class":115},[109,45472,45473,45475,45477,45479,45481,45483,45485,45487],{"class":111,"line":34658},[109,45474,34684],{"class":126},[109,45476,32868],{"class":6553},[109,45478,130],{"class":122},[109,45480,714],{"class":126},[109,45482,2030],{"class":133},[109,45484,1914],{"class":126},[109,45486,1831],{"class":133},[109,45488,31672],{"class":126},[109,45490,45491],{"class":111,"line":34664},[109,45492,34704],{"class":115},[109,45494,45495],{"class":111,"line":34675},[109,45496,34710],{"class":115},[109,45498,45499],{"class":111,"line":34681},[109,45500,34716],{"class":115},[109,45502,45503,45505,45507,45509,45511,45513,45515],{"class":111,"line":34701},[109,45504,32902],{"class":126},[109,45506,1755],{"class":133},[109,45508,1914],{"class":126},[109,45510,1618],{"class":133},[109,45512,1914],{"class":126},[109,45514,1755],{"class":133},[109,45516,1330],{"class":126},[109,45518,45519],{"class":111,"line":34707},[109,45520,34739],{"class":115},[109,45522,45523],{"class":111,"line":34713},[109,45524,34745],{"class":115},[109,45526,45527],{"class":111,"line":34719},[109,45528,34751],{"class":115},[109,45530,45531],{"class":111,"line":34736},[109,45532,34757],{"class":115},[109,45534,45535],{"class":111,"line":34742},[109,45536,34763],{"class":115},[109,45538,45539,45541,45543,45545,45547,45549,45551,45553,45555],{"class":111,"line":34748},[109,45540,34769],{"class":126},[109,45542,34772],{"class":278},[109,45544,34775],{"class":126},[109,45546,34778],{"class":278},[109,45548,1914],{"class":126},[109,45550,34783],{"class":6553},[109,45552,130],{"class":122},[109,45554,34788],{"class":278},[109,45556,1330],{"class":126},[109,45558,45559,45561,45563,45565,45567,45569,45571,45573,45575],{"class":111,"line":34754},[109,45560,34769],{"class":126},[109,45562,34772],{"class":278},[109,45564,34800],{"class":126},[109,45566,34803],{"class":278},[109,45568,1914],{"class":126},[109,45570,34783],{"class":6553},[109,45572,130],{"class":122},[109,45574,34812],{"class":278},[109,45576,1330],{"class":126},[109,45578,45579],{"class":111,"line":34760},[109,45580,34820],{"class":115},[109,45582,45583],{"class":111,"line":34766},[109,45584,34826],{"class":126},[109,45586,45587],{"class":111,"line":34793},[109,45588,34832],{"class":115},[109,45590,45591,45593,45595],{"class":111,"line":34817},[109,45592,34838],{"class":126},[109,45594,34841],{"class":278},[109,45596,1330],{"class":126},[109,45598,45599,45601,45603],{"class":111,"line":34823},[109,45600,34849],{"class":126},[109,45602,34852],{"class":278},[109,45604,1330],{"class":126},[109,45606,45607],{"class":111,"line":34829},[109,45608,34860],{"class":115},[109,45610,45611,45613,45615,45617,45619,45621,45623],{"class":111,"line":34835},[109,45612,32902],{"class":126},[109,45614,1755],{"class":133},[109,45616,1914],{"class":126},[109,45618,1618],{"class":133},[109,45620,1914],{"class":126},[109,45622,1618],{"class":133},[109,45624,1330],{"class":126},[109,45626,45627,45629,45631,45633,45635,45637,45639,45641,45643],{"class":111,"line":34846},[109,45628,34769],{"class":126},[109,45630,34772],{"class":278},[109,45632,34887],{"class":126},[109,45634,34778],{"class":278},[109,45636,1914],{"class":126},[109,45638,34783],{"class":6553},[109,45640,130],{"class":122},[109,45642,34898],{"class":278},[109,45644,1330],{"class":126},[109,45646,45647,45649,45651,45653,45655,45657,45659,45661,45663],{"class":111,"line":34857},[109,45648,34769],{"class":126},[109,45650,34772],{"class":278},[109,45652,34910],{"class":126},[109,45654,34803],{"class":278},[109,45656,1914],{"class":126},[109,45658,34783],{"class":6553},[109,45660,130],{"class":122},[109,45662,34921],{"class":278},[109,45664,1330],{"class":126},[109,45666,45667],{"class":111,"line":34863},[109,45668,34929],{"class":115},[109,45670,45671],{"class":111,"line":34880},[109,45672,34826],{"class":126},[109,45674,45675,45677,45679],{"class":111,"line":34903},[109,45676,34838],{"class":126},[109,45678,34772],{"class":278},[109,45680,1330],{"class":126},[109,45682,45683,45685,45687],{"class":111,"line":34926},[109,45684,34849],{"class":126},[109,45686,34951],{"class":278},[109,45688,1330],{"class":126},[109,45690,45691],{"class":111,"line":34932},[109,45692,34959],{"class":126},[109,45694,45695],{"class":111,"line":34937},[109,45696,158],{"emptyLinePlaceholder":157},[109,45698,45699],{"class":111,"line":34946},[109,45700,34970],{"class":115},[109,45702,45703,45705,45707,45709,45711],{"class":111,"line":34956},[109,45704,2922],{"class":122},[109,45706,32395],{"class":133},[109,45708,4296],{"class":122},[109,45710,32400],{"class":278},[109,45712,5082],{"class":126},[109,45714,45715],{"class":111,"line":34962},[109,45716,34989],{"class":115},[109,45718,45719,45722,45724],{"class":111,"line":34967},[109,45720,45721],{"class":126},"    GoogLeNet",[109,45723,130],{"class":122},[109,45725,45726],{"class":126},"GoogLeNet(Inception)\n",[109,45728,45729,45731,45733],{"class":111,"line":34973},[109,45730,35006],{"class":126},[109,45732,130],{"class":122},[109,45734,35011],{"class":126},[109,45736,45737,45739,45741,45744,45746,45748,45750],{"class":111,"line":34986},[109,45738,34568],{"class":126},[109,45740,130],{"class":122},[109,45742,45743],{"class":126},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[109,45745,35024],{"class":6553},[109,45747,130],{"class":122},[109,45749,2481],{"class":133},[109,45751,1330],{"class":126},[109,45753,45754],{"class":111,"line":34992},[109,45755,35036],{"class":126},[765,45757,45758],{"start":140},[30,45759,41749],{},[99,45761,45763],{"className":31553,"code":45762,"language":31555,"meta":104,"style":104},"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",[106,45764,45765,45771,45781,45791,45795,45805,45816,45820,45824,45828,45836,45852,45862,45878,45888,45902,45906,45916,45926,45936,45942,45946,45950,45958,45962,45978,45986,45990,45994,46002,46010,46014,46018,46022,46026,46032,46036,46046,46054,46062,46066,46070,46074,46082,46086,46102,46106,46110,46114,46126,46130,46142,46146,46150,46162,46166,46176,46180,46184,46196,46200,46208,46212,46216,46224,46228,46236,46240,46244,46248,46252,46256,46272,46280,46284,46288,46336,46342,46346,46356,46364,46372,46376,46380,46384,46388,46396,46400,46416,46420,46428,46436],{"__ignoreMap":104},[109,45766,45767,45769],{"class":111,"line":112},[109,45768,31567],{"class":122},[109,45770,31570],{"class":126},[109,45772,45773,45775,45777,45779],{"class":111,"line":119},[109,45774,31567],{"class":122},[109,45776,32590],{"class":126},[109,45778,32558],{"class":122},[109,45780,32595],{"class":126},[109,45782,45783,45785,45787,45789],{"class":111,"line":140},[109,45784,31912],{"class":122},[109,45786,32573],{"class":126},[109,45788,31567],{"class":122},[109,45790,32578],{"class":126},[109,45792,45793],{"class":111,"line":154},[109,45794,35097],{"class":115},[109,45796,45797,45799,45801,45803],{"class":111,"line":161},[109,45798,31912],{"class":122},[109,45800,32543],{"class":126},[109,45802,31567],{"class":122},[109,45804,32548],{"class":126},[109,45806,45807,45809,45811,45813],{"class":111,"line":167},[109,45808,31912],{"class":122},[109,45810,33089],{"class":126},[109,45812,31567],{"class":122},[109,45814,45815],{"class":126}," GoogLeNet,Inception\n",[109,45817,45818],{"class":111,"line":185},[109,45819,158],{"emptyLinePlaceholder":157},[109,45821,45822],{"class":111,"line":201},[109,45823,158],{"emptyLinePlaceholder":157},[109,45825,45826],{"class":111,"line":206},[109,45827,35126],{"class":115},[109,45829,45830,45832,45834],{"class":111,"line":218},[109,45831,33122],{"class":122},[109,45833,35133],{"class":211},[109,45835,33128],{"class":126},[109,45837,45838,45840,45842,45844,45846,45848,45850],{"class":111,"line":223},[109,45839,35140],{"class":126},[109,45841,130],{"class":122},[109,45843,32630],{"class":126},[109,45845,32633],{"class":6553},[109,45847,130],{"class":122},[109,45849,32638],{"class":278},[109,45851,32641],{"class":126},[109,45853,45854,45856,45858,45860],{"class":111,"line":229},[109,45855,35157],{"class":6553},[109,45857,130],{"class":122},[109,45859,35162],{"class":133},[109,45861,32641],{"class":126},[109,45863,45864,45866,45868,45870,45872,45874,45876],{"class":111,"line":244},[109,45865,35169],{"class":6553},[109,45867,130],{"class":122},[109,45869,32668],{"class":126},[109,45871,32671],{"class":6553},[109,45873,130],{"class":122},[109,45875,36624],{"class":133},[109,45877,32679],{"class":126},[109,45879,45880,45882,45884,45886],{"class":111,"line":258},[109,45881,35186],{"class":6553},[109,45883,130],{"class":122},[109,45885,32651],{"class":133},[109,45887,1330],{"class":126},[109,45889,45890,45892,45894,45896,45898,45900],{"class":111,"line":263},[109,45891,35197],{"class":126},[109,45893,130],{"class":122},[109,45895,32709],{"class":126},[109,45897,32712],{"class":6553},[109,45899,130],{"class":122},[109,45901,35208],{"class":126},[109,45903,45904],{"class":111,"line":269},[109,45905,35213],{"class":115},[109,45907,45908,45910,45912,45914],{"class":111,"line":304},[109,45909,35218],{"class":6553},[109,45911,130],{"class":122},[109,45913,1755],{"class":133},[109,45915,32641],{"class":126},[109,45917,45918,45920,45922,45924],{"class":111,"line":331},[109,45919,35229],{"class":6553},[109,45921,130],{"class":122},[109,45923,32651],{"class":133},[109,45925,32641],{"class":126},[109,45927,45928,45930,45932,45934],{"class":111,"line":336},[109,45929,35240],{"class":6553},[109,45931,130],{"class":122},[109,45933,1314],{"class":133},[109,45935,1330],{"class":126},[109,45937,45938,45940],{"class":111,"line":364},[109,45939,731],{"class":122},[109,45941,35253],{"class":126},[109,45943,45944],{"class":111,"line":391},[109,45945,158],{"emptyLinePlaceholder":157},[109,45947,45948],{"class":111,"line":396},[109,45949,35262],{"class":115},[109,45951,45952,45954,45956],{"class":111,"line":402},[109,45953,33122],{"class":122},[109,45955,35269],{"class":211},[109,45957,35272],{"class":126},[109,45959,45960],{"class":111,"line":419},[109,45961,35277],{"class":115},[109,45963,45964,45966,45968,45970,45972,45974,45976],{"class":111,"line":435},[109,45965,32412],{"class":126},[109,45967,130],{"class":122},[109,45969,32419],{"class":278},[109,45971,3080],{"class":122},[109,45973,32424],{"class":126},[109,45975,3077],{"class":122},[109,45977,35294],{"class":278},[109,45979,45980,45982,45984],{"class":111,"line":440},[109,45981,32464],{"class":126},[109,45983,130],{"class":122},[109,45985,33464],{"class":126},[109,45987,45988],{"class":111,"line":467},[109,45989,158],{"emptyLinePlaceholder":157},[109,45991,45992],{"class":111,"line":494},[109,45993,35311],{"class":115},[109,45995,45996,45998,46000],{"class":111,"line":499},[109,45997,35316],{"class":126},[109,45999,130],{"class":122},[109,46001,33517],{"class":133},[109,46003,46004,46006,46008],{"class":111,"line":526},[109,46005,35325],{"class":126},[109,46007,130],{"class":122},[109,46009,4430],{"class":133},[109,46011,46012],{"class":111,"line":552},[109,46013,158],{"emptyLinePlaceholder":157},[109,46015,46016],{"class":111,"line":557},[109,46017,35338],{"class":115},[109,46019,46020],{"class":111,"line":584},[109,46021,35343],{"class":115},[109,46023,46024],{"class":111,"line":611},[109,46025,35348],{"class":115},[109,46027,46028,46030],{"class":111,"line":616},[109,46029,35353],{"class":122},[109,46031,34059],{"class":126},[109,46033,46034],{"class":111,"line":633},[109,46035,35360],{"class":115},[109,46037,46038,46040,46042,46044],{"class":111,"line":649},[109,46039,4747],{"class":122},[109,46041,35367],{"class":126},[109,46043,27218],{"class":122},[109,46045,35372],{"class":126},[109,46047,46048,46050,46052],{"class":111,"line":676},[109,46049,35377],{"class":126},[109,46051,130],{"class":122},[109,46053,35382],{"class":126},[109,46055,46056,46058,46060],{"class":111,"line":703},[109,46057,35387],{"class":126},[109,46059,130],{"class":122},[109,46061,35392],{"class":126},[109,46063,46064],{"class":111,"line":708},[109,46065,35397],{"class":115},[109,46067,46068],{"class":111,"line":723},[109,46069,34050],{"class":126},[109,46071,46072],{"class":111,"line":728},[109,46073,35406],{"class":115},[109,46075,46076,46078,46080],{"class":111,"line":739},[109,46077,33835],{"class":126},[109,46079,130],{"class":122},[109,46081,35415],{"class":126},[109,46083,46084],{"class":111,"line":9352},[109,46085,35420],{"class":115},[109,46087,46088,46090,46092,46094,46096,46098,46100],{"class":111,"line":9364},[109,46089,33852],{"class":126},[109,46091,130],{"class":122},[109,46093,33857],{"class":126},[109,46095,33860],{"class":6553},[109,46097,130],{"class":122},[109,46099,1755],{"class":133},[109,46101,1330],{"class":126},[109,46103,46104],{"class":111,"line":9376},[109,46105,35441],{"class":115},[109,46107,46108],{"class":111,"line":11034},[109,46109,35446],{"class":115},[109,46111,46112],{"class":111,"line":11059},[109,46113,35451],{"class":115},[109,46115,46116,46118,46120,46122,46124],{"class":111,"line":11082},[109,46117,35456],{"class":126},[109,46119,10795],{"class":122},[109,46121,33962],{"class":126},[109,46123,4296],{"class":122},[109,46125,35465],{"class":126},[109,46127,46128],{"class":111,"line":11106},[109,46129,35470],{"class":115},[109,46131,46132,46134,46136,46138,46140],{"class":111,"line":11111},[109,46133,35475],{"class":126},[109,46135,10795],{"class":122},[109,46137,35480],{"class":126},[109,46139,1314],{"class":133},[109,46141,1330],{"class":126},[109,46143,46144],{"class":111,"line":11116},[109,46145,158],{"emptyLinePlaceholder":157},[109,46147,46148],{"class":111,"line":11121},[109,46149,35493],{"class":115},[109,46151,46152,46154,46156,46158,46160],{"class":111,"line":11130},[109,46153,35498],{"class":126},[109,46155,130],{"class":122},[109,46157,35503],{"class":126},[109,46159,2116],{"class":122},[109,46161,35508],{"class":126},[109,46163,46164],{"class":111,"line":11135},[109,46165,35513],{"class":115},[109,46167,46168,46170,46172,46174],{"class":111,"line":11141},[109,46169,33626],{"class":133},[109,46171,714],{"class":126},[109,46173,35522],{"class":278},[109,46175,35525],{"class":126},[109,46177,46178],{"class":111,"line":11162},[109,46179,158],{"emptyLinePlaceholder":157},[109,46181,46182],{"class":111,"line":11168},[109,46183,35534],{"class":115},[109,46185,46186,46188,46190,46192,46194],{"class":111,"line":11182},[109,46187,2922],{"class":122},[109,46189,32395],{"class":133},[109,46191,4296],{"class":122},[109,46193,32400],{"class":278},[109,46195,5082],{"class":126},[109,46197,46198],{"class":111,"line":11188},[109,46199,35551],{"class":115},[109,46201,46202,46204,46206],{"class":111,"line":11215},[109,46203,32464],{"class":126},[109,46205,130],{"class":122},[109,46207,45726],{"class":126},[109,46209,46210],{"class":111,"line":11224},[109,46211,35564],{"class":115},[109,46213,46214],{"class":111,"line":11230},[109,46215,35569],{"class":115},[109,46217,46218,46220,46222],{"class":111,"line":11238},[109,46219,35574],{"class":126},[109,46221,35577],{"class":278},[109,46223,31672],{"class":126},[109,46225,46226],{"class":111,"line":11243},[109,46227,35584],{"class":115},[109,46229,46230,46232,46234],{"class":111,"line":17777},[109,46231,35197],{"class":126},[109,46233,130],{"class":122},[109,46235,35593],{"class":126},[109,46237,46238],{"class":111,"line":17783},[109,46239,35598],{"class":115},[109,46241,46242],{"class":111,"line":17806},[109,46243,35603],{"class":126},[109,46245,46246],{"class":111,"line":17812},[109,46247,158],{"emptyLinePlaceholder":157},[109,46249,46250],{"class":111,"line":17835},[109,46251,35612],{"class":115},[109,46253,46254],{"class":111,"line":17849},[109,46255,35617],{"class":115},[109,46257,46258,46260,46262,46264,46266,46268,46270],{"class":111,"line":17869},[109,46259,32412],{"class":126},[109,46261,130],{"class":122},[109,46263,32419],{"class":278},[109,46265,3080],{"class":122},[109,46267,32424],{"class":126},[109,46269,3077],{"class":122},[109,46271,35294],{"class":278},[109,46273,46274,46276,46278],{"class":111,"line":17875},[109,46275,32464],{"class":126},[109,46277,130],{"class":122},[109,46279,33464],{"class":126},[109,46281,46282],{"class":111,"line":17886},[109,46283,35646],{"class":115},[109,46285,46286],{"class":111,"line":17909},[109,46287,35651],{"class":115},[109,46289,46290,46292,46294,46296,46298,46300,46302,46304,46306,46308,46310,46312,46314,46316,46318,46320,46322,46324,46326,46328,46330,46332,46334],{"class":111,"line":17931},[109,46291,35656],{"class":126},[109,46293,130],{"class":122},[109,46295,1289],{"class":126},[109,46297,35663],{"class":278},[109,46299,1914],{"class":126},[109,46301,35668],{"class":278},[109,46303,1914],{"class":126},[109,46305,35673],{"class":278},[109,46307,1914],{"class":126},[109,46309,35678],{"class":278},[109,46311,1914],{"class":126},[109,46313,35683],{"class":278},[109,46315,1914],{"class":126},[109,46317,35688],{"class":278},[109,46319,1914],{"class":126},[109,46321,35693],{"class":278},[109,46323,1914],{"class":126},[109,46325,35698],{"class":278},[109,46327,1914],{"class":126},[109,46329,35703],{"class":278},[109,46331,1914],{"class":126},[109,46333,35708],{"class":278},[109,46335,34421],{"class":126},[109,46337,46338,46340],{"class":111,"line":17936},[109,46339,35353],{"class":122},[109,46341,34059],{"class":126},[109,46343,46344],{"class":111,"line":17942},[109,46345,35721],{"class":115},[109,46347,46348,46350,46352,46354],{"class":111,"line":17956},[109,46349,4747],{"class":122},[109,46351,35728],{"class":126},[109,46353,27218],{"class":122},[109,46355,35372],{"class":126},[109,46357,46358,46360,46362],{"class":111,"line":17969},[109,46359,33785],{"class":126},[109,46361,130],{"class":122},[109,46363,33790],{"class":126},[109,46365,46366,46368,46370],{"class":111,"line":17974},[109,46367,33800],{"class":126},[109,46369,130],{"class":122},[109,46371,33805],{"class":126},[109,46373,46374],{"class":111,"line":17988},[109,46375,158],{"emptyLinePlaceholder":157},[109,46377,46378],{"class":111,"line":17993},[109,46379,35757],{"class":115},[109,46381,46382],{"class":111,"line":17999},[109,46383,34050],{"class":126},[109,46385,46386],{"class":111,"line":18004},[109,46387,35766],{"class":115},[109,46389,46390,46392,46394],{"class":111,"line":18018},[109,46391,33835],{"class":126},[109,46393,130],{"class":122},[109,46395,33840],{"class":126},[109,46397,46398],{"class":111,"line":18023},[109,46399,35779],{"class":115},[109,46401,46402,46404,46406,46408,46410,46412,46414],{"class":111,"line":18028},[109,46403,33852],{"class":126},[109,46405,130],{"class":122},[109,46407,33857],{"class":126},[109,46409,33860],{"class":6553},[109,46411,130],{"class":122},[109,46413,1755],{"class":133},[109,46415,1330],{"class":126},[109,46417,46418],{"class":111,"line":18042},[109,46419,35800],{"class":115},[109,46421,46422,46424,46426],{"class":111,"line":18054},[109,46423,35805],{"class":126},[109,46425,130],{"class":122},[109,46427,35810],{"class":126},[109,46429,46430,46432,46434],{"class":111,"line":18059},[109,46431,35815],{"class":126},[109,46433,130],{"class":122},[109,46435,35820],{"class":126},[109,46437,46438,46440,46442,46444,46446,46448,46450,46452],{"class":111,"line":18072},[109,46439,35825],{"class":133},[109,46441,714],{"class":126},[109,46443,35830],{"class":278},[109,46445,35833],{"class":126},[109,46447,35836],{"class":278},[109,46449,1914],{"class":126},[109,46451,35841],{"class":278},[109,46453,35844],{"class":126},[51,46455,46457],{"id":46456},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46459,46460],{},"猫狗分类任务",[19,46462,46463],{},"划分数据集和验证集",[99,46465,46467],{"className":31553,"code":46466,"language":31555,"meta":104,"style":104},"# 创建脚本，用于划分数据集和验证集\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",[106,46468,46469,46474,46481,46486,46497,46504,46508,46518,46532,46541,46545,46550,46560,46580,46584,46589,46599,46610,46623,46627,46632,46641,46651,46662,46666,46671,46681,46685,46690,46695,46700,46705,46710,46714,46724,46751,46764,46776,46803,46808,46813,46827,46832,46844,46859,46874,46882,46886,46891,46897,46909,46922,46927,46932,46937,46987,46993,46997],{"__ignoreMap":104},[109,46470,46471],{"class":111,"line":112},[109,46472,46473],{"class":115},"# 创建脚本，用于划分数据集和验证集\n",[109,46475,46476,46478],{"class":111,"line":119},[109,46477,31567],{"class":122},[109,46479,46480],{"class":126}," os\n",[109,46482,46483],{"class":111,"line":140},[109,46484,46485],{"class":115},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[109,46487,46488,46490,46493,46495],{"class":111,"line":154},[109,46489,31912],{"class":122},[109,46491,46492],{"class":126}," shutil ",[109,46494,31567],{"class":122},[109,46496,32997],{"class":126},[109,46498,46499,46501],{"class":111,"line":161},[109,46500,31567],{"class":122},[109,46502,46503],{"class":126}," random\n",[109,46505,46506],{"class":111,"line":167},[109,46507,158],{"emptyLinePlaceholder":157},[109,46509,46510,46512,46515],{"class":111,"line":185},[109,46511,33122],{"class":122},[109,46513,46514],{"class":211}," mkfile",[109,46516,46517],{"class":126},"(file):\n",[109,46519,46520,46522,46524,46527,46530],{"class":111,"line":201},[109,46521,4446],{"class":122},[109,46523,40105],{"class":122},[109,46525,46526],{"class":126}," os.path.exists(",[109,46528,46529],{"class":6553},"file",[109,46531,31961],{"class":126},[109,46533,46534,46537,46539],{"class":111,"line":206},[109,46535,46536],{"class":126},"        os.makedirs(",[109,46538,46529],{"class":6553},[109,46540,1330],{"class":126},[109,46542,46543],{"class":111,"line":218},[109,46544,158],{"emptyLinePlaceholder":157},[109,46546,46547],{"class":111,"line":223},[109,46548,46549],{"class":115},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[109,46551,46552,46555,46557],{"class":111,"line":229},[109,46553,46554],{"class":126},"file_path",[109,46556,130],{"class":122},[109,46558,46559],{"class":278},"'data_cat_dog'\n",[109,46561,46562,46565,46567,46570,46572,46575,46577],{"class":111,"line":244},[109,46563,46564],{"class":126},"flower_class",[109,46566,130],{"class":122},[109,46568,46569],{"class":126},"[cla ",[109,46571,4372],{"class":122},[109,46573,46574],{"class":126}," cla ",[109,46576,27218],{"class":122},[109,46578,46579],{"class":126}," os.listdir(file_path)]\n",[109,46581,46582],{"class":111,"line":258},[109,46583,158],{"emptyLinePlaceholder":157},[109,46585,46586],{"class":111,"line":263},[109,46587,46588],{"class":115},"# 创建训练集train文件夹\n",[109,46590,46591,46594,46597],{"class":111,"line":269},[109,46592,46593],{"class":126},"mkfile(",[109,46595,46596],{"class":278},"'data\u002Ftrain'",[109,46598,1330],{"class":126},[109,46600,46601,46603,46605,46607],{"class":111,"line":304},[109,46602,4372],{"class":122},[109,46604,46574],{"class":126},[109,46606,27218],{"class":122},[109,46608,46609],{"class":126}," flower_class:\n",[109,46611,46612,46615,46618,46620],{"class":111,"line":331},[109,46613,46614],{"class":126},"    mkfile(",[109,46616,46617],{"class":278},"'data\u002Ftrain\u002F'",[109,46619,1348],{"class":122},[109,46621,46622],{"class":126},"cla)\n",[109,46624,46625],{"class":111,"line":336},[109,46626,158],{"emptyLinePlaceholder":157},[109,46628,46629],{"class":111,"line":364},[109,46630,46631],{"class":115},"# 创建验证集val文件夹\n",[109,46633,46634,46636,46639],{"class":111,"line":391},[109,46635,46593],{"class":126},[109,46637,46638],{"class":278},"'data\u002Ftest'",[109,46640,1330],{"class":126},[109,46642,46643,46645,46647,46649],{"class":111,"line":396},[109,46644,4372],{"class":122},[109,46646,46574],{"class":126},[109,46648,27218],{"class":122},[109,46650,46609],{"class":126},[109,46652,46653,46655,46658,46660],{"class":111,"line":402},[109,46654,46614],{"class":126},[109,46656,46657],{"class":278},"'data\u002Ftest\u002F'",[109,46659,1348],{"class":122},[109,46661,46622],{"class":126},[109,46663,46664],{"class":111,"line":419},[109,46665,158],{"emptyLinePlaceholder":157},[109,46667,46668],{"class":111,"line":435},[109,46669,46670],{"class":115},"# 划分比例，训练集：测试集=9：1\n",[109,46672,46673,46676,46678],{"class":111,"line":440},[109,46674,46675],{"class":126},"split_rate",[109,46677,130],{"class":122},[109,46679,46680],{"class":133},"0.1\n",[109,46682,46683],{"class":111,"line":467},[109,46684,158],{"emptyLinePlaceholder":157},[109,46686,46687],{"class":111,"line":494},[109,46688,46689],{"class":115},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[109,46691,46692],{"class":111,"line":499},[109,46693,46694],{"class":115},"# cla_path：当前类别的原始图片路径\n",[109,46696,46697],{"class":111,"line":526},[109,46698,46699],{"class":115},"# images：当前类别下所有图片的文件名列表\n",[109,46701,46702],{"class":111,"line":552},[109,46703,46704],{"class":115},"# num：该类别图片总数\n",[109,46706,46707],{"class":111,"line":557},[109,46708,46709],{"class":115},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[109,46711,46712],{"class":111,"line":584},[109,46713,158],{"emptyLinePlaceholder":157},[109,46715,46716,46718,46720,46722],{"class":111,"line":611},[109,46717,4372],{"class":122},[109,46719,46574],{"class":126},[109,46721,27218],{"class":122},[109,46723,46609],{"class":126},[109,46725,46726,46729,46731,46734,46736,46739,46742,46744,46746,46748],{"class":111,"line":616},[109,46727,46728],{"class":126},"    cla_path ",[109,46730,130],{"class":122},[109,46732,46733],{"class":126}," file_path ",[109,46735,1348],{"class":122},[109,46737,46738],{"class":278}," '\u002F'",[109,46740,46741],{"class":122}," +",[109,46743,46574],{"class":126},[109,46745,1348],{"class":122},[109,46747,46738],{"class":278},[109,46749,46750],{"class":115},"  # 某一类别的子目录\n",[109,46752,46753,46756,46758,46761],{"class":111,"line":633},[109,46754,46755],{"class":126},"    images ",[109,46757,130],{"class":122},[109,46759,46760],{"class":126}," os.listdir(cla_path)  ",[109,46762,46763],{"class":115},"# iamges 列表存储了该目录下所有图像的名称\n",[109,46765,46766,46769,46771,46773],{"class":111,"line":649},[109,46767,46768],{"class":126},"    num ",[109,46770,130],{"class":122},[109,46772,8657],{"class":133},[109,46774,46775],{"class":126},"(images)\n",[109,46777,46778,46781,46783,46786,46788,46790,46792,46795,46797,46800],{"class":111,"line":676},[109,46779,46780],{"class":126},"    eval_index ",[109,46782,130],{"class":122},[109,46784,46785],{"class":126}," random.sample(images, ",[109,46787,2025],{"class":6553},[109,46789,130],{"class":122},[109,46791,123],{"class":133},[109,46793,46794],{"class":126},"(num ",[109,46796,1988],{"class":122},[109,46798,46799],{"class":126}," split_rate))  ",[109,46801,46802],{"class":115},"# 从images列表中随机抽取 k 个图像名称\n",[109,46804,46805],{"class":111,"line":703},[109,46806,46807],{"class":115},"    # 遍历该类别下的所有图片\n",[109,46809,46810],{"class":111,"line":708},[109,46811,46812],{"class":115},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[109,46814,46815,46817,46820,46822,46824],{"class":111,"line":723},[109,46816,1302],{"class":122},[109,46818,46819],{"class":126}," index, image ",[109,46821,27218],{"class":122},[109,46823,32781],{"class":133},[109,46825,46826],{"class":126},"(images):\n",[109,46828,46829],{"class":111,"line":728},[109,46830,46831],{"class":115},"        # eval_index 中保存验证集val的图像名称\n",[109,46833,46834,46836,46839,46841],{"class":111,"line":739},[109,46835,3852],{"class":122},[109,46837,46838],{"class":126}," image ",[109,46840,27218],{"class":122},[109,46842,46843],{"class":126}," eval_index:\n",[109,46845,46846,46849,46851,46854,46856],{"class":111,"line":9352},[109,46847,46848],{"class":126},"            image_path ",[109,46850,130],{"class":122},[109,46852,46853],{"class":126}," cla_path ",[109,46855,1348],{"class":122},[109,46857,46858],{"class":126}," image\n",[109,46860,46861,46864,46866,46869,46871],{"class":111,"line":9364},[109,46862,46863],{"class":126},"            new_path ",[109,46865,130],{"class":122},[109,46867,46868],{"class":278}," 'data\u002Ftest\u002F'",[109,46870,46741],{"class":122},[109,46872,46873],{"class":126}," cla\n",[109,46875,46876,46879],{"class":111,"line":9376},[109,46877,46878],{"class":126},"            copy(image_path, new_path)  ",[109,46880,46881],{"class":115},"# 将选中的图像复制到新路径\n",[109,46883,46884],{"class":111,"line":11034},[109,46885,158],{"emptyLinePlaceholder":157},[109,46887,46888],{"class":111,"line":11059},[109,46889,46890],{"class":115},"        # 其余的图像保存在训练集train中\n",[109,46892,46893,46895],{"class":111,"line":11082},[109,46894,3889],{"class":122},[109,46896,5082],{"class":126},[109,46898,46899,46901,46903,46905,46907],{"class":111,"line":11106},[109,46900,46848],{"class":126},[109,46902,130],{"class":122},[109,46904,46853],{"class":126},[109,46906,1348],{"class":122},[109,46908,46858],{"class":126},[109,46910,46911,46913,46915,46918,46920],{"class":111,"line":11111},[109,46912,46863],{"class":126},[109,46914,130],{"class":122},[109,46916,46917],{"class":278}," 'data\u002Ftrain\u002F'",[109,46919,46741],{"class":122},[109,46921,46873],{"class":126},[109,46923,46924],{"class":111,"line":11116},[109,46925,46926],{"class":126},"            copy(image_path, new_path)\n",[109,46928,46929],{"class":111,"line":11121},[109,46930,46931],{"class":115},"            # 打印进度条信息\n",[109,46933,46934],{"class":111,"line":11130},[109,46935,46936],{"class":115},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[109,46938,46939,46941,46943,46945,46948,46950,46952,46955,46957,46959,46961,46964,46967,46969,46971,46974,46977,46979,46981,46984],{"class":111,"line":11135},[109,46940,33626],{"class":133},[109,46942,714],{"class":126},[109,46944,1789],{"class":278},[109,46946,46947],{"class":133},"\\r",[109,46949,1289],{"class":278},[109,46951,33634],{"class":133},[109,46953,46954],{"class":278},"] processing [",[109,46956,33634],{"class":133},[109,46958,2116],{"class":278},[109,46960,33634],{"class":133},[109,46962,46963],{"class":278},"]\"",[109,46965,46966],{"class":126},".format(cla, index ",[109,46968,1348],{"class":122},[109,46970,26293],{"class":133},[109,46972,46973],{"class":126},", num), ",[109,46975,46976],{"class":6553},"end",[109,46978,130],{"class":122},[109,46980,8978],{"class":278},[109,46982,46983],{"class":126},")  ",[109,46985,46986],{"class":115},"# processing bar\n",[109,46988,46989,46991],{"class":111,"line":11141},[109,46990,32474],{"class":133},[109,46992,803],{"class":126},[109,46994,46995],{"class":111,"line":11162},[109,46996,158],{"emptyLinePlaceholder":157},[109,46998,46999,47001,47003,47006],{"class":111,"line":11168},[109,47000,31590],{"class":133},[109,47002,714],{"class":126},[109,47004,47005],{"class":278},"\"processing done!\"",[109,47007,1330],{"class":126},[19,47009,47010],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23171,47012,47014],{"id":47013},"_242模型代码","2.4.2.模型代码",[19,47016,47017],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[99,47019,47021],{"className":31553,"code":47020,"language":31555,"meta":104,"style":104},"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",[106,47022,47023,47029,47039,47049,47053,47069,47077,47091,47101,47105,47135,47139,47173,47219,47223,47257,47303,47307,47311,47345,47375,47379,47387,47401,47423,47445,47463,47467,47481,47485,47489,47505,47509,47517,47531,47541,47585,47589,47617,47621,47631,47659,47663,47699,47703,47731,47735,47745,47777,47809,47837,47841,47851,47883,47915,47947,47979,48011,48039,48043,48053,48085,48117,48129,48133,48145,48149,48153,48165,48173,48193,48197,48201,48205,48209,48213,48217,48231,48239,48247,48259,48273,48281,48285,48293,48303,48313,48323,48333,48343,48349,48353,48357,48369,48389,48397],{"__ignoreMap":104},[109,47024,47025,47027],{"class":111,"line":112},[109,47026,31567],{"class":122},[109,47028,31570],{"class":126},[109,47030,47031,47033,47035,47037],{"class":111,"line":119},[109,47032,31912],{"class":122},[109,47034,31915],{"class":126},[109,47036,31567],{"class":122},[109,47038,31920],{"class":126},[109,47040,47041,47043,47045,47047],{"class":111,"line":140},[109,47042,31912],{"class":122},[109,47044,31932],{"class":126},[109,47046,31567],{"class":122},[109,47048,31937],{"class":126},[109,47050,47051],{"class":111,"line":154},[109,47052,158],{"emptyLinePlaceholder":157},[109,47054,47055,47057,47059,47061,47063,47065,47067],{"class":111,"line":161},[109,47056,15867],{"class":122},[109,47058,42668],{"class":211},[109,47060,714],{"class":126},[109,47062,31953],{"class":211},[109,47064,2090],{"class":126},[109,47066,31958],{"class":211},[109,47068,31961],{"class":126},[109,47070,47071,47073,47075],{"class":111,"line":167},[109,47072,31976],{"class":122},[109,47074,31979],{"class":133},[109,47076,42687],{"class":126},[109,47078,47079,47081,47083,47085,47087,47089],{"class":111,"line":185},[109,47080,31992],{"class":133},[109,47082,42694],{"class":126},[109,47084,31998],{"class":133},[109,47086,32001],{"class":126},[109,47088,32004],{"class":133},[109,47090,803],{"class":126},[109,47092,47093,47095,47097,47099],{"class":111,"line":201},[109,47094,32020],{"class":133},[109,47096,35946],{"class":126},[109,47098,130],{"class":122},[109,47100,35951],{"class":126},[109,47102,47103],{"class":111,"line":206},[109,47104,42717],{"class":115},[109,47106,47107,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133],{"class":111,"line":218},[109,47108,32020],{"class":133},[109,47110,42724],{"class":126},[109,47112,130],{"class":122},[109,47114,32028],{"class":126},[109,47116,32031],{"class":6553},[109,47118,130],{"class":122},[109,47120,42735],{"class":126},[109,47122,32040],{"class":6553},[109,47124,130],{"class":122},[109,47126,42742],{"class":126},[109,47128,32049],{"class":6553},[109,47130,130],{"class":122},[109,47132,1755],{"class":133},[109,47134,1330],{"class":126},[109,47136,47137],{"class":111,"line":223},[109,47138,42755],{"class":115},[109,47140,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167,47169,47171],{"class":111,"line":229},[109,47142,32020],{"class":133},[109,47144,42762],{"class":126},[109,47146,130],{"class":122},[109,47148,32028],{"class":126},[109,47150,32031],{"class":6553},[109,47152,130],{"class":122},[109,47154,42735],{"class":126},[109,47156,32040],{"class":6553},[109,47158,130],{"class":122},[109,47160,42779],{"class":126},[109,47162,1314],{"class":133},[109,47164,42784],{"class":126},[109,47166,32049],{"class":6553},[109,47168,130],{"class":122},[109,47170,1755],{"class":133},[109,47172,1330],{"class":126},[109,47174,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193,47195,47197,47199,47201,47203,47205,47207,47209,47211,47213,47215,47217],{"class":111,"line":244},[109,47176,32020],{"class":133},[109,47178,42799],{"class":126},[109,47180,130],{"class":122},[109,47182,32028],{"class":126},[109,47184,32031],{"class":6553},[109,47186,130],{"class":122},[109,47188,42779],{"class":126},[109,47190,1314],{"class":133},[109,47192,42784],{"class":126},[109,47194,32040],{"class":6553},[109,47196,130],{"class":122},[109,47198,42779],{"class":126},[109,47200,1755],{"class":133},[109,47202,42784],{"class":126},[109,47204,32049],{"class":6553},[109,47206,130],{"class":122},[109,47208,1612],{"class":133},[109,47210,1914],{"class":126},[109,47212,32058],{"class":6553},[109,47214,130],{"class":122},[109,47216,1755],{"class":133},[109,47218,1330],{"class":126},[109,47220,47221],{"class":111,"line":258},[109,47222,42844],{"class":115},[109,47224,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243,47245,47247,47249,47251,47253,47255],{"class":111,"line":263},[109,47226,32020],{"class":133},[109,47228,42851],{"class":126},[109,47230,130],{"class":122},[109,47232,32028],{"class":126},[109,47234,32031],{"class":6553},[109,47236,130],{"class":122},[109,47238,42735],{"class":126},[109,47240,32040],{"class":6553},[109,47242,130],{"class":122},[109,47244,42868],{"class":126},[109,47246,1314],{"class":133},[109,47248,42784],{"class":126},[109,47250,32049],{"class":6553},[109,47252,130],{"class":122},[109,47254,1755],{"class":133},[109,47256,1330],{"class":126},[109,47258,47259,47261,47263,47265,47267,47269,47271,47273,47275,47277,47279,47281,47283,47285,47287,47289,47291,47293,47295,47297,47299,47301],{"class":111,"line":269},[109,47260,32020],{"class":133},[109,47262,42887],{"class":126},[109,47264,130],{"class":122},[109,47266,32028],{"class":126},[109,47268,32031],{"class":6553},[109,47270,130],{"class":122},[109,47272,42868],{"class":126},[109,47274,1314],{"class":133},[109,47276,42784],{"class":126},[109,47278,32040],{"class":6553},[109,47280,130],{"class":122},[109,47282,42868],{"class":126},[109,47284,1755],{"class":133},[109,47286,42784],{"class":126},[109,47288,32049],{"class":6553},[109,47290,130],{"class":122},[109,47292,1856],{"class":133},[109,47294,1914],{"class":126},[109,47296,32058],{"class":6553},[109,47298,130],{"class":122},[109,47300,1618],{"class":133},[109,47302,1330],{"class":126},[109,47304,47305],{"class":111,"line":304},[109,47306,42932],{"class":115},[109,47308,47309],{"class":111,"line":331},[109,47310,42937],{"class":115},[109,47312,47313,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339,47341,47343],{"class":111,"line":336},[109,47314,32020],{"class":133},[109,47316,42944],{"class":126},[109,47318,130],{"class":122},[109,47320,36004],{"class":126},[109,47322,32049],{"class":6553},[109,47324,130],{"class":122},[109,47326,1612],{"class":133},[109,47328,1914],{"class":126},[109,47330,32104],{"class":6553},[109,47332,130],{"class":122},[109,47334,1755],{"class":133},[109,47336,1914],{"class":126},[109,47338,32058],{"class":6553},[109,47340,130],{"class":122},[109,47342,1755],{"class":133},[109,47344,1330],{"class":126},[109,47346,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373],{"class":111,"line":364},[109,47348,32020],{"class":133},[109,47350,42979],{"class":126},[109,47352,130],{"class":122},[109,47354,32028],{"class":126},[109,47356,32031],{"class":6553},[109,47358,130],{"class":122},[109,47360,42735],{"class":126},[109,47362,32040],{"class":6553},[109,47364,130],{"class":122},[109,47366,42996],{"class":126},[109,47368,32049],{"class":6553},[109,47370,130],{"class":122},[109,47372,1755],{"class":133},[109,47374,1330],{"class":126},[109,47376,47377],{"class":111,"line":391},[109,47378,158],{"emptyLinePlaceholder":157},[109,47380,47381,47383,47385],{"class":111,"line":396},[109,47382,31976],{"class":122},[109,47384,32268],{"class":211},[109,47386,32271],{"class":126},[109,47388,47389,47391,47393,47395,47397,47399],{"class":111,"line":402},[109,47390,43021],{"class":126},[109,47392,130],{"class":122},[109,47394,31998],{"class":133},[109,47396,36359],{"class":126},[109,47398,31998],{"class":133},[109,47400,43032],{"class":126},[109,47402,47403,47405,47407,47409,47411,47413,47415,47417,47419,47421],{"class":111,"line":419},[109,47404,8411],{"class":126},[109,47406,130],{"class":122},[109,47408,31998],{"class":133},[109,47410,36359],{"class":126},[109,47412,31998],{"class":133},[109,47414,43047],{"class":126},[109,47416,31998],{"class":133},[109,47418,36359],{"class":126},[109,47420,31998],{"class":133},[109,47422,43056],{"class":126},[109,47424,47425,47427,47429,47431,47433,47435,47437,47439,47441,47443],{"class":111,"line":435},[109,47426,43061],{"class":126},[109,47428,130],{"class":122},[109,47430,31998],{"class":133},[109,47432,36359],{"class":126},[109,47434,31998],{"class":133},[109,47436,43072],{"class":126},[109,47438,31998],{"class":133},[109,47440,36359],{"class":126},[109,47442,31998],{"class":133},[109,47444,43081],{"class":126},[109,47446,47447,47449,47451,47453,47455,47457,47459,47461],{"class":111,"line":440},[109,47448,43086],{"class":126},[109,47450,130],{"class":122},[109,47452,31998],{"class":133},[109,47454,36359],{"class":126},[109,47456,31998],{"class":133},[109,47458,43097],{"class":126},[109,47460,31998],{"class":133},[109,47462,43102],{"class":126},[109,47464,47465],{"class":111,"line":467},[109,47466,43107],{"class":115},[109,47468,47469,47471,47473,47475,47477,47479],{"class":111,"line":494},[109,47470,15925],{"class":122},[109,47472,43114],{"class":126},[109,47474,33860],{"class":6553},[109,47476,130],{"class":122},[109,47478,1755],{"class":133},[109,47480,1330],{"class":126},[109,47482,47483],{"class":111,"line":499},[109,47484,158],{"emptyLinePlaceholder":157},[109,47486,47487],{"class":111,"line":526},[109,47488,43135],{"class":115},[109,47490,47491,47493,47495,47497,47499,47501,47503],{"class":111,"line":552},[109,47492,15867],{"class":122},[109,47494,43142],{"class":211},[109,47496,714],{"class":126},[109,47498,31953],{"class":211},[109,47500,2090],{"class":126},[109,47502,31958],{"class":211},[109,47504,31961],{"class":126},[109,47506,47507],{"class":111,"line":557},[109,47508,43157],{"class":115},[109,47510,47511,47513,47515],{"class":111,"line":584},[109,47512,31976],{"class":122},[109,47514,31979],{"class":133},[109,47516,43166],{"class":126},[109,47518,47519,47521,47523,47525,47527,47529],{"class":111,"line":611},[109,47520,31992],{"class":133},[109,47522,43173],{"class":126},[109,47524,31998],{"class":133},[109,47526,32001],{"class":126},[109,47528,32004],{"class":133},[109,47530,803],{"class":126},[109,47532,47533,47535,47537,47539],{"class":111,"line":616},[109,47534,32020],{"class":133},[109,47536,43188],{"class":126},[109,47538,130],{"class":122},[109,47540,39184],{"class":126},[109,47542,47543,47545,47547,47549,47551,47553,47555,47557,47559,47561,47563,47565,47567,47569,47571,47573,47575,47577,47579,47581,47583],{"class":111,"line":633},[109,47544,39189],{"class":126},[109,47546,32031],{"class":6553},[109,47548,130],{"class":122},[109,47550,1612],{"class":133},[109,47552,1914],{"class":126},[109,47554,32040],{"class":6553},[109,47556,130],{"class":122},[109,47558,1741],{"class":133},[109,47560,1914],{"class":126},[109,47562,32049],{"class":6553},[109,47564,130],{"class":122},[109,47566,1905],{"class":133},[109,47568,1914],{"class":126},[109,47570,32104],{"class":6553},[109,47572,130],{"class":122},[109,47574,1618],{"class":133},[109,47576,1914],{"class":126},[109,47578,32058],{"class":6553},[109,47580,130],{"class":122},[109,47582,1612],{"class":133},[109,47584,39222],{"class":126},[109,47586,47587],{"class":111,"line":649},[109,47588,39227],{"class":126},[109,47590,47591,47593,47595,47597,47599,47601,47603,47605,47607,47609,47611,47613,47615],{"class":111,"line":676},[109,47592,39272],{"class":126},[109,47594,32049],{"class":6553},[109,47596,130],{"class":122},[109,47598,1612],{"class":133},[109,47600,1914],{"class":126},[109,47602,32104],{"class":6553},[109,47604,130],{"class":122},[109,47606,1618],{"class":133},[109,47608,1914],{"class":126},[109,47610,32058],{"class":6553},[109,47612,130],{"class":122},[109,47614,1755],{"class":133},[109,47616,1330],{"class":126},[109,47618,47619],{"class":111,"line":703},[109,47620,39301],{"class":126},[109,47622,47623,47625,47627,47629],{"class":111,"line":708},[109,47624,32020],{"class":133},[109,47626,43279],{"class":126},[109,47628,130],{"class":122},[109,47630,39184],{"class":126},[109,47632,47633,47635,47637,47639,47641,47643,47645,47647,47649,47651,47653,47655,47657],{"class":111,"line":723},[109,47634,39189],{"class":126},[109,47636,32031],{"class":6553},[109,47638,130],{"class":122},[109,47640,1741],{"class":133},[109,47642,1914],{"class":126},[109,47644,32040],{"class":6553},[109,47646,130],{"class":122},[109,47648,1741],{"class":133},[109,47650,1914],{"class":126},[109,47652,32049],{"class":6553},[109,47654,130],{"class":122},[109,47656,1755],{"class":133},[109,47658,39222],{"class":126},[109,47660,47661],{"class":111,"line":728},[109,47662,39227],{"class":126},[109,47664,47665,47667,47669,47671,47673,47675,47677,47679,47681,47683,47685,47687,47689,47691,47693,47695,47697],{"class":111,"line":739},[109,47666,39189],{"class":126},[109,47668,32031],{"class":6553},[109,47670,130],{"class":122},[109,47672,1741],{"class":133},[109,47674,1914],{"class":126},[109,47676,32040],{"class":6553},[109,47678,130],{"class":122},[109,47680,43334],{"class":133},[109,47682,1914],{"class":126},[109,47684,32049],{"class":6553},[109,47686,130],{"class":122},[109,47688,1612],{"class":133},[109,47690,1914],{"class":126},[109,47692,32058],{"class":6553},[109,47694,130],{"class":122},[109,47696,1755],{"class":133},[109,47698,39222],{"class":126},[109,47700,47701],{"class":111,"line":9352},[109,47702,39227],{"class":126},[109,47704,47705,47707,47709,47711,47713,47715,47717,47719,47721,47723,47725,47727,47729],{"class":111,"line":9364},[109,47706,39272],{"class":126},[109,47708,32049],{"class":6553},[109,47710,130],{"class":122},[109,47712,1612],{"class":133},[109,47714,1914],{"class":126},[109,47716,32104],{"class":6553},[109,47718,130],{"class":122},[109,47720,1618],{"class":133},[109,47722,1914],{"class":126},[109,47724,32058],{"class":6553},[109,47726,130],{"class":122},[109,47728,1755],{"class":133},[109,47730,1330],{"class":126},[109,47732,47733],{"class":111,"line":9376},[109,47734,39301],{"class":126},[109,47736,47737,47739,47741,47743],{"class":111,"line":11034},[109,47738,32020],{"class":133},[109,47740,43395],{"class":126},[109,47742,130],{"class":122},[109,47744,39184],{"class":126},[109,47746,47747,47749,47751,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775],{"class":111,"line":11059},[109,47748,43404],{"class":126},[109,47750,43334],{"class":133},[109,47752,1914],{"class":126},[109,47754,1741],{"class":133},[109,47756,43413],{"class":126},[109,47758,1747],{"class":133},[109,47760,1914],{"class":126},[109,47762,33245],{"class":133},[109,47764,43422],{"class":126},[109,47766,2133],{"class":133},[109,47768,1914],{"class":126},[109,47770,1735],{"class":133},[109,47772,43431],{"class":126},[109,47774,1735],{"class":133},[109,47776,39222],{"class":126},[109,47778,47779,47781,47783,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807],{"class":111,"line":11082},[109,47780,43404],{"class":126},[109,47782,36045],{"class":133},[109,47784,1914],{"class":126},[109,47786,33245],{"class":133},[109,47788,43413],{"class":126},[109,47790,33245],{"class":133},[109,47792,1914],{"class":126},[109,47794,43334],{"class":133},[109,47796,43422],{"class":126},[109,47798,1735],{"class":133},[109,47800,1914],{"class":126},[109,47802,1747],{"class":133},[109,47804,43431],{"class":126},[109,47806,1741],{"class":133},[109,47808,39222],{"class":126},[109,47810,47811,47813,47815,47817,47819,47821,47823,47825,47827,47829,47831,47833,47835],{"class":111,"line":11106},[109,47812,39272],{"class":126},[109,47814,32049],{"class":6553},[109,47816,130],{"class":122},[109,47818,1612],{"class":133},[109,47820,1914],{"class":126},[109,47822,32104],{"class":6553},[109,47824,130],{"class":122},[109,47826,1618],{"class":133},[109,47828,1914],{"class":126},[109,47830,32058],{"class":6553},[109,47832,130],{"class":122},[109,47834,1755],{"class":133},[109,47836,1330],{"class":126},[109,47838,47839],{"class":111,"line":11111},[109,47840,39301],{"class":126},[109,47842,47843,47845,47847,47849],{"class":111,"line":11116},[109,47844,32020],{"class":133},[109,47846,43506],{"class":126},[109,47848,130],{"class":122},[109,47850,39184],{"class":126},[109,47852,47853,47855,47857,47859,47861,47863,47865,47867,47869,47871,47873,47875,47877,47879,47881],{"class":111,"line":11121},[109,47854,43404],{"class":126},[109,47856,43517],{"class":133},[109,47858,1914],{"class":126},[109,47860,43334],{"class":133},[109,47862,43413],{"class":126},[109,47864,1747],{"class":133},[109,47866,1914],{"class":126},[109,47868,43530],{"class":133},[109,47870,43422],{"class":126},[109,47872,2133],{"class":133},[109,47874,1914],{"class":126},[109,47876,2139],{"class":133},[109,47878,43431],{"class":126},[109,47880,1741],{"class":133},[109,47882,39222],{"class":126},[109,47884,47885,47887,47889,47891,47893,47895,47897,47899,47901,47903,47905,47907,47909,47911,47913],{"class":111,"line":11130},[109,47886,43404],{"class":126},[109,47888,39632],{"class":133},[109,47890,1914],{"class":126},[109,47892,22221],{"class":133},[109,47894,43413],{"class":126},[109,47896,2150],{"class":133},[109,47898,1914],{"class":126},[109,47900,32676],{"class":133},[109,47902,43422],{"class":126},[109,47904,2332],{"class":133},[109,47906,1914],{"class":126},[109,47908,1741],{"class":133},[109,47910,43431],{"class":126},[109,47912,1741],{"class":133},[109,47914,39222],{"class":126},[109,47916,47917,47919,47921,47923,47925,47927,47929,47931,47933,47935,47937,47939,47941,47943,47945],{"class":111,"line":11135},[109,47918,43404],{"class":126},[109,47920,39632],{"class":133},[109,47922,1914],{"class":126},[109,47924,33245],{"class":133},[109,47926,43413],{"class":126},[109,47928,33245],{"class":133},[109,47930,1914],{"class":126},[109,47932,36045],{"class":133},[109,47934,43422],{"class":126},[109,47936,2332],{"class":133},[109,47938,1914],{"class":126},[109,47940,1741],{"class":133},[109,47942,43431],{"class":126},[109,47944,1741],{"class":133},[109,47946,39222],{"class":126},[109,47948,47949,47951,47953,47955,47957,47959,47961,47963,47965,47967,47969,47971,47973,47975,47977],{"class":111,"line":11141},[109,47950,43404],{"class":126},[109,47952,39632],{"class":133},[109,47954,1914],{"class":126},[109,47956,2150],{"class":133},[109,47958,43413],{"class":126},[109,47960,33245],{"class":133},[109,47962,1914],{"class":126},[109,47964,43627],{"class":133},[109,47966,43422],{"class":126},[109,47968,1735],{"class":133},[109,47970,1914],{"class":126},[109,47972,1741],{"class":133},[109,47974,43431],{"class":126},[109,47976,1741],{"class":133},[109,47978,39222],{"class":126},[109,47980,47981,47983,47985,47987,47989,47991,47993,47995,47997,47999,48001,48003,48005,48007,48009],{"class":111,"line":11162},[109,47982,43404],{"class":126},[109,47984,43648],{"class":133},[109,47986,1914],{"class":126},[109,47988,36045],{"class":133},[109,47990,43413],{"class":126},[109,47992,22221],{"class":133},[109,47994,1914],{"class":126},[109,47996,43661],{"class":133},[109,47998,43422],{"class":126},[109,48000,1735],{"class":133},[109,48002,1914],{"class":126},[109,48004,33245],{"class":133},[109,48006,43431],{"class":126},[109,48008,33245],{"class":133},[109,48010,39222],{"class":126},[109,48012,48013,48015,48017,48019,48021,48023,48025,48027,48029,48031,48033,48035,48037],{"class":111,"line":11168},[109,48014,39272],{"class":126},[109,48016,32049],{"class":6553},[109,48018,130],{"class":122},[109,48020,1612],{"class":133},[109,48022,1914],{"class":126},[109,48024,32104],{"class":6553},[109,48026,130],{"class":122},[109,48028,1618],{"class":133},[109,48030,1914],{"class":126},[109,48032,32058],{"class":6553},[109,48034,130],{"class":122},[109,48036,1755],{"class":133},[109,48038,1330],{"class":126},[109,48040,48041],{"class":111,"line":11182},[109,48042,39301],{"class":126},[109,48044,48045,48047,48049,48051],{"class":111,"line":11188},[109,48046,32020],{"class":133},[109,48048,43714],{"class":126},[109,48050,130],{"class":122},[109,48052,39184],{"class":126},[109,48054,48055,48057,48059,48061,48063,48065,48067,48069,48071,48073,48075,48077,48079,48081,48083],{"class":111,"line":11215},[109,48056,43404],{"class":126},[109,48058,43725],{"class":133},[109,48060,1914],{"class":126},[109,48062,36045],{"class":133},[109,48064,43413],{"class":126},[109,48066,22221],{"class":133},[109,48068,1914],{"class":126},[109,48070,43661],{"class":133},[109,48072,43422],{"class":126},[109,48074,1735],{"class":133},[109,48076,1914],{"class":126},[109,48078,33245],{"class":133},[109,48080,43431],{"class":126},[109,48082,33245],{"class":133},[109,48084,39222],{"class":126},[109,48086,48087,48089,48091,48093,48095,48097,48099,48101,48103,48105,48107,48109,48111,48113,48115],{"class":111,"line":11224},[109,48088,43404],{"class":126},[109,48090,43725],{"class":133},[109,48092,1914],{"class":126},[109,48094,36115],{"class":133},[109,48096,43413],{"class":126},[109,48098,43334],{"class":133},[109,48100,1914],{"class":126},[109,48102,36115],{"class":133},[109,48104,43422],{"class":126},[109,48106,2139],{"class":133},[109,48108,1914],{"class":126},[109,48110,33245],{"class":133},[109,48112,43431],{"class":126},[109,48114,33245],{"class":133},[109,48116,39222],{"class":126},[109,48118,48119,48121,48123,48125,48127],{"class":111,"line":11230},[109,48120,43788],{"class":126},[109,48122,1755],{"class":133},[109,48124,1914],{"class":126},[109,48126,1755],{"class":133},[109,48128,43797],{"class":126},[109,48130,48131],{"class":111,"line":11238},[109,48132,39965],{"class":126},[109,48134,48135,48137,48139,48141,48143],{"class":111,"line":11243},[109,48136,39970],{"class":126},[109,48138,43808],{"class":133},[109,48140,1914],{"class":126},[109,48142,1618],{"class":133},[109,48144,1330],{"class":126},[109,48146,48147],{"class":111,"line":17777},[109,48148,39301],{"class":126},[109,48150,48151],{"class":111,"line":17783},[109,48152,43823],{"class":115},[109,48154,48155,48157,48159,48161,48163],{"class":111,"line":17806},[109,48156,4747],{"class":122},[109,48158,40043],{"class":126},[109,48160,27218],{"class":122},[109,48162,40048],{"class":133},[109,48164,40051],{"class":126},[109,48166,48167,48169,48171],{"class":111,"line":17812},[109,48168,5979],{"class":122},[109,48170,40063],{"class":133},[109,48172,40066],{"class":126},[109,48174,48175,48177,48179,48181,48183,48185,48187,48189,48191],{"class":111,"line":17835},[109,48176,40076],{"class":126},[109,48178,43850],{"class":6553},[109,48180,130],{"class":122},[109,48182,43855],{"class":278},[109,48184,1914],{"class":126},[109,48186,40079],{"class":6553},[109,48188,130],{"class":122},[109,48190,40084],{"class":278},[109,48192,1330],{"class":126},[109,48194,48195],{"class":111,"line":17849},[109,48196,43870],{"class":115},[109,48198,48199],{"class":111,"line":17869},[109,48200,43875],{"class":115},[109,48202,48203],{"class":111,"line":17875},[109,48204,43880],{"class":115},[109,48206,48207],{"class":111,"line":17886},[109,48208,43885],{"class":115},[109,48210,48211],{"class":111,"line":17909},[109,48212,43890],{"class":115},[109,48214,48215],{"class":111,"line":17931},[109,48216,43895],{"class":115},[109,48218,48219,48221,48223,48225,48227,48229],{"class":111,"line":17936},[109,48220,40096],{"class":122},[109,48222,40099],{"class":126},[109,48224,40102],{"class":122},[109,48226,40105],{"class":122},[109,48228,40108],{"class":133},[109,48230,5082],{"class":126},[109,48232,48233,48235,48237],{"class":111,"line":17942},[109,48234,40120],{"class":126},[109,48236,1314],{"class":133},[109,48238,1330],{"class":126},[109,48240,48241,48243,48245],{"class":111,"line":17956},[109,48242,43922],{"class":122},[109,48244,40063],{"class":133},[109,48246,40139],{"class":126},[109,48248,48249,48251,48253,48255,48257],{"class":111,"line":17969},[109,48250,43931],{"class":126},[109,48252,1314],{"class":133},[109,48254,1914],{"class":126},[109,48256,40161],{"class":133},[109,48258,1330],{"class":126},[109,48260,48261,48263,48265,48267,48269,48271],{"class":111,"line":17974},[109,48262,43944],{"class":122},[109,48264,40099],{"class":126},[109,48266,40102],{"class":122},[109,48268,40105],{"class":122},[109,48270,40108],{"class":133},[109,48272,5082],{"class":126},[109,48274,48275,48277,48279],{"class":111,"line":17988},[109,48276,43959],{"class":126},[109,48278,1314],{"class":133},[109,48280,1330],{"class":126},[109,48282,48283],{"class":111,"line":17993},[109,48284,36340],{"class":115},[109,48286,48287,48289,48291],{"class":111,"line":17999},[109,48288,31976],{"class":122},[109,48290,32268],{"class":211},[109,48292,32271],{"class":126},[109,48294,48295,48297,48299,48301],{"class":111,"line":18004},[109,48296,32276],{"class":126},[109,48298,130],{"class":122},[109,48300,31998],{"class":133},[109,48302,43986],{"class":126},[109,48304,48305,48307,48309,48311],{"class":111,"line":18018},[109,48306,32276],{"class":126},[109,48308,130],{"class":122},[109,48310,31998],{"class":133},[109,48312,43997],{"class":126},[109,48314,48315,48317,48319,48321],{"class":111,"line":18023},[109,48316,32276],{"class":126},[109,48318,130],{"class":122},[109,48320,31998],{"class":133},[109,48322,44008],{"class":126},[109,48324,48325,48327,48329,48331],{"class":111,"line":18028},[109,48326,32276],{"class":126},[109,48328,130],{"class":122},[109,48330,31998],{"class":133},[109,48332,44019],{"class":126},[109,48334,48335,48337,48339,48341],{"class":111,"line":18042},[109,48336,32276],{"class":126},[109,48338,130],{"class":122},[109,48340,31998],{"class":133},[109,48342,44030],{"class":126},[109,48344,48345,48347],{"class":111,"line":18054},[109,48346,15925],{"class":122},[109,48348,32384],{"class":126},[109,48350,48351],{"class":111,"line":18059},[109,48352,158],{"emptyLinePlaceholder":157},[109,48354,48355],{"class":111,"line":18072},[109,48356,44045],{"class":115},[109,48358,48359,48361,48363,48365,48367],{"class":111,"line":18077},[109,48360,2922],{"class":122},[109,48362,32395],{"class":133},[109,48364,4296],{"class":122},[109,48366,32400],{"class":278},[109,48368,5082],{"class":126},[109,48370,48371,48373,48375,48377,48379,48381,48383,48385,48387],{"class":111,"line":18082},[109,48372,32412],{"class":126},[109,48374,130],{"class":122},[109,48376,31626],{"class":126},[109,48378,32419],{"class":278},[109,48380,3080],{"class":122},[109,48382,32424],{"class":126},[109,48384,3077],{"class":122},[109,48386,31651],{"class":278},[109,48388,1330],{"class":126},[109,48390,48391,48393,48395],{"class":111,"line":18087},[109,48392,32464],{"class":126},[109,48394,130],{"class":122},[109,48396,44086],{"class":126},[109,48398,48399,48401,48403,48405,48407,48409,48411,48413],{"class":111,"line":18100},[109,48400,32474],{"class":133},[109,48402,32477],{"class":126},[109,48404,1755],{"class":133},[109,48406,1914],{"class":126},[109,48408,32676],{"class":133},[109,48410,1914],{"class":126},[109,48412,32676],{"class":133},[109,48414,32490],{"class":126},[23171,48416,48418],{"id":48417},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48420,48421],{},"计算图片的均值与方差，用于训练中归一化处理操作",[99,48423,48425],{"className":31553,"code":48424,"language":31555,"meta":104,"style":104},"# 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",[106,48426,48427,48432,48445,48450,48456,48461,48471,48475,48480,48490,48494,48499,48509,48526,48530,48535,48547,48559,48590,48599,48609,48619,48623,48628,48643,48647,48652,48657,48662,48672,48677,48702,48706,48711,48726,48730,48743,48747,48752,48757,48762,48767,48772,48782,48792,48815,48823,48831,48839,48843,48855,48859,48864,48868,48872,48879,48899,48923,48930,48944,48949,48954,48958,48972,48976,48988],{"__ignoreMap":104},[109,48428,48429],{"class":111,"line":112},[109,48430,48431],{"class":115},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[109,48433,48434,48436,48439,48442],{"class":111,"line":119},[109,48435,31912],{"class":122},[109,48437,48438],{"class":133}," PIL",[109,48440,48441],{"class":122}," import",[109,48443,48444],{"class":126}," Image\n",[109,48446,48447],{"class":111,"line":140},[109,48448,48449],{"class":115},"# os 用来处理文件夹和文件路径\n",[109,48451,48452,48454],{"class":111,"line":154},[109,48453,31567],{"class":122},[109,48455,46480],{"class":126},[109,48457,48458],{"class":111,"line":161},[109,48459,48460],{"class":115},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[109,48462,48463,48465,48467,48469],{"class":111,"line":167},[109,48464,31567],{"class":122},[109,48466,32555],{"class":126},[109,48468,32558],{"class":122},[109,48470,32561],{"class":126},[109,48472,48473],{"class":111,"line":185},[109,48474,158],{"emptyLinePlaceholder":157},[109,48476,48477],{"class":111,"line":201},[109,48478,48479],{"class":115},"# 文件夹路径，包含所有图片文件\n",[109,48481,48482,48485,48487],{"class":111,"line":206},[109,48483,48484],{"class":126},"folder_path ",[109,48486,130],{"class":122},[109,48488,48489],{"class":278}," 'data_cat_dog'\n",[109,48491,48492],{"class":111,"line":218},[109,48493,158],{"emptyLinePlaceholder":157},[109,48495,48496],{"class":111,"line":223},[109,48497,48498],{"class":115},"# 初始化累积变量\n",[109,48500,48501,48504,48506],{"class":111,"line":229},[109,48502,48503],{"class":126},"total_pixels ",[109,48505,130],{"class":122},[109,48507,48508],{"class":133}," 0\n",[109,48510,48511,48514,48516,48519,48521,48523],{"class":111,"line":244},[109,48512,48513],{"class":126},"sum_normalized_pixel_values ",[109,48515,130],{"class":122},[109,48517,48518],{"class":126}," np.zeros(",[109,48520,1612],{"class":133},[109,48522,46983],{"class":126},[109,48524,48525],{"class":115},"# 如果是RGB图像，需要三个通道的均值和方差\n",[109,48527,48528],{"class":111,"line":258},[109,48529,158],{"emptyLinePlaceholder":157},[109,48531,48532],{"class":111,"line":263},[109,48533,48534],{"class":115},"# 遍历文件夹中的图片文件\n",[109,48536,48537,48539,48542,48544],{"class":111,"line":269},[109,48538,4372],{"class":122},[109,48540,48541],{"class":126}," root, dirs, files ",[109,48543,27218],{"class":122},[109,48545,48546],{"class":126}," os.walk(folder_path):\n",[109,48548,48549,48551,48554,48556],{"class":111,"line":304},[109,48550,1302],{"class":122},[109,48552,48553],{"class":126}," filename ",[109,48555,27218],{"class":122},[109,48557,48558],{"class":126}," files:\n",[109,48560,48561,48563,48566,48569,48571,48574,48576,48579,48581,48584,48587],{"class":111,"line":331},[109,48562,3852],{"class":122},[109,48564,48565],{"class":126}," filename.endswith((",[109,48567,48568],{"class":278},"'.jpg'",[109,48570,13608],{"class":126},[109,48572,48573],{"class":278},"'.jpeg'",[109,48575,13608],{"class":126},[109,48577,48578],{"class":278},"'.png'",[109,48580,13608],{"class":126},[109,48582,48583],{"class":278},"'.bmp'",[109,48585,48586],{"class":126},")):  ",[109,48588,48589],{"class":115},"# 可根据实际情况添加其他格式\n",[109,48591,48592,48594,48596],{"class":111,"line":336},[109,48593,46848],{"class":126},[109,48595,130],{"class":122},[109,48597,48598],{"class":126}," os.path.join(root, filename)\n",[109,48600,48601,48604,48606],{"class":111,"line":364},[109,48602,48603],{"class":126},"            image ",[109,48605,130],{"class":122},[109,48607,48608],{"class":126}," Image.open(image_path)\n",[109,48610,48611,48614,48616],{"class":111,"line":391},[109,48612,48613],{"class":126},"            image_array ",[109,48615,130],{"class":122},[109,48617,48618],{"class":126}," np.array(image)\n",[109,48620,48621],{"class":111,"line":396},[109,48622,158],{"emptyLinePlaceholder":157},[109,48624,48625],{"class":111,"line":402},[109,48626,48627],{"class":115},"            # 归一化像素值到0-1之间\n",[109,48629,48630,48633,48635,48638,48640],{"class":111,"line":419},[109,48631,48632],{"class":126},"            normalized_image_array ",[109,48634,130],{"class":122},[109,48636,48637],{"class":126}," image_array ",[109,48639,2116],{"class":122},[109,48641,48642],{"class":133}," 255.0\n",[109,48644,48645],{"class":111,"line":435},[109,48646,158],{"emptyLinePlaceholder":157},[109,48648,48649],{"class":111,"line":440},[109,48650,48651],{"class":115},"            # print(image_path)\n",[109,48653,48654],{"class":111,"line":467},[109,48655,48656],{"class":115},"            # print(normalized_image_array.shape)\n",[109,48658,48659],{"class":111,"line":494},[109,48660,48661],{"class":115},"            # 累积归一化后的像素值和像素数量\n",[109,48663,48664,48667,48669],{"class":111,"line":499},[109,48665,48666],{"class":126},"            total_pixels ",[109,48668,10795],{"class":122},[109,48670,48671],{"class":126}," normalized_image_array.size\n",[109,48673,48674],{"class":111,"line":526},[109,48675,48676],{"class":115},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[109,48678,48679,48682,48684,48687,48690,48692,48694,48696,48698,48700],{"class":111,"line":552},[109,48680,48681],{"class":126},"            sum_normalized_pixel_values ",[109,48683,10795],{"class":122},[109,48685,48686],{"class":126}," np.sum(normalized_image_array, ",[109,48688,48689],{"class":6553},"axis",[109,48691,130],{"class":122},[109,48693,714],{"class":126},[109,48695,1314],{"class":133},[109,48697,13608],{"class":126},[109,48699,1755],{"class":133},[109,48701,31672],{"class":126},[109,48703,48704],{"class":111,"line":557},[109,48705,158],{"emptyLinePlaceholder":157},[109,48707,48708],{"class":111,"line":584},[109,48709,48710],{"class":115},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[109,48712,48713,48716,48718,48721,48723],{"class":111,"line":611},[109,48714,48715],{"class":126},"mean ",[109,48717,130],{"class":122},[109,48719,48720],{"class":126}," sum_normalized_pixel_values ",[109,48722,2116],{"class":122},[109,48724,48725],{"class":126}," total_pixels\n",[109,48727,48728],{"class":111,"line":616},[109,48729,158],{"emptyLinePlaceholder":157},[109,48731,48732,48735,48737,48739,48741],{"class":111,"line":633},[109,48733,48734],{"class":126},"sum_squared_diff ",[109,48736,130],{"class":122},[109,48738,48518],{"class":126},[109,48740,1612],{"class":133},[109,48742,1330],{"class":126},[109,48744,48745],{"class":111,"line":649},[109,48746,158],{"emptyLinePlaceholder":157},[109,48748,48749],{"class":111,"line":676},[109,48750,48751],{"class":115},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[109,48753,48754],{"class":111,"line":703},[109,48755,48756],{"class":115},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[109,48758,48759],{"class":111,"line":708},[109,48760,48761],{"class":115},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[109,48763,48764],{"class":111,"line":723},[109,48765,48766],{"class":115},"# Image.open(image_path)：打开图片\n",[109,48768,48769],{"class":111,"line":728},[109,48770,48771],{"class":115},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[109,48773,48774,48776,48778,48780],{"class":111,"line":739},[109,48775,4372],{"class":122},[109,48777,48541],{"class":126},[109,48779,27218],{"class":122},[109,48781,48546],{"class":126},[109,48783,48784,48786,48788,48790],{"class":111,"line":9352},[109,48785,1302],{"class":122},[109,48787,48553],{"class":126},[109,48789,27218],{"class":122},[109,48791,48558],{"class":126},[109,48793,48794,48796,48798,48800,48802,48804,48806,48808,48810,48812],{"class":111,"line":9364},[109,48795,3852],{"class":122},[109,48797,48565],{"class":126},[109,48799,48568],{"class":278},[109,48801,13608],{"class":126},[109,48803,48573],{"class":278},[109,48805,13608],{"class":126},[109,48807,48578],{"class":278},[109,48809,13608],{"class":126},[109,48811,48583],{"class":278},[109,48813,48814],{"class":126},")):\n",[109,48816,48817,48819,48821],{"class":111,"line":9376},[109,48818,46848],{"class":126},[109,48820,130],{"class":122},[109,48822,48598],{"class":126},[109,48824,48825,48827,48829],{"class":111,"line":11034},[109,48826,48603],{"class":126},[109,48828,130],{"class":122},[109,48830,48608],{"class":126},[109,48832,48833,48835,48837],{"class":111,"line":11059},[109,48834,48613],{"class":126},[109,48836,130],{"class":122},[109,48838,48618],{"class":126},[109,48840,48841],{"class":111,"line":11082},[109,48842,48627],{"class":115},[109,48844,48845,48847,48849,48851,48853],{"class":111,"line":11106},[109,48846,48632],{"class":126},[109,48848,130],{"class":122},[109,48850,48637],{"class":126},[109,48852,2116],{"class":122},[109,48854,48642],{"class":133},[109,48856,48857],{"class":111,"line":11111},[109,48858,48656],{"class":115},[109,48860,48861],{"class":111,"line":11116},[109,48862,48863],{"class":115},"            # print(mean.shape)\n",[109,48865,48866],{"class":111,"line":11121},[109,48867,48651],{"class":115},[109,48869,48870],{"class":111,"line":11130},[109,48871,158],{"emptyLinePlaceholder":157},[109,48873,48874,48877],{"class":111,"line":11135},[109,48875,48876],{"class":122},"            try",[109,48878,5082],{"class":126},[109,48880,48881,48884,48886,48889,48891,48894,48896],{"class":111,"line":11141},[109,48882,48883],{"class":126},"                diff ",[109,48885,130],{"class":122},[109,48887,48888],{"class":126}," (normalized_image_array ",[109,48890,2064],{"class":122},[109,48892,48893],{"class":126}," mean) ",[109,48895,11978],{"class":122},[109,48897,48898],{"class":133}," 2\n",[109,48900,48901,48904,48906,48909,48911,48913,48915,48917,48919,48921],{"class":111,"line":11162},[109,48902,48903],{"class":126},"                sum_squared_diff ",[109,48905,10795],{"class":122},[109,48907,48908],{"class":126}," np.sum(diff, ",[109,48910,48689],{"class":6553},[109,48912,130],{"class":122},[109,48914,714],{"class":126},[109,48916,1314],{"class":133},[109,48918,13608],{"class":126},[109,48920,1755],{"class":133},[109,48922,31672],{"class":126},[109,48924,48925,48928],{"class":111,"line":11168},[109,48926,48927],{"class":122},"            except",[109,48929,5082],{"class":126},[109,48931,48932,48935,48937,48939,48942],{"class":111,"line":11182},[109,48933,48934],{"class":133},"                print",[109,48936,714],{"class":126},[109,48938,1595],{"class":122},[109,48940,48941],{"class":278},"\"捕获到自定义异常\"",[109,48943,1330],{"class":126},[109,48945,48946],{"class":111,"line":11188},[109,48947,48948],{"class":115},"            # diff = (normalized_image_array - mean) ** 2\n",[109,48950,48951],{"class":111,"line":11215},[109,48952,48953],{"class":115},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[109,48955,48956],{"class":111,"line":11224},[109,48957,158],{"emptyLinePlaceholder":157},[109,48959,48960,48963,48965,48968,48970],{"class":111,"line":11230},[109,48961,48962],{"class":126},"variance ",[109,48964,130],{"class":122},[109,48966,48967],{"class":126}," sum_squared_diff ",[109,48969,2116],{"class":122},[109,48971,48725],{"class":126},[109,48973,48974],{"class":111,"line":11238},[109,48975,158],{"emptyLinePlaceholder":157},[109,48977,48978,48980,48982,48985],{"class":111,"line":11243},[109,48979,31590],{"class":133},[109,48981,714],{"class":126},[109,48983,48984],{"class":278},"\"Mean:\"",[109,48986,48987],{"class":126},", mean)\n",[109,48989,48990,48992,48994,48997],{"class":111,"line":17777},[109,48991,31590],{"class":133},[109,48993,714],{"class":126},[109,48995,48996],{"class":278},"\"Variance:\"",[109,48998,48999],{"class":126},", variance)\n",[99,49001,49003],{"className":31553,"code":49002,"language":31555,"meta":104,"style":104},"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",[106,49004,49005,49011,49017,49027,49033,49043,49057,49067,49077,49087,49091,49101,49111,49115,49119,49127,49132,49137,49156,49160,49165,49170,49175,49180,49221,49226,49236,49241,49254,49259,49264,49269,49274,49279,49283,49288,49293,49315,49319,49351,49365,49375,49385,49389,49399,49413,49423,49433,49443,49449,49453,49457,49461,49465,49469,49477,49497,49501,49505,49509,49513,49529,49533,49537,49545,49549,49553,49561,49565,49569,49573,49581,49585,49589,49593,49601,49605,49613,49617,49625,49629,49637,49641,49649,49653,49657,49665,49669,49673,49685,49709,49723,49727,49731,49735,49743,49747,49755,49759,49767,49771,49779,49783,49791,49795,49803,49807,49819,49823,49831,49835,49843,49847,49851,49855,49859,49867,49871,49887,49891,49899,49903,49907,49911,49915,49919,49923,49927,49943,49947,49959,49963,49975,49979,49991,49995,50003,50007,50015,50019,50023,50027,50033,50037,50045,50049,50065,50069,50077,50081,50097,50109,50113,50125,50129,50133,50141,50145,50149,50157,50161,50169,50173,50181,50185,50189,50231,50273,50277,50281,50297,50301,50317,50321,50325,50333,50337,50341,50353,50391,50395,50399,50407,50411,50425,50435,50441,50447,50453,50459,50463,50467,50473,50477,50481,50489,50493,50511,50515,50519,50523,50539,50543,50547,50551,50555,50559,50579,50599,50603,50607,50611,50619,50627,50631,50647,50667,50687,50691,50696,50705,50714,50719,50724,50729,50742,50747,50756,50765,50782],{"__ignoreMap":104},[109,49006,49007,49009],{"class":111,"line":112},[109,49008,31567],{"class":122},[109,49010,32997],{"class":126},[109,49012,49013,49015],{"class":111,"line":119},[109,49014,31567],{"class":122},[109,49016,33004],{"class":126},[109,49018,49019,49021,49023,49025],{"class":111,"line":140},[109,49020,31567],{"class":122},[109,49022,33015],{"class":126},[109,49024,32558],{"class":122},[109,49026,33020],{"class":126},[109,49028,49029,49031],{"class":111,"line":154},[109,49030,31567],{"class":122},[109,49032,31570],{"class":126},[109,49034,49035,49037,49039,49041],{"class":111,"line":161},[109,49036,31912],{"class":122},[109,49038,32590],{"class":126},[109,49040,31567],{"class":122},[109,49042,33037],{"class":126},[109,49044,49045,49047,49049,49051,49054],{"class":111,"line":167},[109,49046,31912],{"class":122},[109,49048,32543],{"class":126},[109,49050,31567],{"class":122},[109,49052,49053],{"class":126}," ImageFolder ",[109,49055,49056],{"class":115},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[109,49058,49059,49061,49063,49065],{"class":111,"line":185},[109,49060,31912],{"class":122},[109,49062,32573],{"class":126},[109,49064,31567],{"class":122},[109,49066,32578],{"class":126},[109,49068,49069,49071,49073,49075],{"class":111,"line":201},[109,49070,31567],{"class":122},[109,49072,32590],{"class":126},[109,49074,32558],{"class":122},[109,49076,32595],{"class":126},[109,49078,49079,49081,49083,49085],{"class":111,"line":206},[109,49080,31567],{"class":122},[109,49082,32607],{"class":126},[109,49084,32558],{"class":122},[109,49086,32612],{"class":126},[109,49088,49089],{"class":111,"line":218},[109,49090,33082],{"class":115},[109,49092,49093,49095,49097,49099],{"class":111,"line":223},[109,49094,31912],{"class":122},[109,49096,33089],{"class":126},[109,49098,31567],{"class":122},[109,49100,44206],{"class":126},[109,49102,49103,49105,49107,49109],{"class":111,"line":229},[109,49104,31912],{"class":122},[109,49106,31915],{"class":126},[109,49108,31567],{"class":122},[109,49110,31920],{"class":126},[109,49112,49113],{"class":111,"line":244},[109,49114,158],{"emptyLinePlaceholder":157},[109,49116,49117],{"class":111,"line":258},[109,49118,33117],{"class":115},[109,49120,49121,49123,49125],{"class":111,"line":263},[109,49122,33122],{"class":122},[109,49124,33125],{"class":211},[109,49126,33128],{"class":126},[109,49128,49129],{"class":111,"line":269},[109,49130,49131],{"class":115},"    # 导入自己的数据集，并进行数据处理\n",[109,49133,49134],{"class":111,"line":304},[109,49135,49136],{"class":115},"    # 定义数据集的路径\n",[109,49138,49139,49142,49144,49146,49148,49150,49154],{"class":111,"line":331},[109,49140,49141],{"class":133},"    ROOT_PATH",[109,49143,130],{"class":122},[109,49145,2202],{"class":122},[109,49147,1789],{"class":278},[109,49149,2090],{"class":133},[109,49151,49153],{"class":49152},"sA_wV","\u002Fdata\u002Ftrain",[109,49155,26308],{"class":278},[109,49157,49158],{"class":111,"line":336},[109,49159,158],{"emptyLinePlaceholder":157},[109,49161,49162],{"class":111,"line":364},[109,49163,49164],{"class":115},"    # 定义归一化方法\n",[109,49166,49167],{"class":111,"line":391},[109,49168,49169],{"class":115},"    # 这里需要先计算一下数据集的均值和方差\n",[109,49171,49172],{"class":111,"line":396},[109,49173,49174],{"class":115},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[109,49176,49177],{"class":111,"line":402},[109,49178,49179],{"class":115},"    # 第一个参数是均值，第二个参数是方差\n",[109,49181,49182,49185,49187,49190,49193,49195,49198,49200,49203,49206,49209,49211,49214,49216,49219],{"class":111,"line":419},[109,49183,49184],{"class":126},"    normalize",[109,49186,130],{"class":122},[109,49188,49189],{"class":126},"transforms.Normalize([",[109,49191,49192],{"class":133},"0.162",[109,49194,1914],{"class":126},[109,49196,49197],{"class":133},"0.151",[109,49199,1914],{"class":126},[109,49201,49202],{"class":133},"0.138",[109,49204,49205],{"class":126},"],[",[109,49207,49208],{"class":133},"0.058",[109,49210,1914],{"class":126},[109,49212,49213],{"class":133},"0.052",[109,49215,1914],{"class":126},[109,49217,49218],{"class":133},"0.048",[109,49220,5994],{"class":126},[109,49222,49223],{"class":111,"line":435},[109,49224,49225],{"class":115},"    # 定义数据集处理方法变量\n",[109,49227,49228,49231,49233],{"class":111,"line":440},[109,49229,49230],{"class":126},"    train_transform",[109,49232,130],{"class":122},[109,49234,49235],{"class":126},"transforms.Compose([\n",[109,49237,49238],{"class":111,"line":467},[109,49239,49240],{"class":115},"        # 调整图像大小为224*224\n",[109,49242,49243,49246,49248,49250,49252],{"class":111,"line":494},[109,49244,49245],{"class":126},"        transforms.Resize((",[109,49247,32676],{"class":133},[109,49249,1914],{"class":126},[109,49251,32676],{"class":133},[109,49253,43797],{"class":126},[109,49255,49256],{"class":111,"line":499},[109,49257,49258],{"class":115},"        # 将图像转换为张量\n",[109,49260,49261],{"class":111,"line":526},[109,49262,49263],{"class":126},"        transforms.ToTensor(),\n",[109,49265,49266],{"class":111,"line":552},[109,49267,49268],{"class":126},"        normalize])\n",[109,49270,49271],{"class":111,"line":557},[109,49272,49273],{"class":115},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[109,49275,49276],{"class":111,"line":584},[109,49277,49278],{"class":115},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[109,49280,49281],{"class":111,"line":611},[109,49282,158],{"emptyLinePlaceholder":157},[109,49284,49285],{"class":111,"line":616},[109,49286,49287],{"class":115},"    # 加载数据集\n",[109,49289,49290],{"class":111,"line":633},[109,49291,49292],{"class":115},"    # 传入数据集路径与处理方法\n",[109,49294,49295,49297,49299,49302,49305,49307,49310,49312],{"class":111,"line":649},[109,49296,33133],{"class":126},[109,49298,130],{"class":122},[109,49300,49301],{"class":126},"ImageFolder(",[109,49303,49304],{"class":133},"ROOT_PATH",[109,49306,1914],{"class":126},[109,49308,49309],{"class":6553},"transform",[109,49311,130],{"class":122},[109,49313,49314],{"class":126},"train_transform)\n",[109,49316,49317],{"class":111,"line":676},[109,49318,158],{"emptyLinePlaceholder":157},[109,49320,49321,49323,49325,49327,49329,49331,49333,49335,49337,49339,49341,49343,49345,49347,49349],{"class":111,"line":703},[109,49322,33185],{"class":126},[109,49324,130],{"class":122},[109,49326,33190],{"class":126},[109,49328,33193],{"class":133},[109,49330,714],{"class":126},[109,49332,33198],{"class":133},[109,49334,1988],{"class":122},[109,49336,8684],{"class":133},[109,49338,33205],{"class":126},[109,49340,33193],{"class":133},[109,49342,714],{"class":126},[109,49344,33212],{"class":133},[109,49346,1988],{"class":122},[109,49348,8684],{"class":133},[109,49350,33219],{"class":126},[109,49352,49353,49355,49357,49359,49361,49363],{"class":111,"line":708},[109,49354,33224],{"class":126},[109,49356,130],{"class":122},[109,49358,33229],{"class":126},[109,49360,32712],{"class":6553},[109,49362,130],{"class":122},[109,49364,32717],{"class":126},[109,49366,49367,49369,49371,49373],{"class":111,"line":723},[109,49368,33240],{"class":6553},[109,49370,130],{"class":122},[109,49372,1735],{"class":133},[109,49374,32641],{"class":126},[109,49376,49377,49379,49381,49383],{"class":111,"line":728},[109,49378,33252],{"class":6553},[109,49380,130],{"class":122},[109,49382,32651],{"class":133},[109,49384,32641],{"class":126},[109,49386,49387],{"class":111,"line":739},[109,49388,33263],{"class":115},[109,49390,49391,49393,49395,49397],{"class":111,"line":9352},[109,49392,33268],{"class":6553},[109,49394,130],{"class":122},[109,49396,1931],{"class":133},[109,49398,1330],{"class":126},[109,49400,49401,49403,49405,49407,49409,49411],{"class":111,"line":9364},[109,49402,33279],{"class":126},[109,49404,130],{"class":122},[109,49406,32709],{"class":126},[109,49408,32712],{"class":6553},[109,49410,130],{"class":122},[109,49412,33290],{"class":126},[109,49414,49415,49417,49419,49421],{"class":111,"line":9376},[109,49416,33295],{"class":6553},[109,49418,130],{"class":122},[109,49420,1735],{"class":133},[109,49422,32641],{"class":126},[109,49424,49425,49427,49429,49431],{"class":111,"line":11034},[109,49426,33306],{"class":6553},[109,49428,130],{"class":122},[109,49430,32651],{"class":133},[109,49432,32641],{"class":126},[109,49434,49435,49437,49439,49441],{"class":111,"line":11059},[109,49436,33317],{"class":6553},[109,49438,130],{"class":122},[109,49440,1931],{"class":133},[109,49442,1330],{"class":126},[109,49444,49445,49447],{"class":111,"line":11082},[109,49446,731],{"class":122},[109,49448,33330],{"class":126},[109,49450,49451],{"class":111,"line":11106},[109,49452,158],{"emptyLinePlaceholder":157},[109,49454,49455],{"class":111,"line":11111},[109,49456,33339],{"class":115},[109,49458,49459],{"class":111,"line":11116},[109,49460,33344],{"class":115},[109,49462,49463],{"class":111,"line":11121},[109,49464,158],{"emptyLinePlaceholder":157},[109,49466,49467],{"class":111,"line":11130},[109,49468,33353],{"class":115},[109,49470,49471,49473,49475],{"class":111,"line":11135},[109,49472,33122],{"class":122},[109,49474,33360],{"class":211},[109,49476,33363],{"class":126},[109,49478,49479,49481,49483,49485,49487,49489,49491,49493,49495],{"class":111,"line":11141},[109,49480,32412],{"class":126},[109,49482,130],{"class":122},[109,49484,31626],{"class":126},[109,49486,32419],{"class":278},[109,49488,3080],{"class":122},[109,49490,32424],{"class":126},[109,49492,3077],{"class":122},[109,49494,33382],{"class":278},[109,49496,1330],{"class":126},[109,49498,49499],{"class":111,"line":11162},[109,49500,158],{"emptyLinePlaceholder":157},[109,49502,49503],{"class":111,"line":11168},[109,49504,33397],{"class":115},[109,49506,49507],{"class":111,"line":11182},[109,49508,33402],{"class":115},[109,49510,49511],{"class":111,"line":11188},[109,49512,33407],{"class":115},[109,49514,49515,49517,49519,49521,49523,49525,49527],{"class":111,"line":11215},[109,49516,33412],{"class":126},[109,49518,130],{"class":122},[109,49520,33417],{"class":126},[109,49522,33420],{"class":6553},[109,49524,130],{"class":122},[109,49526,33425],{"class":133},[109,49528,1330],{"class":126},[109,49530,49531],{"class":111,"line":11224},[109,49532,158],{"emptyLinePlaceholder":157},[109,49534,49535],{"class":111,"line":11230},[109,49536,33436],{"class":115},[109,49538,49539,49541,49543],{"class":111,"line":11238},[109,49540,33441],{"class":126},[109,49542,130],{"class":122},[109,49544,33446],{"class":126},[109,49546,49547],{"class":111,"line":11243},[109,49548,158],{"emptyLinePlaceholder":157},[109,49550,49551],{"class":111,"line":17777},[109,49552,33455],{"class":115},[109,49554,49555,49557,49559],{"class":111,"line":17783},[109,49556,32464],{"class":126},[109,49558,130],{"class":122},[109,49560,33464],{"class":126},[109,49562,49563],{"class":111,"line":17806},[109,49564,33469],{"class":115},[109,49566,49567],{"class":111,"line":17812},[109,49568,33474],{"class":115},[109,49570,49571],{"class":111,"line":17835},[109,49572,33479],{"class":115},[109,49574,49575,49577,49579],{"class":111,"line":17849},[109,49576,33484],{"class":126},[109,49578,130],{"class":122},[109,49580,33489],{"class":126},[109,49582,49583],{"class":111,"line":17869},[109,49584,158],{"emptyLinePlaceholder":157},[109,49586,49587],{"class":111,"line":17875},[109,49588,33502],{"class":115},[109,49590,49591],{"class":111,"line":17886},[109,49592,33507],{"class":115},[109,49594,49595,49597,49599],{"class":111,"line":17909},[109,49596,33512],{"class":126},[109,49598,130],{"class":122},[109,49600,33517],{"class":133},[109,49602,49603],{"class":111,"line":17931},[109,49604,33522],{"class":115},[109,49606,49607,49609,49611],{"class":111,"line":17936},[109,49608,33527],{"class":126},[109,49610,130],{"class":122},[109,49612,33532],{"class":126},[109,49614,49615],{"class":111,"line":17942},[109,49616,33537],{"class":115},[109,49618,49619,49621,49623],{"class":111,"line":17956},[109,49620,33542],{"class":126},[109,49622,130],{"class":122},[109,49624,33532],{"class":126},[109,49626,49627],{"class":111,"line":17969},[109,49628,33551],{"class":115},[109,49630,49631,49633,49635],{"class":111,"line":17974},[109,49632,33556],{"class":126},[109,49634,130],{"class":122},[109,49636,33532],{"class":126},[109,49638,49639],{"class":111,"line":17988},[109,49640,33565],{"class":115},[109,49642,49643,49645,49647],{"class":111,"line":17993},[109,49644,33570],{"class":126},[109,49646,130],{"class":122},[109,49648,33532],{"class":126},[109,49650,49651],{"class":111,"line":17999},[109,49652,158],{"emptyLinePlaceholder":157},[109,49654,49655],{"class":111,"line":18004},[109,49656,33583],{"class":115},[109,49658,49659,49661,49663],{"class":111,"line":18018},[109,49660,33588],{"class":126},[109,49662,130],{"class":122},[109,49664,33593],{"class":126},[109,49666,49667],{"class":111,"line":18023},[109,49668,158],{"emptyLinePlaceholder":157},[109,49670,49671],{"class":111,"line":18028},[109,49672,33606],{"class":115},[109,49674,49675,49677,49679,49681,49683],{"class":111,"line":18042},[109,49676,1302],{"class":122},[109,49678,33613],{"class":126},[109,49680,27218],{"class":122},[109,49682,33618],{"class":133},[109,49684,33621],{"class":126},[109,49686,49687,49689,49691,49693,49695,49697,49699,49701,49703,49705,49707],{"class":111,"line":18054},[109,49688,33626],{"class":133},[109,49690,714],{"class":126},[109,49692,33631],{"class":278},[109,49694,33634],{"class":133},[109,49696,2116],{"class":278},[109,49698,33634],{"class":133},[109,49700,1789],{"class":278},[109,49702,33643],{"class":126},[109,49704,2064],{"class":122},[109,49706,1755],{"class":133},[109,49708,31672],{"class":126},[109,49710,49711,49713,49715,49717,49719,49721],{"class":111,"line":18059},[109,49712,33626],{"class":133},[109,49714,714],{"class":126},[109,49716,33658],{"class":278},[109,49718,1988],{"class":122},[109,49720,1008],{"class":133},[109,49722,1330],{"class":126},[109,49724,49725],{"class":111,"line":18072},[109,49726,158],{"emptyLinePlaceholder":157},[109,49728,49729],{"class":111,"line":18077},[109,49730,33673],{"class":115},[109,49732,49733],{"class":111,"line":18082},[109,49734,33678],{"class":115},[109,49736,49737,49739,49741],{"class":111,"line":18087},[109,49738,33683],{"class":126},[109,49740,130],{"class":122},[109,49742,33517],{"class":133},[109,49744,49745],{"class":111,"line":18100},[109,49746,33692],{"class":115},[109,49748,49749,49751,49753],{"class":111,"line":18105},[109,49750,33697],{"class":126},[109,49752,130],{"class":122},[109,49754,4430],{"class":133},[109,49756,49757],{"class":111,"line":33808},[109,49758,33706],{"class":115},[109,49760,49761,49763,49765],{"class":111,"line":33814},[109,49762,33711],{"class":126},[109,49764,130],{"class":122},[109,49766,33517],{"class":133},[109,49768,49769],{"class":111,"line":33820},[109,49770,33720],{"class":115},[109,49772,49773,49775,49777],{"class":111,"line":33826},[109,49774,33725],{"class":126},[109,49776,130],{"class":122},[109,49778,4430],{"class":133},[109,49780,49781],{"class":111,"line":33832},[109,49782,33734],{"class":115},[109,49784,49785,49787,49789],{"class":111,"line":33843},[109,49786,33739],{"class":126},[109,49788,130],{"class":122},[109,49790,4430],{"class":133},[109,49792,49793],{"class":111,"line":33849},[109,49794,33748],{"class":115},[109,49796,49797,49799,49801],{"class":111,"line":33869},[109,49798,33753],{"class":126},[109,49800,130],{"class":122},[109,49802,4430],{"class":133},[109,49804,49805],{"class":111,"line":33875},[109,49806,33762],{"class":115},[109,49808,49809,49811,49813,49815,49817],{"class":111,"line":33886},[109,49810,4747],{"class":122},[109,49812,32776],{"class":126},[109,49814,27218],{"class":122},[109,49816,32781],{"class":133},[109,49818,33775],{"class":126},[109,49820,49821],{"class":111,"line":33892},[109,49822,33780],{"class":115},[109,49824,49825,49827,49829],{"class":111,"line":33898},[109,49826,33785],{"class":126},[109,49828,130],{"class":122},[109,49830,33790],{"class":126},[109,49832,49833],{"class":111,"line":33904},[109,49834,33795],{"class":115},[109,49836,49837,49839,49841],{"class":111,"line":33910},[109,49838,33800],{"class":126},[109,49840,130],{"class":122},[109,49842,33805],{"class":126},[109,49844,49845],{"class":111,"line":33916},[109,49846,33811],{"class":115},[109,49848,49849],{"class":111,"line":33922},[109,49850,33817],{"class":126},[109,49852,49853],{"class":111,"line":33928},[109,49854,33823],{"class":115},[109,49856,49857],{"class":111,"line":33948},[109,49858,33829],{"class":115},[109,49860,49861,49863,49865],{"class":111,"line":33954},[109,49862,33835],{"class":126},[109,49864,130],{"class":122},[109,49866,33840],{"class":126},[109,49868,49869],{"class":111,"line":33970},[109,49870,33846],{"class":115},[109,49872,49873,49875,49877,49879,49881,49883,49885],{"class":111,"line":33976},[109,49874,33852],{"class":126},[109,49876,130],{"class":122},[109,49878,33857],{"class":126},[109,49880,33860],{"class":6553},[109,49882,130],{"class":122},[109,49884,1755],{"class":133},[109,49886,1330],{"class":126},[109,49888,49889],{"class":111,"line":33990},[109,49890,33872],{"class":115},[109,49892,49893,49895,49897],{"class":111,"line":33996},[109,49894,33878],{"class":126},[109,49896,130],{"class":122},[109,49898,33883],{"class":126},[109,49900,49901],{"class":111,"line":34011},[109,49902,33889],{"class":115},[109,49904,49905],{"class":111,"line":34017},[109,49906,33895],{"class":126},[109,49908,49909],{"class":111,"line":34026},[109,49910,33901],{"class":115},[109,49912,49913],{"class":111,"line":34032},[109,49914,33907],{"class":126},[109,49916,49917],{"class":111,"line":34041},[109,49918,33913],{"class":115},[109,49920,49921],{"class":111,"line":34047},[109,49922,33919],{"class":126},[109,49924,49925],{"class":111,"line":34053},[109,49926,33925],{"class":115},[109,49928,49929,49931,49933,49935,49937,49939,49941],{"class":111,"line":34062},[109,49930,33931],{"class":126},[109,49932,10795],{"class":122},[109,49934,33936],{"class":126},[109,49936,1988],{"class":122},[109,49938,33941],{"class":126},[109,49940,1314],{"class":133},[109,49942,1330],{"class":126},[109,49944,49945],{"class":111,"line":34068},[109,49946,33951],{"class":115},[109,49948,49949,49951,49953,49955,49957],{"class":111,"line":34079},[109,49950,33957],{"class":126},[109,49952,10795],{"class":122},[109,49954,33962],{"class":126},[109,49956,4296],{"class":122},[109,49958,33967],{"class":126},[109,49960,49961],{"class":111,"line":34085},[109,49962,33973],{"class":115},[109,49964,49965,49967,49969,49971,49973],{"class":111,"line":34104},[109,49966,33979],{"class":126},[109,49968,10795],{"class":122},[109,49970,33941],{"class":126},[109,49972,1314],{"class":133},[109,49974,1330],{"class":126},[109,49976,49977],{"class":111,"line":34110},[109,49978,33993],{"class":115},[109,49980,49981,49983,49985,49987,49989],{"class":111,"line":34121},[109,49982,4747],{"class":122},[109,49984,34001],{"class":126},[109,49986,27218],{"class":122},[109,49988,32781],{"class":133},[109,49990,34008],{"class":126},[109,49992,49993],{"class":111,"line":34127},[109,49994,34014],{"class":115},[109,49996,49997,49999,50001],{"class":111,"line":34147},[109,49998,33785],{"class":126},[109,50000,130],{"class":122},[109,50002,33790],{"class":126},[109,50004,50005],{"class":111,"line":34163},[109,50006,34029],{"class":115},[109,50008,50009,50011,50013],{"class":111,"line":34169},[109,50010,33800],{"class":126},[109,50012,130],{"class":122},[109,50014,33805],{"class":126},[109,50016,50017],{"class":111,"line":34183},[109,50018,34044],{"class":115},[109,50020,50021],{"class":111,"line":34189},[109,50022,34050],{"class":126},[109,50024,50025],{"class":111,"line":34195},[109,50026,37531],{"class":115},[109,50028,50029,50031],{"class":111,"line":34206},[109,50030,34056],{"class":122},[109,50032,34059],{"class":126},[109,50034,50035],{"class":111,"line":34212},[109,50036,34065],{"class":115},[109,50038,50039,50041,50043],{"class":111,"line":34218},[109,50040,37546],{"class":126},[109,50042,130],{"class":122},[109,50044,33840],{"class":126},[109,50046,50047],{"class":111,"line":34228},[109,50048,34082],{"class":115},[109,50050,50051,50053,50055,50057,50059,50061,50063],{"class":111,"line":34234},[109,50052,37559],{"class":126},[109,50054,130],{"class":122},[109,50056,33857],{"class":126},[109,50058,33860],{"class":6553},[109,50060,130],{"class":122},[109,50062,1755],{"class":133},[109,50064,1330],{"class":126},[109,50066,50067],{"class":111,"line":34245},[109,50068,34107],{"class":115},[109,50070,50071,50073,50075],{"class":111,"line":34251},[109,50072,37580],{"class":126},[109,50074,130],{"class":122},[109,50076,33883],{"class":126},[109,50078,50079],{"class":111,"line":34261},[109,50080,34124],{"class":115},[109,50082,50083,50085,50087,50089,50091,50093,50095],{"class":111,"line":34266},[109,50084,37593],{"class":126},[109,50086,10795],{"class":122},[109,50088,37598],{"class":126},[109,50090,1988],{"class":122},[109,50092,33941],{"class":126},[109,50094,1314],{"class":133},[109,50096,1330],{"class":126},[109,50098,50099,50101,50103,50105,50107],{"class":111,"line":34272},[109,50100,37611],{"class":126},[109,50102,10795],{"class":122},[109,50104,33962],{"class":126},[109,50106,4296],{"class":122},[109,50108,33967],{"class":126},[109,50110,50111],{"class":111,"line":34321},[109,50112,37624],{"class":115},[109,50114,50115,50117,50119,50121,50123],{"class":111,"line":34368},[109,50116,37629],{"class":126},[109,50118,10795],{"class":122},[109,50120,33941],{"class":126},[109,50122,1314],{"class":133},[109,50124,1330],{"class":126},[109,50126,50127],{"class":111,"line":34373},[109,50128,34186],{"class":115},[109,50130,50131],{"class":111,"line":34379},[109,50132,34192],{"class":115},[109,50134,50135,50137,50139],{"class":111,"line":34398},[109,50136,34198],{"class":126},[109,50138,2116],{"class":122},[109,50140,34203],{"class":126},[109,50142,50143],{"class":111,"line":34404},[109,50144,34209],{"class":115},[109,50146,50147],{"class":111,"line":34424},[109,50148,34215],{"class":115},[109,50150,50151,50153,50155],{"class":111,"line":34430},[109,50152,34221],{"class":126},[109,50154,2116],{"class":122},[109,50156,34203],{"class":126},[109,50158,50159],{"class":111,"line":34436},[109,50160,34231],{"class":115},[109,50162,50163,50165,50167],{"class":111,"line":34446},[109,50164,34237],{"class":126},[109,50166,2116],{"class":122},[109,50168,34242],{"class":126},[109,50170,50171],{"class":111,"line":34451},[109,50172,34248],{"class":115},[109,50174,50175,50177,50179],{"class":111,"line":34457},[109,50176,34254],{"class":126},[109,50178,2116],{"class":122},[109,50180,34242],{"class":126},[109,50182,50183],{"class":111,"line":34473},[109,50184,158],{"emptyLinePlaceholder":157},[109,50186,50187],{"class":111,"line":34518},[109,50188,34269],{"class":115},[109,50190,50191,50193,50195,50197,50199,50201,50203,50205,50207,50209,50211,50213,50215,50217,50219,50221,50223,50225,50227,50229],{"class":111,"line":34524},[109,50192,33626],{"class":133},[109,50194,714],{"class":126},[109,50196,4935],{"class":278},[109,50198,33634],{"class":133},[109,50200,34283],{"class":278},[109,50202,2427],{"class":133},[109,50204,34288],{"class":122},[109,50206,2476],{"class":133},[109,50208,34293],{"class":278},[109,50210,2427],{"class":133},[109,50212,34288],{"class":122},[109,50214,2476],{"class":133},[109,50216,4935],{"class":278},[109,50218,34304],{"class":126},[109,50220,2064],{"class":122},[109,50222,1755],{"class":133},[109,50224,34311],{"class":126},[109,50226,2064],{"class":122},[109,50228,1755],{"class":133},[109,50230,34318],{"class":126},[109,50232,50233,50235,50237,50239,50241,50243,50245,50247,50249,50251,50253,50255,50257,50259,50261,50263,50265,50267,50269,50271],{"class":111,"line":34530},[109,50234,33626],{"class":133},[109,50236,714],{"class":126},[109,50238,4935],{"class":278},[109,50240,33634],{"class":133},[109,50242,34332],{"class":278},[109,50244,2427],{"class":133},[109,50246,34288],{"class":122},[109,50248,2476],{"class":133},[109,50250,34341],{"class":278},[109,50252,2427],{"class":133},[109,50254,34288],{"class":122},[109,50256,2476],{"class":133},[109,50258,4935],{"class":278},[109,50260,34352],{"class":126},[109,50262,2064],{"class":122},[109,50264,1755],{"class":133},[109,50266,34359],{"class":126},[109,50268,2064],{"class":122},[109,50270,1755],{"class":133},[109,50272,34318],{"class":126},[109,50274,50275],{"class":111,"line":34536},[109,50276,158],{"emptyLinePlaceholder":157},[109,50278,50279],{"class":111,"line":34547},[109,50280,34376],{"class":115},[109,50282,50283,50285,50287,50289,50291,50293,50295],{"class":111,"line":34553},[109,50284,3852],{"class":122},[109,50286,34384],{"class":126},[109,50288,2064],{"class":122},[109,50290,1755],{"class":133},[109,50292,2470],{"class":126},[109,50294,2490],{"class":122},[109,50296,34395],{"class":126},[109,50298,50299],{"class":111,"line":34559},[109,50300,34401],{"class":115},[109,50302,50303,50305,50307,50309,50311,50313,50315],{"class":111,"line":34565},[109,50304,34407],{"class":126},[109,50306,1584],{"class":133},[109,50308,130],{"class":122},[109,50310,34414],{"class":126},[109,50312,2064],{"class":122},[109,50314,1755],{"class":133},[109,50316,34421],{"class":126},[109,50318,50319],{"class":111,"line":34583},[109,50320,34427],{"class":115},[109,50322,50323],{"class":111,"line":34597},[109,50324,34433],{"class":115},[109,50326,50327,50329,50331],{"class":111,"line":34606},[109,50328,34439],{"class":126},[109,50330,130],{"class":122},[109,50332,33489],{"class":126},[109,50334,50335],{"class":111,"line":34615},[109,50336,158],{"emptyLinePlaceholder":157},[109,50338,50339],{"class":111,"line":34624},[109,50340,34454],{"class":115},[109,50342,50343,50345,50347,50349,50351],{"class":111,"line":34633},[109,50344,34460],{"class":126},[109,50346,130],{"class":122},[109,50348,34465],{"class":126},[109,50350,2064],{"class":122},[109,50352,34470],{"class":126},[109,50354,50355,50357,50359,50361,50363,50365,50367,50369,50371,50373,50375,50377,50379,50381,50383,50385,50387,50389],{"class":111,"line":34639},[109,50356,33626],{"class":133},[109,50358,714],{"class":126},[109,50360,34480],{"class":278},[109,50362,2427],{"class":133},[109,50364,34485],{"class":122},[109,50366,2476],{"class":133},[109,50368,2076],{"class":278},[109,50370,2427],{"class":133},[109,50372,34485],{"class":122},[109,50374,2476],{"class":133},[109,50376,34498],{"class":278},[109,50378,34501],{"class":126},[109,50380,34504],{"class":122},[109,50382,2438],{"class":133},[109,50384,34509],{"class":126},[109,50386,1865],{"class":122},[109,50388,2438],{"class":133},[109,50390,31672],{"class":126},[109,50392,50393],{"class":111,"line":34645},[109,50394,37908],{"class":115},[109,50396,50397],{"class":111,"line":34653},[109,50398,37913],{"class":115},[109,50400,50401,50403,50405],{"class":111,"line":34658},[109,50402,37918],{"class":126},[109,50404,34542],{"class":278},[109,50406,1330],{"class":126},[109,50408,50409],{"class":111,"line":34664},[109,50410,34562],{"class":115},[109,50412,50413,50415,50417,50419,50421,50423],{"class":111,"line":34675},[109,50414,34568],{"class":126},[109,50416,130],{"class":122},[109,50418,34573],{"class":126},[109,50420,34576],{"class":6553},[109,50422,130],{"class":122},[109,50424,808],{"class":126},[109,50426,50427,50429,50431,50433],{"class":111,"line":34681},[109,50428,34586],{"class":278},[109,50430,2391],{"class":126},[109,50432,34591],{"class":133},[109,50434,34594],{"class":126},[109,50436,50437,50439],{"class":111,"line":34701},[109,50438,34600],{"class":278},[109,50440,34603],{"class":126},[109,50442,50443,50445],{"class":111,"line":34707},[109,50444,34609],{"class":278},[109,50446,34612],{"class":126},[109,50448,50449,50451],{"class":111,"line":34713},[109,50450,34618],{"class":278},[109,50452,34621],{"class":126},[109,50454,50455,50457],{"class":111,"line":34719},[109,50456,34627],{"class":278},[109,50458,34630],{"class":126},[109,50460,50461],{"class":111,"line":34736},[109,50462,34636],{"class":126},[109,50464,50465],{"class":111,"line":34742},[109,50466,34642],{"class":115},[109,50468,50469,50471],{"class":111,"line":34748},[109,50470,731],{"class":122},[109,50472,34650],{"class":126},[109,50474,50475],{"class":111,"line":34754},[109,50476,158],{"emptyLinePlaceholder":157},[109,50478,50479],{"class":111,"line":34760},[109,50480,34661],{"class":115},[109,50482,50483,50485,50487],{"class":111,"line":34766},[109,50484,33122],{"class":122},[109,50486,34669],{"class":211},[109,50488,34672],{"class":126},[109,50490,50491],{"class":111,"line":34793},[109,50492,34678],{"class":115},[109,50494,50495,50497,50499,50501,50503,50505,50507,50509],{"class":111,"line":34817},[109,50496,34684],{"class":126},[109,50498,32868],{"class":6553},[109,50500,130],{"class":122},[109,50502,714],{"class":126},[109,50504,2030],{"class":133},[109,50506,1914],{"class":126},[109,50508,1831],{"class":133},[109,50510,31672],{"class":126},[109,50512,50513],{"class":111,"line":34823},[109,50514,34704],{"class":115},[109,50516,50517],{"class":111,"line":34829},[109,50518,34710],{"class":115},[109,50520,50521],{"class":111,"line":34835},[109,50522,34716],{"class":115},[109,50524,50525,50527,50529,50531,50533,50535,50537],{"class":111,"line":34846},[109,50526,32902],{"class":126},[109,50528,1755],{"class":133},[109,50530,1914],{"class":126},[109,50532,1618],{"class":133},[109,50534,1914],{"class":126},[109,50536,1755],{"class":133},[109,50538,1330],{"class":126},[109,50540,50541],{"class":111,"line":34857},[109,50542,34739],{"class":115},[109,50544,50545],{"class":111,"line":34863},[109,50546,34745],{"class":115},[109,50548,50549],{"class":111,"line":34880},[109,50550,34751],{"class":115},[109,50552,50553],{"class":111,"line":34903},[109,50554,34757],{"class":115},[109,50556,50557],{"class":111,"line":34926},[109,50558,34763],{"class":115},[109,50560,50561,50563,50565,50567,50569,50571,50573,50575,50577],{"class":111,"line":34932},[109,50562,34769],{"class":126},[109,50564,34772],{"class":278},[109,50566,34775],{"class":126},[109,50568,34778],{"class":278},[109,50570,1914],{"class":126},[109,50572,34783],{"class":6553},[109,50574,130],{"class":122},[109,50576,34788],{"class":278},[109,50578,1330],{"class":126},[109,50580,50581,50583,50585,50587,50589,50591,50593,50595,50597],{"class":111,"line":34937},[109,50582,34769],{"class":126},[109,50584,34772],{"class":278},[109,50586,34800],{"class":126},[109,50588,34803],{"class":278},[109,50590,1914],{"class":126},[109,50592,34783],{"class":6553},[109,50594,130],{"class":122},[109,50596,34812],{"class":278},[109,50598,1330],{"class":126},[109,50600,50601],{"class":111,"line":34946},[109,50602,34820],{"class":115},[109,50604,50605],{"class":111,"line":34956},[109,50606,34826],{"class":126},[109,50608,50609],{"class":111,"line":34962},[109,50610,34832],{"class":115},[109,50612,50613,50615,50617],{"class":111,"line":34967},[109,50614,34838],{"class":126},[109,50616,34841],{"class":278},[109,50618,1330],{"class":126},[109,50620,50621,50623,50625],{"class":111,"line":34973},[109,50622,34849],{"class":126},[109,50624,34852],{"class":278},[109,50626,1330],{"class":126},[109,50628,50629],{"class":111,"line":34986},[109,50630,34860],{"class":115},[109,50632,50633,50635,50637,50639,50641,50643,50645],{"class":111,"line":34992},[109,50634,32902],{"class":126},[109,50636,1755],{"class":133},[109,50638,1914],{"class":126},[109,50640,1618],{"class":133},[109,50642,1914],{"class":126},[109,50644,1618],{"class":133},[109,50646,1330],{"class":126},[109,50648,50649,50651,50653,50655,50657,50659,50661,50663,50665],{"class":111,"line":35003},[109,50650,34769],{"class":126},[109,50652,34772],{"class":278},[109,50654,34887],{"class":126},[109,50656,34778],{"class":278},[109,50658,1914],{"class":126},[109,50660,34783],{"class":6553},[109,50662,130],{"class":122},[109,50664,34898],{"class":278},[109,50666,1330],{"class":126},[109,50668,50669,50671,50673,50675,50677,50679,50681,50683,50685],{"class":111,"line":35014},[109,50670,34769],{"class":126},[109,50672,34772],{"class":278},[109,50674,34910],{"class":126},[109,50676,34803],{"class":278},[109,50678,1914],{"class":126},[109,50680,34783],{"class":6553},[109,50682,130],{"class":122},[109,50684,34921],{"class":278},[109,50686,1330],{"class":126},[109,50688,50689],{"class":111,"line":35033},[109,50690,34929],{"class":115},[109,50692,50694],{"class":111,"line":50693},219,[109,50695,34826],{"class":126},[109,50697,50699,50701,50703],{"class":111,"line":50698},220,[109,50700,34838],{"class":126},[109,50702,34772],{"class":278},[109,50704,1330],{"class":126},[109,50706,50708,50710,50712],{"class":111,"line":50707},221,[109,50709,34849],{"class":126},[109,50711,34951],{"class":278},[109,50713,1330],{"class":126},[109,50715,50717],{"class":111,"line":50716},222,[109,50718,34959],{"class":126},[109,50720,50722],{"class":111,"line":50721},223,[109,50723,158],{"emptyLinePlaceholder":157},[109,50725,50727],{"class":111,"line":50726},224,[109,50728,34970],{"class":115},[109,50730,50732,50734,50736,50738,50740],{"class":111,"line":50731},225,[109,50733,2922],{"class":122},[109,50735,32395],{"class":133},[109,50737,4296],{"class":122},[109,50739,32400],{"class":278},[109,50741,5082],{"class":126},[109,50743,50745],{"class":111,"line":50744},226,[109,50746,34989],{"class":115},[109,50748,50750,50752,50754],{"class":111,"line":50749},227,[109,50751,45721],{"class":126},[109,50753,130],{"class":122},[109,50755,45726],{"class":126},[109,50757,50759,50761,50763],{"class":111,"line":50758},228,[109,50760,35006],{"class":126},[109,50762,130],{"class":122},[109,50764,35011],{"class":126},[109,50766,50768,50770,50772,50774,50776,50778,50780],{"class":111,"line":50767},229,[109,50769,34568],{"class":126},[109,50771,130],{"class":122},[109,50773,45743],{"class":126},[109,50775,35024],{"class":6553},[109,50777,130],{"class":122},[109,50779,2438],{"class":133},[109,50781,1330],{"class":126},[109,50783,50785],{"class":111,"line":50784},230,[109,50786,35036],{"class":126},[23171,50788,50790],{"id":50789},"_242测试代码","2.4.2.测试代码",[19,50792,50793],{},"使用测试集进行测试与推理",[99,50795,50797],{"className":31553,"code":50796,"language":31555,"meta":104,"style":104},"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",[106,50798,50799,50805,50815,50825,50836,50846,50850,50854,50862,50867,50871,50888,50892,50896,50900,50904,50908,50940,50944,50952,50956,50968,50972,50976,50980,50984,50988,50992,50996,51000,51018,51032,51036,51046,51056,51066,51072,51076,51080,51088,51092,51108,51116,51120,51124,51132,51140,51144,51148,51152,51156,51162,51166,51176,51184,51192,51196,51200,51204,51212,51216,51232,51236,51240,51244,51256,51260,51272,51276,51280,51292,51296,51306,51310,51314,51326,51330,51338,51342,51346,51354,51358,51366,51370,51374,51378,51382,51386,51402,51410,51414,51418,51436,51442,51446,51456,51464,51472,51476,51480,51484,51488,51496,51500,51516,51520,51528,51536],{"__ignoreMap":104},[109,50800,50801,50803],{"class":111,"line":112},[109,50802,31567],{"class":122},[109,50804,31570],{"class":126},[109,50806,50807,50809,50811,50813],{"class":111,"line":119},[109,50808,31567],{"class":122},[109,50810,32590],{"class":126},[109,50812,32558],{"class":122},[109,50814,32595],{"class":126},[109,50816,50817,50819,50821,50823],{"class":111,"line":140},[109,50818,31912],{"class":122},[109,50820,32573],{"class":126},[109,50822,31567],{"class":122},[109,50824,32578],{"class":126},[109,50826,50827,50829,50831,50833],{"class":111,"line":154},[109,50828,31912],{"class":122},[109,50830,32543],{"class":126},[109,50832,31567],{"class":122},[109,50834,50835],{"class":126}," ImageFolder\n",[109,50837,50838,50840,50842,50844],{"class":111,"line":161},[109,50839,31912],{"class":122},[109,50841,33089],{"class":126},[109,50843,31567],{"class":122},[109,50845,45815],{"class":126},[109,50847,50848],{"class":111,"line":167},[109,50849,158],{"emptyLinePlaceholder":157},[109,50851,50852],{"class":111,"line":185},[109,50853,35126],{"class":115},[109,50855,50856,50858,50860],{"class":111,"line":201},[109,50857,33122],{"class":122},[109,50859,35133],{"class":211},[109,50861,33128],{"class":126},[109,50863,50864],{"class":111,"line":206},[109,50865,50866],{"class":115},"   # 导入自己的数据集，并进行数据处理\n",[109,50868,50869],{"class":111,"line":218},[109,50870,49136],{"class":115},[109,50872,50873,50875,50877,50879,50881,50883,50886],{"class":111,"line":223},[109,50874,49141],{"class":133},[109,50876,130],{"class":122},[109,50878,2202],{"class":122},[109,50880,1789],{"class":278},[109,50882,2090],{"class":133},[109,50884,50885],{"class":49152},"\u002Fdata\u002Ftest",[109,50887,26308],{"class":278},[109,50889,50890],{"class":111,"line":229},[109,50891,158],{"emptyLinePlaceholder":157},[109,50893,50894],{"class":111,"line":244},[109,50895,49164],{"class":115},[109,50897,50898],{"class":111,"line":258},[109,50899,49169],{"class":115},[109,50901,50902],{"class":111,"line":263},[109,50903,49174],{"class":115},[109,50905,50906],{"class":111,"line":269},[109,50907,49179],{"class":115},[109,50909,50910,50912,50914,50916,50918,50920,50922,50924,50926,50928,50930,50932,50934,50936,50938],{"class":111,"line":304},[109,50911,49184],{"class":126},[109,50913,130],{"class":122},[109,50915,49189],{"class":126},[109,50917,49192],{"class":133},[109,50919,1914],{"class":126},[109,50921,49197],{"class":133},[109,50923,1914],{"class":126},[109,50925,49202],{"class":133},[109,50927,49205],{"class":126},[109,50929,49208],{"class":133},[109,50931,1914],{"class":126},[109,50933,49213],{"class":133},[109,50935,1914],{"class":126},[109,50937,49218],{"class":133},[109,50939,5994],{"class":126},[109,50941,50942],{"class":111,"line":331},[109,50943,49225],{"class":115},[109,50945,50946,50948,50950],{"class":111,"line":336},[109,50947,49230],{"class":126},[109,50949,130],{"class":122},[109,50951,49235],{"class":126},[109,50953,50954],{"class":111,"line":364},[109,50955,49240],{"class":115},[109,50957,50958,50960,50962,50964,50966],{"class":111,"line":391},[109,50959,49245],{"class":126},[109,50961,32676],{"class":133},[109,50963,1914],{"class":126},[109,50965,32676],{"class":133},[109,50967,43797],{"class":126},[109,50969,50970],{"class":111,"line":396},[109,50971,49258],{"class":115},[109,50973,50974],{"class":111,"line":402},[109,50975,49263],{"class":126},[109,50977,50978],{"class":111,"line":419},[109,50979,49268],{"class":126},[109,50981,50982],{"class":111,"line":435},[109,50983,49273],{"class":115},[109,50985,50986],{"class":111,"line":440},[109,50987,49278],{"class":115},[109,50989,50990],{"class":111,"line":467},[109,50991,158],{"emptyLinePlaceholder":157},[109,50993,50994],{"class":111,"line":494},[109,50995,49287],{"class":115},[109,50997,50998],{"class":111,"line":499},[109,50999,49292],{"class":115},[109,51001,51002,51004,51006,51008,51010,51012,51014,51016],{"class":111,"line":526},[109,51003,35140],{"class":126},[109,51005,130],{"class":122},[109,51007,49301],{"class":126},[109,51009,49304],{"class":133},[109,51011,1914],{"class":126},[109,51013,49309],{"class":6553},[109,51015,130],{"class":122},[109,51017,49314],{"class":126},[109,51019,51020,51022,51024,51026,51028,51030],{"class":111,"line":552},[109,51021,35197],{"class":126},[109,51023,130],{"class":122},[109,51025,32709],{"class":126},[109,51027,32712],{"class":6553},[109,51029,130],{"class":122},[109,51031,35208],{"class":126},[109,51033,51034],{"class":111,"line":557},[109,51035,35213],{"class":115},[109,51037,51038,51040,51042,51044],{"class":111,"line":584},[109,51039,35218],{"class":6553},[109,51041,130],{"class":122},[109,51043,1755],{"class":133},[109,51045,32641],{"class":126},[109,51047,51048,51050,51052,51054],{"class":111,"line":611},[109,51049,35229],{"class":6553},[109,51051,130],{"class":122},[109,51053,32651],{"class":133},[109,51055,32641],{"class":126},[109,51057,51058,51060,51062,51064],{"class":111,"line":616},[109,51059,35240],{"class":6553},[109,51061,130],{"class":122},[109,51063,1314],{"class":133},[109,51065,1330],{"class":126},[109,51067,51068,51070],{"class":111,"line":633},[109,51069,731],{"class":122},[109,51071,35253],{"class":126},[109,51073,51074],{"class":111,"line":649},[109,51075,158],{"emptyLinePlaceholder":157},[109,51077,51078],{"class":111,"line":676},[109,51079,35262],{"class":115},[109,51081,51082,51084,51086],{"class":111,"line":703},[109,51083,33122],{"class":122},[109,51085,35269],{"class":211},[109,51087,35272],{"class":126},[109,51089,51090],{"class":111,"line":708},[109,51091,35277],{"class":115},[109,51093,51094,51096,51098,51100,51102,51104,51106],{"class":111,"line":723},[109,51095,32412],{"class":126},[109,51097,130],{"class":122},[109,51099,32419],{"class":278},[109,51101,3080],{"class":122},[109,51103,32424],{"class":126},[109,51105,3077],{"class":122},[109,51107,35294],{"class":278},[109,51109,51110,51112,51114],{"class":111,"line":728},[109,51111,32464],{"class":126},[109,51113,130],{"class":122},[109,51115,33464],{"class":126},[109,51117,51118],{"class":111,"line":739},[109,51119,158],{"emptyLinePlaceholder":157},[109,51121,51122],{"class":111,"line":9352},[109,51123,35311],{"class":115},[109,51125,51126,51128,51130],{"class":111,"line":9364},[109,51127,35316],{"class":126},[109,51129,130],{"class":122},[109,51131,33517],{"class":133},[109,51133,51134,51136,51138],{"class":111,"line":9376},[109,51135,35325],{"class":126},[109,51137,130],{"class":122},[109,51139,4430],{"class":133},[109,51141,51142],{"class":111,"line":11034},[109,51143,158],{"emptyLinePlaceholder":157},[109,51145,51146],{"class":111,"line":11059},[109,51147,35338],{"class":115},[109,51149,51150],{"class":111,"line":11082},[109,51151,35343],{"class":115},[109,51153,51154],{"class":111,"line":11106},[109,51155,35348],{"class":115},[109,51157,51158,51160],{"class":111,"line":11111},[109,51159,35353],{"class":122},[109,51161,34059],{"class":126},[109,51163,51164],{"class":111,"line":11116},[109,51165,35360],{"class":115},[109,51167,51168,51170,51172,51174],{"class":111,"line":11121},[109,51169,4747],{"class":122},[109,51171,35367],{"class":126},[109,51173,27218],{"class":122},[109,51175,35372],{"class":126},[109,51177,51178,51180,51182],{"class":111,"line":11130},[109,51179,35377],{"class":126},[109,51181,130],{"class":122},[109,51183,35382],{"class":126},[109,51185,51186,51188,51190],{"class":111,"line":11135},[109,51187,35387],{"class":126},[109,51189,130],{"class":122},[109,51191,35392],{"class":126},[109,51193,51194],{"class":111,"line":11141},[109,51195,35397],{"class":115},[109,51197,51198],{"class":111,"line":11162},[109,51199,34050],{"class":126},[109,51201,51202],{"class":111,"line":11168},[109,51203,35406],{"class":115},[109,51205,51206,51208,51210],{"class":111,"line":11182},[109,51207,33835],{"class":126},[109,51209,130],{"class":122},[109,51211,35415],{"class":126},[109,51213,51214],{"class":111,"line":11188},[109,51215,35420],{"class":115},[109,51217,51218,51220,51222,51224,51226,51228,51230],{"class":111,"line":11215},[109,51219,33852],{"class":126},[109,51221,130],{"class":122},[109,51223,33857],{"class":126},[109,51225,33860],{"class":6553},[109,51227,130],{"class":122},[109,51229,1755],{"class":133},[109,51231,1330],{"class":126},[109,51233,51234],{"class":111,"line":11224},[109,51235,35441],{"class":115},[109,51237,51238],{"class":111,"line":11230},[109,51239,35446],{"class":115},[109,51241,51242],{"class":111,"line":11238},[109,51243,35451],{"class":115},[109,51245,51246,51248,51250,51252,51254],{"class":111,"line":11243},[109,51247,35456],{"class":126},[109,51249,10795],{"class":122},[109,51251,33962],{"class":126},[109,51253,4296],{"class":122},[109,51255,35465],{"class":126},[109,51257,51258],{"class":111,"line":17777},[109,51259,35470],{"class":115},[109,51261,51262,51264,51266,51268,51270],{"class":111,"line":17783},[109,51263,35475],{"class":126},[109,51265,10795],{"class":122},[109,51267,35480],{"class":126},[109,51269,1314],{"class":133},[109,51271,1330],{"class":126},[109,51273,51274],{"class":111,"line":17806},[109,51275,158],{"emptyLinePlaceholder":157},[109,51277,51278],{"class":111,"line":17812},[109,51279,35493],{"class":115},[109,51281,51282,51284,51286,51288,51290],{"class":111,"line":17835},[109,51283,35498],{"class":126},[109,51285,130],{"class":122},[109,51287,35503],{"class":126},[109,51289,2116],{"class":122},[109,51291,35508],{"class":126},[109,51293,51294],{"class":111,"line":17849},[109,51295,35513],{"class":115},[109,51297,51298,51300,51302,51304],{"class":111,"line":17869},[109,51299,33626],{"class":133},[109,51301,714],{"class":126},[109,51303,35522],{"class":278},[109,51305,35525],{"class":126},[109,51307,51308],{"class":111,"line":17875},[109,51309,158],{"emptyLinePlaceholder":157},[109,51311,51312],{"class":111,"line":17886},[109,51313,35534],{"class":115},[109,51315,51316,51318,51320,51322,51324],{"class":111,"line":17909},[109,51317,2922],{"class":122},[109,51319,32395],{"class":133},[109,51321,4296],{"class":122},[109,51323,32400],{"class":278},[109,51325,5082],{"class":126},[109,51327,51328],{"class":111,"line":17931},[109,51329,35551],{"class":115},[109,51331,51332,51334,51336],{"class":111,"line":17936},[109,51333,32464],{"class":126},[109,51335,130],{"class":122},[109,51337,45726],{"class":126},[109,51339,51340],{"class":111,"line":17942},[109,51341,35564],{"class":115},[109,51343,51344],{"class":111,"line":17956},[109,51345,35569],{"class":115},[109,51347,51348,51350,51352],{"class":111,"line":17969},[109,51349,35574],{"class":126},[109,51351,35577],{"class":278},[109,51353,31672],{"class":126},[109,51355,51356],{"class":111,"line":17974},[109,51357,35584],{"class":115},[109,51359,51360,51362,51364],{"class":111,"line":17988},[109,51361,35197],{"class":126},[109,51363,130],{"class":122},[109,51365,35593],{"class":126},[109,51367,51368],{"class":111,"line":17993},[109,51369,35598],{"class":115},[109,51371,51372],{"class":111,"line":17999},[109,51373,35603],{"class":126},[109,51375,51376],{"class":111,"line":18004},[109,51377,158],{"emptyLinePlaceholder":157},[109,51379,51380],{"class":111,"line":18018},[109,51381,35612],{"class":115},[109,51383,51384],{"class":111,"line":18023},[109,51385,35617],{"class":115},[109,51387,51388,51390,51392,51394,51396,51398,51400],{"class":111,"line":18028},[109,51389,32412],{"class":126},[109,51391,130],{"class":122},[109,51393,32419],{"class":278},[109,51395,3080],{"class":122},[109,51397,32424],{"class":126},[109,51399,3077],{"class":122},[109,51401,35294],{"class":278},[109,51403,51404,51406,51408],{"class":111,"line":18042},[109,51405,32464],{"class":126},[109,51407,130],{"class":122},[109,51409,33464],{"class":126},[109,51411,51412],{"class":111,"line":18054},[109,51413,35646],{"class":115},[109,51415,51416],{"class":111,"line":18059},[109,51417,35651],{"class":115},[109,51419,51420,51422,51424,51426,51429,51431,51434],{"class":111,"line":18072},[109,51421,35656],{"class":126},[109,51423,130],{"class":122},[109,51425,1289],{"class":126},[109,51427,51428],{"class":278},"'猫'",[109,51430,1914],{"class":126},[109,51432,51433],{"class":278},"'狗'",[109,51435,34421],{"class":126},[109,51437,51438,51440],{"class":111,"line":18077},[109,51439,35353],{"class":122},[109,51441,34059],{"class":126},[109,51443,51444],{"class":111,"line":18082},[109,51445,35721],{"class":115},[109,51447,51448,51450,51452,51454],{"class":111,"line":18087},[109,51449,4747],{"class":122},[109,51451,35728],{"class":126},[109,51453,27218],{"class":122},[109,51455,35372],{"class":126},[109,51457,51458,51460,51462],{"class":111,"line":18100},[109,51459,33785],{"class":126},[109,51461,130],{"class":122},[109,51463,33790],{"class":126},[109,51465,51466,51468,51470],{"class":111,"line":18105},[109,51467,33800],{"class":126},[109,51469,130],{"class":122},[109,51471,33805],{"class":126},[109,51473,51474],{"class":111,"line":33808},[109,51475,158],{"emptyLinePlaceholder":157},[109,51477,51478],{"class":111,"line":33814},[109,51479,35757],{"class":115},[109,51481,51482],{"class":111,"line":33820},[109,51483,34050],{"class":126},[109,51485,51486],{"class":111,"line":33826},[109,51487,35766],{"class":115},[109,51489,51490,51492,51494],{"class":111,"line":33832},[109,51491,33835],{"class":126},[109,51493,130],{"class":122},[109,51495,33840],{"class":126},[109,51497,51498],{"class":111,"line":33843},[109,51499,35779],{"class":115},[109,51501,51502,51504,51506,51508,51510,51512,51514],{"class":111,"line":33849},[109,51503,33852],{"class":126},[109,51505,130],{"class":122},[109,51507,33857],{"class":126},[109,51509,33860],{"class":6553},[109,51511,130],{"class":122},[109,51513,1755],{"class":133},[109,51515,1330],{"class":126},[109,51517,51518],{"class":111,"line":33869},[109,51519,35800],{"class":115},[109,51521,51522,51524,51526],{"class":111,"line":33875},[109,51523,35805],{"class":126},[109,51525,130],{"class":122},[109,51527,35810],{"class":126},[109,51529,51530,51532,51534],{"class":111,"line":33886},[109,51531,35815],{"class":126},[109,51533,130],{"class":122},[109,51535,35820],{"class":126},[109,51537,51538,51540,51542,51544,51546,51548,51550,51552],{"class":111,"line":33892},[109,51539,35825],{"class":133},[109,51541,714],{"class":126},[109,51543,35830],{"class":278},[109,51545,35833],{"class":126},[109,51547,35836],{"class":278},[109,51549,1914],{"class":126},[109,51551,35841],{"class":278},[109,51553,35844],{"class":126},[1467,51555,51556],{},"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":104,"searchDepth":119,"depth":119,"links":51558},[51559,51560,51561,51562],{"id":31766,"depth":140,"text":31767},{"id":39014,"depth":140,"text":39015},{"id":42447,"depth":140,"text":42448},{"id":46456,"depth":140,"text":46457},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31758,"description":24550},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51569,"title":51570,"body":51571,"description":24550,"extension":1476,"meta":51578,"navigation":157,"path":51579,"seo":51580,"stem":51581,"__hash__":51582},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51572,"toc":51576},[51573],[10,51574,51570],{"id":51575},"_3yolo模型学习",{"title":104,"searchDepth":119,"depth":119,"links":51577},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51570,"description":24550},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51584,"title":51585,"body":51586,"description":51593,"extension":1476,"meta":51594,"navigation":157,"path":51596,"seo":51597,"stem":51598,"__hash__":51599},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51587,"toc":51591},[51588],[19,51589,51590],{},"yolo模型还未补充",{"title":104,"searchDepth":119,"depth":119,"links":51592},[],"深度学习学习",{"category":51595},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51585,"description":51593},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51601,"title":51602,"body":51603,"description":24550,"extension":1476,"meta":51628,"navigation":157,"path":51629,"seo":51630,"stem":51631,"__hash__":51632},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51604,"toc":51626},[51605,51608,51611,51616,51623],[10,51606,51602],{"id":51607},"_1工具",[19,51609,51610],{},"提示错误插件：有问题会提前报错",[19,51612,51613],{},[938,51614],{"alt":104,"src":51615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51617,51618],{},[1776,51619,51622],{"href":51620,"rel":51621},"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",[25039],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51624,51625],{},"alt键加上下箭头可以实现语句的移动",{"title":104,"searchDepth":119,"depth":119,"links":51627},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51602,"description":24550},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51634,"title":51635,"body":51636,"description":24550,"extension":1476,"meta":54500,"navigation":157,"path":54501,"seo":54502,"stem":54503,"__hash__":54504},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51637,"toc":54451},[51638,51641,51645,51649,51654,51657,51662,51666,51673,51678,51685,51690,51697,51702,51706,51711,51714,51718,51723,51727,51732,51735,51738,51741,51744,51747,51750,51753,51756,51761,51766,51771,51775,51778,51781,51785,51790,51793,51801,51806,51823,51831,51836,51841,51846,51851,51856,51859,51864,51869,51873,51882,51887,51892,51896,51901,51904,51908,51913,51921,51926,51931,51934,51939,51944,51949,51952,51955,51958,51963,51968,51971,51976,51979,51984,51987,51990,51993,51998,52001,52004,52019,52024,52029,52034,52037,52040,52043,52057,52060,52065,52070,52073,52076,52079,52082,52085,52088,52091,52095,52099,52104,52108,52111,52116,52121,52124,52129,52132,52136,52141,52144,52147,52150,52153,52156,52159,52162,52165,52168,52172,52177,52182,52187,52190,52193,52197,52202,52205,52209,52212,52215,52220,52223,52226,52230,52234,52237,52242,52247,52250,52279,52284,52289,52294,52299,52303,52308,52312,52317,52320,52324,52328,52333,52337,52342,52347,52351,52356,52359,52361,52364,52369,52373,52378,52382,52386,52391,52396,52401,52406,52410,52415,52420,52425,52428,52431,52436,52439,52444,52449,52454,52459,52463,53270,53274,53617,53622,53625,53628,53631,53634,53637,53640,53643,53646,53648,53651,53653,53656,53660,53665,53668,53671,53674,53678,53683,53688,53708,53711,53715,53720,53725,53742,53746,53775,53779,53801,53803,53842,53850,53856,53860,53863,53866,53871,53876,53879,53882,53885,53890,53895,53898,53901,53904,53907,53910,53913,53916,53919,53922,53925,53928,53930,53933,53936,53939,53942,53945,53948,53951,53954,53958,53963,53966,53971,53974,53977,53980,53983,53986,53989,53992,53994,53997,54000,54003,54006,54009,54012,54016,54019,54028,54031,54036,54039,54044,54047,54050,54053,54056,54059,54062,54065,54069,54073,54076,54079,54084,54089,54094,54098,54103,54108,54111,54114,54117,54120,54123,54128,54131,54136,54138,54143,54146,54150,54155,54158,54161,54166,54170,54173,54178,54181,54184,54213,54218,54221,54224,54227,54230,54233,54237,54240,54326,54330,54333,54338,54343,54350,54353,54356,54359,54362,54365,54370,54375,54378,54381,54384,54387,54390,54393,54396,54399,54402,54404,54407,54411,54416,54421,54426,54429,54434,54439,54442,54445,54448],[10,51639,51635],{"id":51640},"_2基础语法",[14,51642,51644],{"id":51643},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[51,51646,51648],{"id":51647},"_211-js组成","2.1.1 js组成",[765,51650,51651],{},[30,51652,51653],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51655,51656],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[765,51658,51659],{"start":119},[30,51660,51661],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[51,51663,51665],{"id":51664},"_212-js书写位置","2.1.2 js书写位置",[765,51667,51668],{},[30,51669,51670],{},[23,51671,51672],{},"内部 JavaScript",[19,51674,51675],{},[938,51676],{"alt":104,"src":51677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[765,51679,51680],{"start":119},[30,51681,51682],{},[23,51683,51684],{},"外部 JavaScript",[19,51686,51687],{},[938,51688],{"alt":104,"src":51689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[765,51691,51692],{"start":140},[30,51693,51694],{},[23,51695,51696],{},"内联 JavaScript",[19,51698,51699],{},[938,51700],{"alt":104,"src":51701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[51,51703,51705],{"id":51704},"_213-javascript注释","2.1.3 JavaScript注释",[19,51707,51708],{},[938,51709],{"alt":104,"src":51710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51712,51713],{},"alt+shift+a一定要记住！",[51,51715,51717],{"id":51716},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51719,51720],{},[938,51721],{"alt":104,"src":51722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[51,51724,51726],{"id":51725},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[765,51728,51729],{},[30,51730,51731],{},"输出语法：",[19,51733,51734],{},"①document.write('要出的内容')",[19,51736,51737],{},"向body内输出内容；",[19,51739,51740],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51742,51743],{},"②alert('要出的内容')",[19,51745,51746],{},"页面弹出警告对话框",[19,51748,51749],{},"③console.log('控制台打印')",[19,51751,51752],{},"控制台输出语法，程序员调试使用",[19,51754,51755],{},"输入log就行，自动生成：",[19,51757,51758],{},[938,51759],{"alt":104,"src":51760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[765,51762,51763],{"start":119},[30,51764,51765],{},"输入语法：",[19,51767,51768],{},[938,51769],{"alt":104,"src":51770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[51,51772,51774],{"id":51773},"_2116-字面量","21.1.6 字面量",[19,51776,51777],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51779,51780],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51782,51784],{"id":51783},"_22-变量","2.2 变量",[765,51786,51787],{},[30,51788,51789],{},"变量声明",[19,51791,51792],{},"let 变量名",[27,51794,51795,51798],{},[30,51796,51797],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[30,51799,51800],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[765,51802,51803],{"start":119},[30,51804,51805],{},"变量赋值",[99,51807,51811],{"className":51808,"code":51809,"language":51810,"meta":104,"style":104},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[106,51812,51813,51818],{"__ignoreMap":104},[109,51814,51815],{"class":111,"line":112},[109,51816,51817],{"class":126},"let age\n",[109,51819,51820],{"class":111,"line":119},[109,51821,51822],{"class":126},"age=18\n",[765,51824,51825,51828],{"start":140},[30,51826,51827],{},"连这些（变量的初始化）：let age=18",[30,51829,51830],{},"更新变量",[19,51832,51833],{},[938,51834],{"alt":104,"src":51835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[765,51837,51838],{"start":161},[30,51839,51840],{},"声明多个变量",[19,51842,51843],{},[938,51844],{"alt":104,"src":51845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[765,51847,51848],{"start":167},[30,51849,51850],{},"变量命名规则与规范",[19,51852,51853],{},[938,51854],{"alt":104,"src":51855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51857,51858],{},"遵守小驼峰！",[765,51860,51861],{"start":185},[30,51862,51863],{},"变量拓展-let和var的区别",[19,51865,51866],{},[938,51867],{"alt":104,"src":51868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51870,51872],{"id":51871},"_23-数组","2.3 数组",[99,51874,51876],{"className":51808,"code":51875,"language":51810,"meta":104,"style":104},"let arr = []\n",[106,51877,51878],{"__ignoreMap":104},[109,51879,51880],{"class":111,"line":112},[109,51881,51875],{"class":126},[19,51883,51884],{},[938,51885],{"alt":104,"src":51886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51888,51889],{},[938,51890],{"alt":104,"src":51891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51893,51895],{"id":51894},"_24-常量","2.4 常量",[19,51897,51898],{},[938,51899],{"alt":104,"src":51900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51902,51903],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51905,51907],{"id":51906},"_25-数据类型","2.5 数据类型",[19,51909,51910],{},[938,51911],{"alt":104,"src":51912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[765,51914,51915,51918],{},[30,51916,51917],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[30,51919,51920],{},"算数运算符：",[19,51922,51923],{},[938,51924],{"alt":104,"src":51925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[765,51927,51928],{"start":140},[30,51929,51930],{},"数字类型（Number）",[19,51932,51933],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51935,51936],{},[938,51937],{"alt":104,"src":51938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[765,51940,51941],{"start":154},[30,51942,51943],{},"字符串类型（string）",[19,51945,51946],{},[938,51947],{"alt":104,"src":51948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51950,51951],{},"反引号也是可以使用的",[19,51953,51954],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51956,51957],{},"例如：document.write(\"我今年\"+age+\"岁\")",[765,51959,51960],{"start":161},[30,51961,51962],{},"模板字符串",[19,51964,51965],{},[938,51966],{"alt":104,"src":51967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51969,51970],{},"类似于python的字符串格式化",[765,51972,51973],{"start":167},[30,51974,51975],{},"布尔类型",[19,51977,51978],{},"true 和 false",[765,51980,51981],{"start":185},[30,51982,51983],{},"未定义类型（underfined）",[19,51985,51986],{},"表示没有赋值",[19,51988,51989],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51991,51992],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[765,51994,51995],{"start":201},[30,51996,51997],{},"null（空类型）",[19,51999,52000],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52002,52003],{},"赋值了，但是内容为空",[99,52005,52007],{"className":51808,"code":52006,"language":51810,"meta":104,"style":104},"typeof null\n输出的是'object'，是一个对象数据类型\n",[106,52008,52009,52014],{"__ignoreMap":104},[109,52010,52011],{"class":111,"line":112},[109,52012,52013],{"class":126},"typeof null\n",[109,52015,52016],{"class":111,"line":119},[109,52017,52018],{"class":126},"输出的是'object'，是一个对象数据类型\n",[765,52020,52021],{"start":206},[30,52022,52023],{},"控制台检测数据类型",[19,52025,52026],{},[938,52027],{"alt":104,"src":52028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[765,52030,52031],{"start":218},[30,52032,52033],{},"类型转换",[19,52035,52036],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52038,52039],{},"转换方式：隐式转换和显示转换",[19,52041,52042],{},"①隐式转换",[27,52044,52045,52048,52051,52054],{},[30,52046,52047],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[30,52049,52050],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[30,52052,52053],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[30,52055,52056],{},"任何数据和字符串相加结果都是字符串",[19,52058,52059],{},"②显示转换",[19,52061,52062],{},[938,52063],{"alt":104,"src":52064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52066,52067],{},[938,52068],{"alt":104,"src":52069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52071,52072],{},"在输入的时候要用好隐式转换，简单写起来",[19,52074,52075],{},"let num = +prompt(’请输入数字：‘)",[19,52077,52078],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52080,52081],{},"console.log(parseInt('12.333px'))",[19,52083,52084],{},"输出为：12",[19,52086,52087],{},"console.log(parseInt('a'a'a12.333px'))",[19,52089,52090],{},"输出：NaN",[14,52092,52094],{"id":52093},"_26-运算符","2.6 运算符",[51,52096,52098],{"id":52097},"_261-赋值运算符","2.6.1 赋值运算符",[19,52100,52101],{},[938,52102],{"alt":104,"src":52103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[51,52105,52107],{"id":52106},"_262-一元运算符","2.6.2 一元运算符",[19,52109,52110],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52112,52113],{},[938,52114],{"alt":104,"src":52115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52117,52118],{},[938,52119],{"alt":104,"src":52120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52122,52123],{},"两者的区别：",[19,52125,52126],{},[938,52127],{"alt":104,"src":52128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52130,52131],{},"前置先自加；后置后加，代码执行完之后再加",[51,52133,52135],{"id":52134},"_263-比较运算符","2.6.3 比较运算符",[19,52137,52138],{},[938,52139],{"alt":104,"src":52140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52142,52143],{},"比较运算符也有隐式转换",[19,52145,52146],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52148,52149],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52151,52152],{},"要使用三等，开发的时候",[19,52154,52155],{},"NaN不等于任何人，包括它自己",[19,52157,52158],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52160,52161],{},"7\u002F10=0.7",[19,52163,52164],{},"最后：0.5+0.2=0.7",[19,52166,52167],{},"字符串比较，比较的是字符对应的ASCII码",[51,52169,52171],{"id":52170},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52173,52174],{},[938,52175],{"alt":104,"src":52176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52178,52179],{},[938,52180],{"alt":104,"src":52181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52183,52184],{},[938,52185],{"alt":104,"src":52186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52188,52189],{},"上述题目选D",[19,52191,52192],{},"与真2假1；或真1假2",[51,52194,52196],{"id":52195},"_265-运算符优先级","2.6.5 运算符优先级",[19,52198,52199],{},[938,52200],{"alt":104,"src":52201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52203,52204],{},"先算逻辑与，后算逻辑或",[14,52206,52208],{"id":52207},"_27-语句","2.7 语句",[19,52210,52211],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52213,52214],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52216,52217],{},[938,52218],{"alt":104,"src":52219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52221,52222],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52224,52225],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[51,52227,52229],{"id":52228},"_271-分支语句","2.7.1 分支语句",[23171,52231,52233],{"id":52232},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52235,52236],{},"if语句单行简单的话，可以不写{}，写在一行就行",[765,52238,52239],{},[30,52240,52241],{},"单分支语句",[19,52243,52244],{},[938,52245],{"alt":104,"src":52246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52248,52249],{},"除了0，所有数字都为真",[99,52251,52253],{"className":51808,"code":52252,"language":51810,"meta":104,"style":104},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[106,52254,52255,52260,52265,52270,52274],{"__ignoreMap":104},[109,52256,52257],{"class":111,"line":112},[109,52258,52259],{"class":126},"if（0) {\n",[109,52261,52262],{"class":111,"line":119},[109,52263,52264],{"class":126},"    let a=1\n",[109,52266,52267],{"class":111,"line":140},[109,52268,52269],{"class":126},"    alert(typeof a)\n",[109,52271,52272],{"class":111,"line":154},[109,52273,742],{"class":126},[109,52275,52276],{"class":111,"line":161},[109,52277,52278],{"class":126},"不输出，括号为假\n",[765,52280,52281],{"start":119},[30,52282,52283],{},"双分支语句",[19,52285,52286],{},[938,52287],{"alt":104,"src":52288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[765,52290,52291],{"start":140},[30,52292,52293],{},"多分支语句",[19,52295,52296],{},[938,52297],{"alt":104,"src":52298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23171,52300,52302],{"id":52301},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52304,52305],{},[938,52306],{"alt":104,"src":52307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23171,52309,52311],{"id":52310},"_2713-switch语句","2.7.1.3 switch语句",[19,52313,52314],{},[938,52315],{"alt":104,"src":52316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52318,52319],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[51,52321,52323],{"id":52322},"_272-循环语句","2.7.2 循环语句",[23171,52325,52327],{"id":52326},"_2721-断点演示","2.7.2.1 断点演示",[19,52329,52330],{},[938,52331],{"alt":104,"src":52332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23171,52334,52336],{"id":52335},"_2722-while循环","2.7.2.2 while循环",[19,52338,52339],{},[938,52340],{"alt":104,"src":52341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52343,52344],{},[938,52345],{"alt":104,"src":52346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23171,52348,52350],{"id":52349},"_2723-for循环","2.7.2.3 for循环",[19,52352,52353],{},[938,52354],{"alt":104,"src":52355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52357,52358],{},"for(;;) {",[19,52360,2476],{},[19,52362,52363],{},"表示无限循环",[19,52365,52366],{},[938,52367],{"alt":104,"src":52368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23171,52370,52372],{"id":52371},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52374,52375],{},[938,52376],{"alt":104,"src":52377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52379,52381],{"id":52380},"_28-数组","2.8 数组",[51,52383,52385],{"id":52384},"_281-基础认识","2.8.1 基础认识",[19,52387,52388],{},[938,52389],{"alt":104,"src":52390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52392,52393],{},[938,52394],{"alt":104,"src":52395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52397,52398],{},[938,52399],{"alt":104,"src":52400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52402,52403],{},[938,52404],{"alt":104,"src":52405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[51,52407,52409],{"id":52408},"_282-操作数组","2.8.2 操作数组",[19,52411,52412],{},[938,52413],{"alt":104,"src":52414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[765,52416,52417],{},[30,52418,52419],{},"添加元素",[19,52421,52422],{},[938,52423],{"alt":104,"src":52424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52426,52427],{},"console.log(arr.push('green'))",[19,52429,52430],{},"输出结果：为新数组的长度",[19,52432,52433],{},[938,52434],{"alt":104,"src":52435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52437,52438],{},"push用的非常多，一定要记住",[765,52440,52441],{},[30,52442,52443],{},"删除元素",[19,52445,52446],{},[938,52447],{"alt":104,"src":52448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52450,52451],{},[938,52452],{"alt":104,"src":52453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52455,52456],{},[938,52457],{"alt":104,"src":52458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[51,52460,52462],{"id":52461},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[99,52464,52466],{"className":51808,"code":52465,"language":51810,"meta":104,"style":104},"\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",[106,52467,52468,52483,52499,52503,52512,52530,52554,52576,52590,52598,52605,52617,52628,52632,52636,52643,52655,52670,52683,52702,52719,52734,52746,52758,52770,52774,52778,52789,52799,52811,52823,52835,52846,52850,52854,52866,52870,52884,52888,52892,52903,52917,52929,52943,52947,52956,52965,52969,52978,52982,52991,52996,53001,53014,53042,53047,53052,53077,53082,53086,53091,53096,53111,53115,53120,53150,53162,53178,53194,53208,53213,53220,53224,53229,53242,53250,53258,53262],{"__ignoreMap":104},[109,52469,52470,52473,52477,52480],{"class":111,"line":112},[109,52471,52472],{"class":126},"\u003C!",[109,52474,52476],{"class":52475},"s9eBZ","DOCTYPE",[109,52478,52479],{"class":211}," html",[109,52481,52482],{"class":126},">\n",[109,52484,52485,52487,52489,52492,52494,52497],{"class":111,"line":119},[109,52486,1320],{"class":126},[109,52488,51810],{"class":52475},[109,52490,52491],{"class":211}," lang",[109,52493,130],{"class":126},[109,52495,52496],{"class":278},"\"en\"",[109,52498,52482],{"class":126},[109,52500,52501],{"class":111,"line":140},[109,52502,158],{"emptyLinePlaceholder":157},[109,52504,52505,52507,52510],{"class":111,"line":154},[109,52506,1320],{"class":126},[109,52508,52509],{"class":52475},"head",[109,52511,52482],{"class":126},[109,52513,52514,52517,52520,52523,52525,52528],{"class":111,"line":161},[109,52515,52516],{"class":126},"    \u003C",[109,52518,52519],{"class":52475},"meta",[109,52521,52522],{"class":211}," charset",[109,52524,130],{"class":126},[109,52526,52527],{"class":278},"\"UTF-8\"",[109,52529,52482],{"class":126},[109,52531,52532,52534,52536,52539,52541,52544,52547,52549,52552],{"class":111,"line":167},[109,52533,52516],{"class":126},[109,52535,52519],{"class":52475},[109,52537,52538],{"class":211}," http-equiv",[109,52540,130],{"class":126},[109,52542,52543],{"class":278},"\"X-UA-Compatible\"",[109,52545,52546],{"class":211}," content",[109,52548,130],{"class":126},[109,52550,52551],{"class":278},"\"IE=edge\"",[109,52553,52482],{"class":126},[109,52555,52556,52558,52560,52562,52564,52567,52569,52571,52574],{"class":111,"line":185},[109,52557,52516],{"class":126},[109,52559,52519],{"class":52475},[109,52561,16093],{"class":211},[109,52563,130],{"class":126},[109,52565,52566],{"class":278},"\"viewport\"",[109,52568,52546],{"class":211},[109,52570,130],{"class":126},[109,52572,52573],{"class":278},"\"width=device-width, initial-scale=1.0\"",[109,52575,52482],{"class":126},[109,52577,52578,52580,52583,52586,52588],{"class":111,"line":201},[109,52579,52516],{"class":126},[109,52581,52582],{"class":52475},"title",[109,52584,52585],{"class":126},">Document\u003C\u002F",[109,52587,52582],{"class":52475},[109,52589,52482],{"class":126},[109,52591,52592,52594,52596],{"class":111,"line":206},[109,52593,52516],{"class":126},[109,52595,1467],{"class":52475},[109,52597,52482],{"class":126},[109,52599,52600,52603],{"class":111,"line":218},[109,52601,52602],{"class":52475},"        *",[109,52604,16745],{"class":126},[109,52606,52607,52610,52613,52615],{"class":111,"line":223},[109,52608,52609],{"class":133},"            margin",[109,52611,52612],{"class":126},": ",[109,52614,1314],{"class":133},[109,52616,137],{"class":126},[109,52618,52619,52622,52624,52626],{"class":111,"line":229},[109,52620,52621],{"class":133},"            padding",[109,52623,52612],{"class":126},[109,52625,1314],{"class":133},[109,52627,137],{"class":126},[109,52629,52630],{"class":111,"line":244},[109,52631,3884],{"class":126},[109,52633,52634],{"class":111,"line":258},[109,52635,158],{"emptyLinePlaceholder":157},[109,52637,52638,52641],{"class":111,"line":263},[109,52639,52640],{"class":211},"        .box",[109,52642,16745],{"class":126},[109,52644,52645,52648,52650,52653],{"class":111,"line":269},[109,52646,52647],{"class":133},"            display",[109,52649,52612],{"class":126},[109,52651,52652],{"class":133},"flex",[109,52654,137],{"class":126},[109,52656,52657,52660,52662,52665,52668],{"class":111,"line":304},[109,52658,52659],{"class":133},"            width",[109,52661,52612],{"class":126},[109,52663,52664],{"class":133},"700",[109,52666,52667],{"class":122},"px",[109,52669,137],{"class":126},[109,52671,52672,52675,52677,52679,52681],{"class":111,"line":331},[109,52673,52674],{"class":133},"            height",[109,52676,52612],{"class":126},[109,52678,5315],{"class":133},[109,52680,52667],{"class":122},[109,52682,137],{"class":126},[109,52684,52685,52688,52690,52692,52694,52697,52700],{"class":111,"line":336},[109,52686,52687],{"class":133},"            border-left",[109,52689,52612],{"class":126},[109,52691,1755],{"class":133},[109,52693,52667],{"class":122},[109,52695,52696],{"class":133}," solid",[109,52698,52699],{"class":133}," pink",[109,52701,137],{"class":126},[109,52703,52704,52707,52709,52711,52713,52715,52717],{"class":111,"line":364},[109,52705,52706],{"class":133},"            border-bottom",[109,52708,52612],{"class":126},[109,52710,1755],{"class":133},[109,52712,52667],{"class":122},[109,52714,52696],{"class":133},[109,52716,52699],{"class":133},[109,52718,137],{"class":126},[109,52720,52721,52723,52725,52727,52729,52732],{"class":111,"line":391},[109,52722,52609],{"class":133},[109,52724,52612],{"class":126},[109,52726,2188],{"class":133},[109,52728,52667],{"class":122},[109,52730,52731],{"class":133}," auto",[109,52733,137],{"class":126},[109,52735,52736,52739,52741,52744],{"class":111,"line":396},[109,52737,52738],{"class":133},"            justify-content",[109,52740,52612],{"class":126},[109,52742,52743],{"class":133},"space-around",[109,52745,137],{"class":126},[109,52747,52748,52751,52753,52756],{"class":111,"line":402},[109,52749,52750],{"class":133},"            align-items",[109,52752,52612],{"class":126},[109,52754,52755],{"class":133},"flex-end",[109,52757,137],{"class":126},[109,52759,52760,52763,52765,52768],{"class":111,"line":419},[109,52761,52762],{"class":133},"            text-align",[109,52764,52612],{"class":126},[109,52766,52767],{"class":133},"center",[109,52769,137],{"class":126},[109,52771,52772],{"class":111,"line":435},[109,52773,3884],{"class":126},[109,52775,52776],{"class":111,"line":440},[109,52777,158],{"emptyLinePlaceholder":157},[109,52779,52780,52782,52784,52787],{"class":111,"line":467},[109,52781,52640],{"class":211},[109,52783,2490],{"class":122},[109,52785,52786],{"class":52475},"div",[109,52788,16745],{"class":126},[109,52790,52791,52793,52795,52797],{"class":111,"line":494},[109,52792,52647],{"class":133},[109,52794,52612],{"class":126},[109,52796,52652],{"class":133},[109,52798,137],{"class":126},[109,52800,52801,52803,52805,52807,52809],{"class":111,"line":499},[109,52802,52659],{"class":133},[109,52804,52612],{"class":126},[109,52806,2188],{"class":133},[109,52808,52667],{"class":122},[109,52810,137],{"class":126},[109,52812,52813,52816,52818,52821],{"class":111,"line":526},[109,52814,52815],{"class":133},"            background-color",[109,52817,52612],{"class":126},[109,52819,52820],{"class":133},"pink",[109,52822,137],{"class":126},[109,52824,52825,52828,52830,52833],{"class":111,"line":552},[109,52826,52827],{"class":133},"            flex-direction",[109,52829,52612],{"class":126},[109,52831,52832],{"class":133},"column",[109,52834,137],{"class":126},[109,52836,52837,52839,52841,52844],{"class":111,"line":557},[109,52838,52738],{"class":133},[109,52840,52612],{"class":126},[109,52842,52843],{"class":133},"space-between",[109,52845,137],{"class":126},[109,52847,52848],{"class":111,"line":584},[109,52849,3884],{"class":126},[109,52851,52852],{"class":111,"line":611},[109,52853,158],{"emptyLinePlaceholder":157},[109,52855,52856,52858,52861,52864],{"class":111,"line":616},[109,52857,52640],{"class":211},[109,52859,52860],{"class":52475}," div",[109,52862,52863],{"class":52475}," span",[109,52865,16745],{"class":126},[109,52867,52868],{"class":111,"line":633},[109,52869,158],{"emptyLinePlaceholder":157},[109,52871,52872,52875,52877,52880,52882],{"class":111,"line":649},[109,52873,52874],{"class":133},"            margin-top",[109,52876,52612],{"class":126},[109,52878,52879],{"class":133},"-20",[109,52881,52667],{"class":122},[109,52883,137],{"class":126},[109,52885,52886],{"class":111,"line":676},[109,52887,3884],{"class":126},[109,52889,52890],{"class":111,"line":703},[109,52891,158],{"emptyLinePlaceholder":157},[109,52893,52894,52896,52898,52901],{"class":111,"line":708},[109,52895,52640],{"class":211},[109,52897,52860],{"class":52475},[109,52899,52900],{"class":52475}," h4",[109,52902,16745],{"class":126},[109,52904,52905,52908,52910,52913,52915],{"class":111,"line":723},[109,52906,52907],{"class":133},"            margin-bottom",[109,52909,52612],{"class":126},[109,52911,52912],{"class":133},"-35",[109,52914,52667],{"class":122},[109,52916,137],{"class":126},[109,52918,52919,52921,52923,52925,52927],{"class":111,"line":728},[109,52920,52659],{"class":133},[109,52922,52612],{"class":126},[109,52924,1892],{"class":133},[109,52926,52667],{"class":122},[109,52928,137],{"class":126},[109,52930,52931,52934,52936,52939,52941],{"class":111,"line":739},[109,52932,52933],{"class":133},"            margin-left",[109,52935,52612],{"class":126},[109,52937,52938],{"class":133},"-10",[109,52940,52667],{"class":122},[109,52942,137],{"class":126},[109,52944,52945],{"class":111,"line":9352},[109,52946,3884],{"class":126},[109,52948,52949,52952,52954],{"class":111,"line":9364},[109,52950,52951],{"class":126},"    \u003C\u002F",[109,52953,1467],{"class":52475},[109,52955,52482],{"class":126},[109,52957,52958,52961,52963],{"class":111,"line":9376},[109,52959,52960],{"class":126},"\u003C\u002F",[109,52962,52509],{"class":52475},[109,52964,52482],{"class":126},[109,52966,52967],{"class":111,"line":11034},[109,52968,158],{"emptyLinePlaceholder":157},[109,52970,52971,52973,52976],{"class":111,"line":11059},[109,52972,1320],{"class":126},[109,52974,52975],{"class":52475},"body",[109,52977,52482],{"class":126},[109,52979,52980],{"class":111,"line":11082},[109,52981,158],{"emptyLinePlaceholder":157},[109,52983,52984,52986,52989],{"class":111,"line":11106},[109,52985,52516],{"class":126},[109,52987,52988],{"class":52475},"script",[109,52990,52482],{"class":126},[109,52992,52993],{"class":111,"line":11111},[109,52994,52995],{"class":115},"        \u002F\u002F 1. 四次弹框效果\n",[109,52997,52998],{"class":111,"line":11116},[109,52999,53000],{"class":115},"        \u002F\u002F 声明一个新的数组\n",[109,53002,53003,53006,53009,53011],{"class":111,"line":11121},[109,53004,53005],{"class":122},"        let",[109,53007,53008],{"class":126}," arr ",[109,53010,130],{"class":122},[109,53012,53013],{"class":126}," []\n",[109,53015,53016,53018,53020,53023,53025,53027,53029,53031,53033,53036,53038,53040],{"class":111,"line":11130},[109,53017,4747],{"class":122},[109,53019,285],{"class":126},[109,53021,53022],{"class":122},"let",[109,53024,10756],{"class":126},[109,53026,130],{"class":122},[109,53028,26293],{"class":133},[109,53030,10763],{"class":126},[109,53032,2976],{"class":122},[109,53034,53035],{"class":133}," 4",[109,53037,4558],{"class":126},[109,53039,1327],{"class":122},[109,53041,13615],{"class":126},[109,53043,53044],{"class":111,"line":11135},[109,53045,53046],{"class":115},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[109,53048,53049],{"class":111,"line":11141},[109,53050,53051],{"class":115},"            \u002F\u002F arr.push(num)\n",[109,53053,53054,53057,53060,53062,53065,53067,53070,53072,53075],{"class":111,"line":11162},[109,53055,53056],{"class":126},"            arr.",[109,53058,53059],{"class":211},"push",[109,53061,714],{"class":126},[109,53063,53064],{"class":211},"prompt",[109,53066,714],{"class":126},[109,53068,53069],{"class":278},"`请输入第${",[109,53071,1345],{"class":126},[109,53073,53074],{"class":278},"}季度的数据:`",[109,53076,31672],{"class":126},[109,53078,53079],{"class":111,"line":11168},[109,53080,53081],{"class":115},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[109,53083,53084],{"class":111,"line":11182},[109,53085,3884],{"class":126},[109,53087,53088],{"class":111,"line":11188},[109,53089,53090],{"class":115},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[109,53092,53093],{"class":111,"line":11215},[109,53094,53095],{"class":115},"        \u002F\u002F 盒子开头\n",[109,53097,53098,53101,53104,53106,53109],{"class":111,"line":11224},[109,53099,53100],{"class":126},"        document.",[109,53102,53103],{"class":211},"write",[109,53105,714],{"class":126},[109,53107,53108],{"class":278},"` \u003Cdiv class=\"box\">`",[109,53110,1330],{"class":126},[109,53112,53113],{"class":111,"line":11230},[109,53114,158],{"emptyLinePlaceholder":157},[109,53116,53117],{"class":111,"line":11238},[109,53118,53119],{"class":115},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[109,53121,53122,53124,53126,53128,53130,53132,53134,53136,53138,53141,53144,53146,53148],{"class":111,"line":11243},[109,53123,4747],{"class":122},[109,53125,285],{"class":126},[109,53127,53022],{"class":122},[109,53129,10756],{"class":126},[109,53131,130],{"class":122},[109,53133,734],{"class":133},[109,53135,10763],{"class":126},[109,53137,1320],{"class":122},[109,53139,53140],{"class":126}," arr.",[109,53142,53143],{"class":133},"length",[109,53145,4558],{"class":126},[109,53147,1327],{"class":122},[109,53149,13615],{"class":126},[109,53151,53152,53155,53157,53159],{"class":111,"line":17777},[109,53153,53154],{"class":126},"            document.",[109,53156,53103],{"class":211},[109,53158,714],{"class":126},[109,53160,53161],{"class":278},"`\n",[109,53163,53164,53167,53169,53171,53173,53175],{"class":111,"line":17783},[109,53165,53166],{"class":278},"              \u003Cdiv style=\"height: ${",[109,53168,1282],{"class":126},[109,53170,1289],{"class":278},[109,53172,1345],{"class":126},[109,53174,2470],{"class":278},[109,53176,53177],{"class":278},"}px;\">\n",[109,53179,53180,53183,53185,53187,53189,53191],{"class":111,"line":17806},[109,53181,53182],{"class":278},"                \u003Cspan>${",[109,53184,1282],{"class":126},[109,53186,1289],{"class":278},[109,53188,1345],{"class":126},[109,53190,2470],{"class":278},[109,53192,53193],{"class":278},"}\u003C\u002Fspan>\n",[109,53195,53196,53199,53201,53203,53205],{"class":111,"line":17812},[109,53197,53198],{"class":278},"                \u003Ch4>第${",[109,53200,1345],{"class":126},[109,53202,46741],{"class":122},[109,53204,26293],{"class":133},[109,53206,53207],{"class":278},"}季度\u003C\u002Fh4>\n",[109,53209,53210],{"class":111,"line":17835},[109,53211,53212],{"class":278},"              \u003C\u002Fdiv>          \n",[109,53214,53215,53218],{"class":111,"line":17849},[109,53216,53217],{"class":278},"            `",[109,53219,1330],{"class":126},[109,53221,53222],{"class":111,"line":17869},[109,53223,3884],{"class":126},[109,53225,53226],{"class":111,"line":17875},[109,53227,53228],{"class":115},"        \u002F\u002F 盒子结尾\n",[109,53230,53231,53233,53235,53237,53240],{"class":111,"line":17886},[109,53232,53100],{"class":126},[109,53234,53103],{"class":211},[109,53236,714],{"class":126},[109,53238,53239],{"class":278},"` \u003C\u002Fdiv>`",[109,53241,1330],{"class":126},[109,53243,53244,53246,53248],{"class":111,"line":17909},[109,53245,52951],{"class":126},[109,53247,52988],{"class":52475},[109,53249,52482],{"class":126},[109,53251,53252,53254,53256],{"class":111,"line":17931},[109,53253,52960],{"class":126},[109,53255,52975],{"class":52475},[109,53257,52482],{"class":126},[109,53259,53260],{"class":111,"line":17936},[109,53261,158],{"emptyLinePlaceholder":157},[109,53263,53264,53266,53268],{"class":111,"line":17942},[109,53265,52960],{"class":126},[109,53267,51810],{"class":52475},[109,53269,52482],{"class":126},[51,53271,53273],{"id":53272},"_284-冒泡排序","2.8.4 冒泡排序",[99,53275,53277],{"className":51808,"code":53276,"language":51810,"meta":104,"style":104},"\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",[106,53278,53279,53289,53303,53307,53315,53330,53350,53362,53370,53374,53382,53390,53422,53455,53492,53497,53516,53521,53534,53549,53565,53569,53574,53578,53588,53597,53605,53609],{"__ignoreMap":104},[109,53280,53281,53283,53285,53287],{"class":111,"line":112},[109,53282,52472],{"class":126},[109,53284,52476],{"class":52475},[109,53286,52479],{"class":211},[109,53288,52482],{"class":126},[109,53290,53291,53293,53295,53297,53299,53301],{"class":111,"line":119},[109,53292,1320],{"class":126},[109,53294,51810],{"class":52475},[109,53296,52491],{"class":211},[109,53298,130],{"class":126},[109,53300,52496],{"class":278},[109,53302,52482],{"class":126},[109,53304,53305],{"class":111,"line":140},[109,53306,158],{"emptyLinePlaceholder":157},[109,53308,53309,53311,53313],{"class":111,"line":154},[109,53310,1320],{"class":126},[109,53312,52509],{"class":52475},[109,53314,52482],{"class":126},[109,53316,53317,53320,53322,53324,53326,53328],{"class":111,"line":161},[109,53318,53319],{"class":126},"  \u003C",[109,53321,52519],{"class":52475},[109,53323,52522],{"class":211},[109,53325,130],{"class":126},[109,53327,52527],{"class":278},[109,53329,52482],{"class":126},[109,53331,53332,53334,53336,53338,53340,53342,53344,53346,53348],{"class":111,"line":167},[109,53333,53319],{"class":126},[109,53335,52519],{"class":52475},[109,53337,16093],{"class":211},[109,53339,130],{"class":126},[109,53341,52566],{"class":278},[109,53343,52546],{"class":211},[109,53345,130],{"class":126},[109,53347,52573],{"class":278},[109,53349,52482],{"class":126},[109,53351,53352,53354,53356,53358,53360],{"class":111,"line":185},[109,53353,53319],{"class":126},[109,53355,52582],{"class":52475},[109,53357,52585],{"class":126},[109,53359,52582],{"class":52475},[109,53361,52482],{"class":126},[109,53363,53364,53366,53368],{"class":111,"line":201},[109,53365,52960],{"class":126},[109,53367,52509],{"class":52475},[109,53369,52482],{"class":126},[109,53371,53372],{"class":111,"line":206},[109,53373,158],{"emptyLinePlaceholder":157},[109,53375,53376,53378,53380],{"class":111,"line":218},[109,53377,1320],{"class":126},[109,53379,52975],{"class":52475},[109,53381,52482],{"class":126},[109,53383,53384,53386,53388],{"class":111,"line":223},[109,53385,53319],{"class":126},[109,53387,52988],{"class":52475},[109,53389,52482],{"class":126},[109,53391,53392,53395,53397,53399,53402,53404,53406,53408,53410,53412,53414,53416,53418,53420],{"class":111,"line":229},[109,53393,53394],{"class":122},"    let",[109,53396,53008],{"class":126},[109,53398,130],{"class":122},[109,53400,53401],{"class":126}," [",[109,53403,1856],{"class":133},[109,53405,13608],{"class":126},[109,53407,1831],{"class":133},[109,53409,13608],{"class":126},[109,53411,1612],{"class":133},[109,53413,13608],{"class":126},[109,53415,1618],{"class":133},[109,53417,13608],{"class":126},[109,53419,1755],{"class":133},[109,53421,34421],{"class":126},[109,53423,53424,53426,53428,53430,53432,53434,53436,53438,53440,53442,53444,53447,53449,53451,53453],{"class":111,"line":244},[109,53425,1302],{"class":122},[109,53427,285],{"class":126},[109,53429,53022],{"class":122},[109,53431,10756],{"class":126},[109,53433,130],{"class":122},[109,53435,734],{"class":133},[109,53437,10763],{"class":126},[109,53439,1320],{"class":122},[109,53441,53140],{"class":126},[109,53443,53143],{"class":133},[109,53445,53446],{"class":122}," -",[109,53448,26293],{"class":133},[109,53450,4558],{"class":126},[109,53452,1327],{"class":122},[109,53454,13615],{"class":126},[109,53456,53457,53460,53462,53464,53466,53468,53470,53472,53474,53476,53478,53480,53482,53484,53486,53488,53490],{"class":111,"line":258},[109,53458,53459],{"class":122},"      for",[109,53461,285],{"class":126},[109,53463,53022],{"class":122},[109,53465,10818],{"class":126},[109,53467,130],{"class":122},[109,53469,734],{"class":133},[109,53471,10825],{"class":126},[109,53473,1320],{"class":122},[109,53475,53140],{"class":126},[109,53477,53143],{"class":133},[109,53479,53446],{"class":122},[109,53481,10756],{"class":126},[109,53483,2064],{"class":122},[109,53485,26293],{"class":133},[109,53487,10832],{"class":126},[109,53489,1327],{"class":122},[109,53491,13615],{"class":126},[109,53493,53494],{"class":111,"line":263},[109,53495,53496],{"class":115},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[109,53498,53499,53501,53504,53506,53509,53511,53513],{"class":111,"line":269},[109,53500,3852],{"class":122},[109,53502,53503],{"class":126}," (arr[j] ",[109,53505,2490],{"class":122},[109,53507,53508],{"class":126}," arr[j ",[109,53510,1348],{"class":122},[109,53512,26293],{"class":133},[109,53514,53515],{"class":126},"]) {\n",[109,53517,53518],{"class":111,"line":304},[109,53519,53520],{"class":115},"          \u002F\u002F 交换两个变量\n",[109,53522,53523,53526,53529,53531],{"class":111,"line":331},[109,53524,53525],{"class":122},"          let",[109,53527,53528],{"class":126}," tmp ",[109,53530,130],{"class":122},[109,53532,53533],{"class":126}," arr[j]\n",[109,53535,53536,53539,53541,53543,53545,53547],{"class":111,"line":336},[109,53537,53538],{"class":126},"          arr[j] ",[109,53540,130],{"class":122},[109,53542,53508],{"class":126},[109,53544,1348],{"class":122},[109,53546,26293],{"class":133},[109,53548,34421],{"class":126},[109,53550,53551,53554,53556,53558,53560,53562],{"class":111,"line":364},[109,53552,53553],{"class":126},"          arr[j ",[109,53555,1348],{"class":122},[109,53557,26293],{"class":133},[109,53559,5780],{"class":126},[109,53561,130],{"class":122},[109,53563,53564],{"class":126}," tmp\n",[109,53566,53567],{"class":111,"line":391},[109,53568,3884],{"class":126},[109,53570,53571],{"class":111,"line":396},[109,53572,53573],{"class":126},"      }\n",[109,53575,53576],{"class":111,"line":402},[109,53577,1361],{"class":126},[109,53579,53580,53583,53585],{"class":111,"line":419},[109,53581,53582],{"class":126},"    document.",[109,53584,53103],{"class":211},[109,53586,53587],{"class":126},"(arr)\n",[109,53589,53590,53593,53595],{"class":111,"line":435},[109,53591,53592],{"class":126},"  \u003C\u002F",[109,53594,52988],{"class":52475},[109,53596,52482],{"class":126},[109,53598,53599,53601,53603],{"class":111,"line":440},[109,53600,52960],{"class":126},[109,53602,52975],{"class":52475},[109,53604,52482],{"class":126},[109,53606,53607],{"class":111,"line":467},[109,53608,158],{"emptyLinePlaceholder":157},[109,53610,53611,53613,53615],{"class":111,"line":494},[109,53612,52960],{"class":126},[109,53614,51810],{"class":52475},[109,53616,52482],{"class":126},[19,53618,53619],{},[938,53620],{"alt":104,"src":53621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53623,53624],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53626,53627],{},"let arr = [4, 2, 5, 1, 3]",[19,53629,53630],{},"\u002F\u002F 1.升序排列写法",[19,53632,53633],{},"arr.sort(function (a, b) {",[19,53635,53636],{},"return a - b",[19,53638,53639],{},"})",[19,53641,53642],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53644,53645],{},"\u002F\u002F 降序排列写法",[19,53647,53633],{},[19,53649,53650],{},"return b - a",[19,53652,53639],{},[19,53654,53655],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53657,53659],{"id":53658},"_29-函数","2.9 函数",[19,53661,53662],{},[938,53663],{"alt":104,"src":53664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53666,53667],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53669,53670],{},"函数的声明用function",[19,53672,53673],{},"函数里边可以嵌套函数",[51,53675,53677],{"id":53676},"_291-函数传参","2.9.1 函数传参",[19,53679,53680],{},[938,53681],{"alt":104,"src":53682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53684,53685],{},[938,53686],{"alt":104,"src":53687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[27,53689,53690,53693,53696,53699,53702,53705],{},[30,53691,53692],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[30,53694,53695],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[30,53697,53698],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[30,53700,53701],{},"开发中尽量保持形参和实参个数一致",[30,53703,53704],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[30,53706,53707],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53709,53710],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[51,53712,53714],{"id":53713},"_292-函数的返回值","2.9.2 函数的返回值",[19,53716,53717],{},[938,53718],{"alt":104,"src":53719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53721,53722],{},[938,53723],{"alt":104,"src":53724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[27,53726,53727,53730,53733,53736,53739],{},[30,53728,53729],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[30,53731,53732],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[30,53734,53735],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[30,53737,53738],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[30,53740,53741],{},"断点调试:进入函数内部看执行过程F11",[51,53743,53745],{"id":53744},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[99,53747,53749],{"className":51808,"code":53748,"language":51810,"meta":104,"style":104},"    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",[106,53750,53751,53756,53761,53765,53770],{"__ignoreMap":104},[109,53752,53753],{"class":111,"line":112},[109,53754,53755],{"class":126},"    function fn(a, b) {\n",[109,53757,53758],{"class":111,"line":119},[109,53759,53760],{"class":126},"      console.log(a + b);\n",[109,53762,53763],{"class":111,"line":140},[109,53764,1361],{"class":126},[109,53766,53767],{"class":111,"line":154},[109,53768,53769],{"class":126},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[109,53771,53772],{"class":111,"line":161},[109,53773,53774],{"class":126},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[51,53776,53778],{"id":53777},"_294-作用域","2.9.4 作用域",[27,53780,53781,53787,53792,53795,53798],{},[30,53782,53783,53784],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[23,53785,53786],{},"作用域",[30,53788,53789],{},[23,53790,53791],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[30,53793,53794],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[30,53796,53797],{},"函数内部可以直接所使用全局变量",[30,53799,53800],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53802,15806],{},[99,53804,53806],{"className":51808,"code":53805,"language":51810,"meta":104,"style":104},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[106,53807,53808,53813,53818,53822,53827,53832,53837],{"__ignoreMap":104},[109,53809,53810],{"class":111,"line":112},[109,53811,53812],{"class":126},"    function fun() {\n",[109,53814,53815],{"class":111,"line":119},[109,53816,53817],{"class":126},"      num = 10\n",[109,53819,53820],{"class":111,"line":140},[109,53821,1361],{"class":126},[109,53823,53824],{"class":111,"line":154},[109,53825,53826],{"class":126},"    fun()\n",[109,53828,53829],{"class":111,"line":161},[109,53830,53831],{"class":126},"    console.log(num)\n",[109,53833,53834],{"class":111,"line":167},[109,53835,53836],{"class":126},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[109,53838,53839],{"class":111,"line":185},[109,53840,53841],{"class":126},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[27,53843,53844,53847],{},[30,53845,53846],{},"函数内部的形参可以看做是局部变量",[30,53848,53849],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53851,53852,53853],{},"变量访问原则： ",[23,53854,53855],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[51,53857,53859],{"id":53858},"_295-匿名函数","2.9.5 匿名函数",[19,53861,53862],{},"函数可以分为具名函数和匿名函数",[19,53864,53865],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[765,53867,53868],{},[30,53869,53870],{},"函数表达式",[19,53872,53873],{},[938,53874],{"alt":104,"src":53875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53877,53878],{},"里边也可以写参数",[19,53880,53881],{},"具名函数调用位置可以随意调整；",[19,53883,53884],{},"匿名函数函数表达式形式只能在声明后才可以使用",[765,53886,53887],{"start":119},[30,53888,53889],{},"立即执行函数",[19,53891,53892],{},[938,53893],{"alt":104,"src":53894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53896,53897],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53899,53900],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53902,53903],{},"(function () {})();",[19,53905,53906],{},"不要落下最后的;",[19,53908,53909],{},"立即执行函数必须要加;",[19,53911,53912],{},"分号写前写后都没问题",[19,53914,53915],{},"写前：",[19,53917,53918],{},"(function() {})()",[19,53920,53921],{},";(function () {})();",[19,53923,53924],{},"写后:",[19,53926,53927],{},"(function() {})();",[19,53929,53903],{},[19,53931,53932],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53934,53935],{},"还有一种写法：",[19,53937,53938],{},"(function(){}());",[19,53940,53941],{},"或者:",[19,53943,53944],{},"!function(){}();",[19,53946,53947],{},"立即执行函数有时候也是可以加名字的：",[19,53949,53950],{},"(function flexible(window,document) {}(window,document));",[19,53952,53953],{},"省一些调用方法",[51,53955,53957],{"id":53956},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53959,53960],{},[938,53961],{"alt":104,"src":53962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53964,53965],{},"这样就不用非得给x,y初始化了",[19,53967,53968],{},[938,53969],{"alt":104,"src":53970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53972,53973],{},"代码执行时先看左边",[19,53975,53976],{},"例如：console.log(false && 3+5)",[19,53978,53979],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53981,53982],{},"&&都是真时，就返回最后一个真值",[19,53984,53985],{},"console.log(11 && 22)",[19,53987,53988],{},"输出22",[19,53990,53991],{},"逻辑与：遇真则真",[19,53993,15806],{},[19,53995,53996],{},"let age=1",[19,53998,53999],{},"console.log(11 || age++)",[19,54001,54002],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54004,54005],{},"console.log(11 || 22)",[19,54007,54008],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54010,54011],{},"||如果都是假的话，就取最后一个假的值了",[51,54013,54015],{"id":54014},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54017,54018],{},"显示转换：",[19,54020,54021,54024,54025],{},[23,54022,54023],{},"记忆","： ",[23,54026,54027],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54029,54030],{},"空字符串为假，其他字符串全为真",[19,54032,54033],{},[938,54034],{"alt":104,"src":54035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54037,54038],{},"隐式转换：",[19,54040,54041],{},[938,54042],{"alt":104,"src":54043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54045,54046],{},"隐式转换:",[19,54048,54049],{},"null+3=3",[19,54051,54052],{},"undefined+3=NaN",[19,54054,54055],{},"null==undefined 输出true,他两个都当0看",[19,54057,54058],{},"null===undefined 输出false",[19,54060,54061],{},"undefined做任何操作都是NaN",[19,54063,54064],{},"NaN不等于NaN，NaN表示计算错误",[14,54066,54068],{"id":54067},"_210-对象","2.10 对象",[51,54070,54072],{"id":54071},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54074,54075],{},"对象也是一种数据类型，里边的数据是无序的",[19,54077,54078],{},"对象由属性和方法组成",[19,54080,54081],{},[938,54082],{"alt":104,"src":54083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54085,54086],{},[938,54087],{"alt":104,"src":54088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54090,54091],{},[938,54092],{"alt":104,"src":54093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[51,54095,54097],{"id":54096},"_2102-对象属性","2.10.2 对象属性",[19,54099,54100],{},[938,54101],{"alt":104,"src":54102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[765,54104,54105],{},[30,54106,54107],{},"查询对象",[19,54109,54110],{},"对象名.属性 goods.uname",[19,54112,54113],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54115,54116],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54118,54119],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54121,54122],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[765,54124,54125],{"start":119},[30,54126,54127],{},"重新赋值",[19,54129,54130],{},"对象名.属性=新值",[765,54132,54133],{"start":140},[30,54134,54135],{},"增加新数据",[19,54137,54130],{},[765,54139,54140],{"start":154},[30,54141,54142],{},"删除对象中的属性",[19,54144,54145],{},"delete 对象名.属性",[51,54147,54149],{"id":54148},"_2103-对象方法","2.10.3 对象方法",[19,54151,54152],{},[938,54153],{"alt":104,"src":54154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54156,54157],{},"后边跟的是匿名函数",[19,54159,54160],{},"对象外面的叫函数；对象内部的叫方法",[19,54162,54163],{},[938,54164],{"alt":104,"src":54165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[51,54167,54169],{"id":54168},"_2104-遍历对象","2.10.4 遍历对象",[19,54171,54172],{},"理解为加括号的python字典遍历",[19,54174,54175],{},[938,54176],{"alt":104,"src":54177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54179,54180],{},"k是字符串类型",[19,54182,54183],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[99,54185,54187],{"className":51808,"code":54186,"language":51810,"meta":104,"style":104},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[106,54188,54189,54194,54199,54204,54209],{"__ignoreMap":104},[109,54190,54191],{"class":111,"line":112},[109,54192,54193],{"class":126},"   let arr = [1, 2, 3]\n",[109,54195,54196],{"class":111,"line":119},[109,54197,54198],{"class":126},"    for (let k in arr) {\n",[109,54200,54201],{"class":111,"line":140},[109,54202,54203],{"class":126},"      console.log(k)\n",[109,54205,54206],{"class":111,"line":154},[109,54207,54208],{"class":126},"      console.log(arr[k])\n",[109,54210,54211],{"class":111,"line":161},[109,54212,1361],{"class":126},[19,54214,54215],{},[938,54216],{"alt":104,"src":54217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54219,54220],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54222,54223],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54225,54226],{},"for in 得到的k是属性名",[52988,54228,54229],{},"\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,54231,54232],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[51,54234,54236],{"id":54235},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54238,54239],{},"数组中放对象信息",[99,54241,54245],{"className":54242,"code":54243,"language":54244,"meta":104,"style":104},"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",[106,54246,54247,54255,54260,54265,54270,54275,54280,54285,54290,54295,54300,54305,54310,54314,54318],{"__ignoreMap":104},[109,54248,54249,54251,54253],{"class":111,"line":112},[109,54250,1320],{"class":126},[109,54252,52988],{"class":52475},[109,54254,52482],{"class":126},[109,54256,54257],{"class":111,"line":119},[109,54258,54259],{"class":126},"    let students = [\n",[109,54261,54262],{"class":111,"line":140},[109,54263,54264],{"class":126},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[109,54266,54267],{"class":111,"line":154},[109,54268,54269],{"class":126},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[109,54271,54272],{"class":111,"line":161},[109,54273,54274],{"class":126},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[109,54276,54277],{"class":111,"line":167},[109,54278,54279],{"class":126},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[109,54281,54282],{"class":111,"line":185},[109,54283,54284],{"class":126},"    ]\n",[109,54286,54287],{"class":111,"line":201},[109,54288,54289],{"class":126},"    for (let i = 0; i \u003C students.length; i++) {\n",[109,54291,54292],{"class":111,"line":206},[109,54293,54294],{"class":126},"      for (let k in students[i]) {\n",[109,54296,54297],{"class":111,"line":218},[109,54298,54299],{"class":126},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[109,54301,54302],{"class":111,"line":223},[109,54303,54304],{"class":126},"        \u002F\u002F输出每个人的名字：\n",[109,54306,54307],{"class":111,"line":229},[109,54308,54309],{"class":126},"        \u002F\u002Fconsole.log(students[i].name)\n",[109,54311,54312],{"class":111,"line":244},[109,54313,53573],{"class":126},[109,54315,54316],{"class":111,"line":258},[109,54317,1361],{"class":126},[109,54319,54320,54322,54324],{"class":111,"line":263},[109,54321,53592],{"class":126},[109,54323,52988],{"class":52475},[109,54325,52482],{"class":126},[51,54327,54329],{"id":54328},"_2106-内置对象","2.10.6 内置对象",[19,54331,54332],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[765,54334,54335],{},[30,54336,54337],{},"数学对象Math",[19,54339,54340],{},[938,54341],{"alt":104,"src":54342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54344,54345],{},[1776,54346,54349],{"href":54347,"rel":54348},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25039],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54351,54352],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54354,54355],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54357,54358],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54360,54361],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54363,54364],{},"null属于对象数据类型",[765,54366,54367],{"start":119},[30,54368,54369],{},"生成任意范围随机数",[19,54371,54372],{},[938,54373],{"alt":104,"src":54374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54376,54377],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54379,54380],{},"乘以几就取不到几",[19,54382,54383],{},"取数组中的随机元素：",[19,54385,54386],{},"let arr = ['red', 'green', 'blue']",[19,54388,54389],{},"let random = Math.floor(Math.random() * arr.length)",[19,54391,54392],{},"console.log(arr[random])",[19,54394,54395],{},"这个函数得到的是全闭区间",[19,54397,54398],{},"function getRandom(N, M) {",[19,54400,54401],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54403,2476],{},[19,54405,54406],{},"console.log(getRandom(4, 8))",[51,54408,54410],{"id":54409},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54412,54413],{},[938,54414],{"alt":104,"src":54415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54417,54418],{},[938,54419],{"alt":104,"src":54420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54422,54423],{},[938,54424],{"alt":104,"src":54425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54427,54428],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54430,54431],{},[938,54432],{"alt":104,"src":54433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54435,54436],{},[938,54437],{"alt":104,"src":54438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54440,54441],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54443,54444],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54446,54447],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1467,54449,54450],{},"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":104,"searchDepth":119,"depth":119,"links":54452},[54453,54461,54462,54463,54464,54465,54472,54476,54482,54491],{"id":51643,"depth":119,"text":51644,"children":54454},[54455,54456,54457,54458,54459,54460],{"id":51647,"depth":140,"text":51648},{"id":51664,"depth":140,"text":51665},{"id":51704,"depth":140,"text":51705},{"id":51716,"depth":140,"text":51717},{"id":51725,"depth":140,"text":51726},{"id":51773,"depth":140,"text":51774},{"id":51783,"depth":119,"text":51784},{"id":51871,"depth":119,"text":51872},{"id":51894,"depth":119,"text":51895},{"id":51906,"depth":119,"text":51907},{"id":52093,"depth":119,"text":52094,"children":54466},[54467,54468,54469,54470,54471],{"id":52097,"depth":140,"text":52098},{"id":52106,"depth":140,"text":52107},{"id":52134,"depth":140,"text":52135},{"id":52170,"depth":140,"text":52171},{"id":52195,"depth":140,"text":52196},{"id":52207,"depth":119,"text":52208,"children":54473},[54474,54475],{"id":52228,"depth":140,"text":52229},{"id":52322,"depth":140,"text":52323},{"id":52380,"depth":119,"text":52381,"children":54477},[54478,54479,54480,54481],{"id":52384,"depth":140,"text":52385},{"id":52408,"depth":140,"text":52409},{"id":52461,"depth":140,"text":52462},{"id":53272,"depth":140,"text":53273},{"id":53658,"depth":119,"text":53659,"children":54483},[54484,54485,54486,54487,54488,54489,54490],{"id":53676,"depth":140,"text":53677},{"id":53713,"depth":140,"text":53714},{"id":53744,"depth":140,"text":53745},{"id":53777,"depth":140,"text":53778},{"id":53858,"depth":140,"text":53859},{"id":53956,"depth":140,"text":53957},{"id":54014,"depth":140,"text":54015},{"id":54067,"depth":119,"text":54068,"children":54492},[54493,54494,54495,54496,54497,54498,54499],{"id":54071,"depth":140,"text":54072},{"id":54096,"depth":140,"text":54097},{"id":54148,"depth":140,"text":54149},{"id":54168,"depth":140,"text":54169},{"id":54235,"depth":140,"text":54236},{"id":54328,"depth":140,"text":54329},{"id":54409,"depth":140,"text":54410},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51635,"description":24550},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54506,"title":54507,"body":54508,"description":24550,"extension":1476,"meta":77848,"navigation":157,"path":77849,"seo":77850,"stem":77851,"__hash__":77852},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54509,"toc":77788},[54510,54513,54516,54519,54524,54527,54530,54533,54537,54541,54547,54552,54560,54567,54570,54574,54579,54584,54589,54592,54595,54606,54609,54613,54616,54619,54624,54629,54634,54637,54640,54732,54735,54740,54743,54748,54751,54754,54759,54762,54767,54771,54774,54788,54792,54797,54800,54803,54807,54812,54815,54819,54823,54828,54832,54837,54840,54843,54846,54849,54852,54855,54860,54865,54893,54896,54899,54902,54907,54910,54913,54916,54919,54923,54952,54956,54961,54966,54969,54972,54975,54980,55095,55100,55105,55266,55271,55274,55278,55283,55288,55291,55294,55297,55300,55303,55306,55309,55312,55315,55318,55321,55324,55327,55330,55332,55335,55338,55341,55346,55350,55747,55750,55756,55760,55765,57047,57052,57055,57058,57061,57066,58262,58266,58272,58277,58280,58285,58290,58294,58298,58303,58306,58311,58314,58317,58321,59229,59232,59236,59457,59460,59463,59466,59692,59695,59919,59922,59926,59931,59934,59937,60165,60168,60201,60204,60208,60213,60217,60220,60223,60226,60229,60232,60235,60238,60243,61523,61527,61530,62623,62627,62630,62633,62636,62639,62643,62646,62649,62651,62659,64140,64144,64147,64150,64153,64362,64365,64369,64373,64378,64383,64386,64389,64394,64398,64403,64406,64515,64519,64524,64529,64532,64535,64539,64544,64549,64554,64557,64560,64571,64574,64579,64584,64587,64590,64663,64667,64672,64675,64677,64688,64692,64697,66023,66026,66029,66032,66034,66037,66040,66043,66046,66049,66052,66055,66058,66061,66064,66067,66070,66072,66074,66077,66081,67175,67178,67181,67197,67211,67214,67219,67225,67230,67234,67238,67243,67247,67252,67694,67699,67702,67706,67711,67714,67717,67721,67726,67730,67735,67740,67744,67749,67754,67757,67762,67767,67771,67776,67781,67885,67888,67892,67897,68263,68266,68269,68272,68275,68278,68281,68284,68287,69583,69587,69592,69597,69600,69603,69606,69609,69611,69616,69621,69624,69628,69633,69638,69643,69646,69649,69652,69655,69658,69663,69666,69670,69675,69680,69684,69689,69692,69697,69700,69703,69706,69709,69712,69717,69720,69723,69726,69729,69733,69738,69741,69745,69750,69753,69756,69760,69789,69792,69796,69800,69805,69809,69814,69817,69820,69823,69826,69829,69832,69835,69838,69841,69844,69847,69850,69853,69856,69860,69865,69870,69873,69877,69881,69886,69889,69893,69896,69899,69904,69909,69914,69919,69924,69927,69930,69935,69940,69944,69949,69952,69957,69960,69963,69966,69969,69974,69977,69986,69990,69995,69998,70001,70005,70008,70013,70017,70020,70026,70032,70036,70062,70065,71626,71629,72125,72128,72133,72138,72143,72147,72152,72157,72162,72166,72171,72174,72177,72180,72183,72187,72190,72195,72198,72203,72207,72212,72215,72220,72225,72230,72233,72236,72241,72246,72249,72252,72256,72259,72264,72267,72272,72275,72280,72285,72290,72293,72298,72363,72366,72377,72381,72386,72558,72562,72567,72570,72573,72576,72580,72591,72595,72598,72603,72608,72611,72614,72617,72620,72623,72625,72628,72631,72634,72639,72642,72647,72650,72654,72657,72660,72674,72678,72681,72736,72741,72744,72747,72752,72755,72759,72764,72894,72898,72903,72908,72989,72994,72998,73001,73006,73011,73017,73020,73023,73026,73030,73035,73038,73049,73053,73070,76117,76121,76124,76127,76130,76151,76155,76158,76166,76169,76174,76177,76180,76185,76190,76194,76215,76219,76224,76227,76230,76233,76236,76240,76245,76248,76252,76257,76260,76265,76268,76273,76276,76281,77484,77488,77493,77496,77501,77785],[10,54511,54507],{"id":54512},"_3web-apis",[19,54514,54515],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54517,54518],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54520,54521],{},[938,54522],{"alt":104,"src":54523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54525,54526],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54528,54529],{},"建议数组和对象使用 const 来声明",[19,54531,54532],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54534,54536],{"id":54535},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[51,54538,54540],{"id":54539},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54542,54543,54546],{},[106,54544,54545],{},"document"," = HTML 文件解析后的对象化表示；",[19,54548,54549,54551],{},[106,54550,54545],{}," ≠ HTML 文件本身",[19,54553,54554,54559],{},[23,54555,54556],{},[106,54557,54558],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54561,54562,54566],{},[23,54563,54564],{},[106,54565,54545],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54568,54569],{},"document实际上为window.document的简写",[51,54571,54573],{"id":54572},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54575,54576],{},[938,54577],{"alt":104,"src":54578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54580,54581],{},[938,54582],{"alt":104,"src":54583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54585,54586],{},[938,54587],{"alt":104,"src":54588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54590,54591],{},"console.dir()",[19,54593,54594],{},"dir用来打印对象",[27,54596,54597,54600,54603],{},[30,54598,54599],{},"任何一个标签，都是一个对象",[30,54601,54602],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[30,54604,54605],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54607,54608],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[51,54610,54612],{"id":54611},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54614,54615],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54617,54618],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54620,54621],{},[23,54622,54623],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[765,54625,54626],{},[30,54627,54628],{},"利用CSS选择器来获取标签元素",[19,54630,54631],{},[938,54632],{"alt":104,"src":54633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54635,54636],{},"里边的选择器必须必须加引号！！！",[19,54638,54639],{},"只选择第一个元素",[99,54641,54643],{"className":54242,"code":54642,"language":54244,"meta":104,"style":104},"\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",[106,54644,54645,54653,54674,54693,54701,54706,54711,54716,54724],{"__ignoreMap":104},[109,54646,54647,54649,54651],{"class":111,"line":112},[109,54648,1320],{"class":126},[109,54650,52975],{"class":52475},[109,54652,52482],{"class":126},[109,54654,54655,54657,54659,54662,54664,54667,54670,54672],{"class":111,"line":119},[109,54656,53319],{"class":126},[109,54658,52786],{"class":52475},[109,54660,54661],{"class":211}," class",[109,54663,130],{"class":126},[109,54665,54666],{"class":278},"\"box\"",[109,54668,54669],{"class":126},">123\u003C\u002F",[109,54671,52786],{"class":52475},[109,54673,52482],{"class":126},[109,54675,54676,54678,54680,54682,54684,54686,54689,54691],{"class":111,"line":140},[109,54677,53319],{"class":126},[109,54679,52786],{"class":52475},[109,54681,54661],{"class":211},[109,54683,130],{"class":126},[109,54685,54666],{"class":278},[109,54687,54688],{"class":126},">456\u003C\u002F",[109,54690,52786],{"class":52475},[109,54692,52482],{"class":126},[109,54694,54695,54697,54699],{"class":111,"line":154},[109,54696,53319],{"class":126},[109,54698,52988],{"class":52475},[109,54700,52482],{"class":126},[109,54702,54703],{"class":111,"line":161},[109,54704,54705],{"class":126},"    \u002F\u002F 1.获取匹配的第一个元素\n",[109,54707,54708],{"class":111,"line":167},[109,54709,54710],{"class":126},"    const box = document.querySelector('div')\n",[109,54712,54713],{"class":111,"line":185},[109,54714,54715],{"class":126},"    console.dir(box)\n",[109,54717,54718,54720,54722],{"class":111,"line":201},[109,54719,53592],{"class":126},[109,54721,52988],{"class":52475},[109,54723,52482],{"class":126},[109,54725,54726,54728,54730],{"class":111,"line":206},[109,54727,52960],{"class":126},[109,54729,52975],{"class":52475},[109,54731,52482],{"class":126},[19,54733,54734],{},"只选123，不选456",[19,54736,54737],{},[938,54738],{"alt":104,"src":54739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54741,54742],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54744,54745],{},[938,54746],{"alt":104,"src":54747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54749,54750],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54752,54753],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[765,54755,54756],{"start":119},[30,54757,54758],{},"其他方法来获取标签元素",[19,54760,54761],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54763,54764],{},[938,54765],{"alt":104,"src":54766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[51,54768,54770],{"id":54769},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54772,54773],{},"设置修改DOM元素内容有两种方式：",[27,54775,54776,54779,54782,54785],{},[30,54777,54778],{},"元素.innerText=''",[30,54780,54781],{},"元素.innerHTML=''",[30,54783,54784],{},"不写字符串输出数字也是可以的",[30,54786,54787],{},"元素.innerHtml=1",[23171,54789,54791],{"id":54790},"_3131-innertext","3.1.3.1 innerText",[19,54793,54794],{},[938,54795],{"alt":104,"src":54796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54798,54799],{},"思路：实现了修改盒子中的内容！",[19,54801,54802],{},"它只显示纯文本，不解析标签",[23171,54804,54806],{"id":54805},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54808,54809],{},[938,54810],{"alt":104,"src":54811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54813,54814],{},"相比于innerText，他的强大之处在于可以解析标签",[51,54816,54818],{"id":54817},"_314-操作元素属性","3.1.4 操作元素属性",[23171,54820,54822],{"id":54821},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54824,54825],{},[938,54826],{"alt":104,"src":54827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23171,54829,54831],{"id":54830},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54833,54834],{},[938,54835],{"alt":104,"src":54836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54838,54839],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54841,54842],{},"div.style.backgroundColor = 'hotpink'",[19,54844,54845],{},"如果按照css的写法，-表示减，就会出错",[19,54847,54848],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54850,54851],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54853,54854],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54856,54857],{},[938,54858],{"alt":104,"src":54859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54861,54862],{},[938,54863],{"alt":104,"src":54864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[765,54866,54867,54870,54873,54876,54879,54882],{},[30,54868,54869],{},"className这个方式就是修改很多样式的时候来使用的！",[30,54871,54872],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[30,54874,54875],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[30,54877,54878],{},"className为属性名，如果还用class的话就导致与关键字冲突",[30,54880,54881],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[30,54883,54884,54885,54890],{},"解析标签的时候就变为了",[52786,54886],{"className":54887},[54888,54889],"nav","box",[54891,54892],"br",{},[19,54894,54895],{},"例子：",[52786,54897],{"className":54898},[54888],[52988,54900,54901],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54903,54904],{},[938,54905],{"alt":104,"src":54906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54908,54909],{},"追加和删除类名用classList",[19,54911,54912],{},"常用于类似于开关的操作",[19,54914,54915],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54917,54918],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23171,54920,54922],{"id":54921},"_3143-牢记点","3.1.4.3 牢记点",[765,54924,54925,54928,54931,54934,54937,54940,54943,54946,54949],{},[30,54926,54927],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[30,54929,54930],{},"使用style属性操作css时不要忘记引号",[30,54932,54933],{},"使用className或者classList时也不要忘记引号",[30,54935,54936],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[30,54938,54939],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[30,54941,54942],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[30,54944,54945],{},"若： let arr=['1','2',3] arr[0]=1",[30,54947,54948],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[30,54950,54951],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[51,54953,54955],{"id":54954},"_315-操作表单元素","3.1.5 操作表单元素",[765,54957,54958],{},[30,54959,54960],{},"天生的属性",[19,54962,54963],{},[938,54964],{"alt":104,"src":54965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54967,54968],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54970,54971],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54973,54974],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54976,54977],{},[938,54978],{"alt":104,"src":54979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[99,54981,54983],{"className":51808,"code":54982,"language":51810,"meta":104,"style":104},"在复选框中如果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",[106,54984,54985,54990,55022,55027,55032,55037,55042,55046,55051,55056,55073,55085,55090],{"__ignoreMap":104},[109,54986,54987],{"class":111,"line":112},[109,54988,54989],{"class":126},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[109,54991,54992,54994,54997,55000,55002,55005,55007,55009,55011,55013,55015,55017,55020],{"class":111,"line":119},[109,54993,1320],{"class":126},[109,54995,54996],{"class":52475},"input",[109,54998,54999],{"class":211}," type",[109,55001,130],{"class":126},[109,55003,55004],{"class":278},"\"checkbox\"",[109,55006,16093],{"class":211},[109,55008,130],{"class":126},[109,55010,8978],{"class":278},[109,55012,16132],{"class":211},[109,55014,130],{"class":126},[109,55016,8978],{"class":278},[109,55018,55019],{"class":211}," checked",[109,55021,52482],{"class":126},[109,55023,55024],{"class":111,"line":140},[109,55025,55026],{"class":126},"不选的话：\n",[109,55028,55029],{"class":111,"line":154},[109,55030,55031],{"class":126},"const input = document.querySelector('input')\n",[109,55033,55034],{"class":111,"line":161},[109,55035,55036],{"class":126},"input.checked=false\n",[109,55038,55039],{"class":111,"line":167},[109,55040,55041],{"class":126},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[109,55043,55044],{"class":111,"line":185},[109,55045,158],{"emptyLinePlaceholder":157},[109,55047,55048],{"class":111,"line":201},[109,55049,55050],{"class":126},"禁用按钮：\n",[109,55052,55053],{"class":111,"line":206},[109,55054,55055],{"class":126},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[109,55057,55058,55060,55063,55066,55069,55071],{"class":111,"line":218},[109,55059,1320],{"class":126},[109,55061,55062],{"class":52475},"button",[109,55064,55065],{"class":211}," disabled",[109,55067,55068],{"class":126},">点击\u003C\u002F",[109,55070,55062],{"class":52475},[109,55072,52482],{"class":126},[109,55074,55075,55077,55079,55081,55083],{"class":111,"line":223},[109,55076,1320],{"class":126},[109,55078,55062],{"class":52475},[109,55080,55068],{"class":126},[109,55082,55062],{"class":52475},[109,55084,52482],{"class":126},[109,55086,55087],{"class":111,"line":229},[109,55088,55089],{"class":126},"const bt = document.querySelector('button')\n",[109,55091,55092],{"class":111,"line":244},[109,55093,55094],{"class":126},"bt.disabled = false\n",[765,55096,55097],{"start":119},[30,55098,55099],{},"自定义属性",[19,55101,55102],{},[938,55103],{"alt":104,"src":55104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[99,55106,55108],{"className":54242,"code":55107,"language":54244,"meta":104,"style":104},"\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",[106,55109,55110,55118,55146,55165,55184,55203,55222,55230,55235,55240,55245,55250,55258],{"__ignoreMap":104},[109,55111,55112,55114,55116],{"class":111,"line":112},[109,55113,1320],{"class":126},[109,55115,52975],{"class":52475},[109,55117,52482],{"class":126},[109,55119,55120,55122,55124,55127,55129,55131,55134,55136,55139,55142,55144],{"class":111,"line":119},[109,55121,53319],{"class":126},[109,55123,52786],{"class":52475},[109,55125,55126],{"class":211}," data-id",[109,55128,130],{"class":126},[109,55130,5021],{"class":278},[109,55132,55133],{"class":211}," data-spm",[109,55135,130],{"class":126},[109,55137,55138],{"class":278},"\"我不知道\"",[109,55140,55141],{"class":126},">1\u003C\u002F",[109,55143,52786],{"class":52475},[109,55145,52482],{"class":126},[109,55147,55148,55150,55152,55154,55156,55158,55161,55163],{"class":111,"line":140},[109,55149,53319],{"class":126},[109,55151,52786],{"class":52475},[109,55153,55126],{"class":211},[109,55155,130],{"class":126},[109,55157,5044],{"class":278},[109,55159,55160],{"class":126},">2\u003C\u002F",[109,55162,52786],{"class":52475},[109,55164,52482],{"class":126},[109,55166,55167,55169,55171,55173,55175,55177,55180,55182],{"class":111,"line":154},[109,55168,53319],{"class":126},[109,55170,52786],{"class":52475},[109,55172,55126],{"class":211},[109,55174,130],{"class":126},[109,55176,5057],{"class":278},[109,55178,55179],{"class":126},">3\u003C\u002F",[109,55181,52786],{"class":52475},[109,55183,52482],{"class":126},[109,55185,55186,55188,55190,55192,55194,55196,55199,55201],{"class":111,"line":161},[109,55187,53319],{"class":126},[109,55189,52786],{"class":52475},[109,55191,55126],{"class":211},[109,55193,130],{"class":126},[109,55195,5070],{"class":278},[109,55197,55198],{"class":126},">4\u003C\u002F",[109,55200,52786],{"class":52475},[109,55202,52482],{"class":126},[109,55204,55205,55207,55209,55211,55213,55215,55218,55220],{"class":111,"line":167},[109,55206,53319],{"class":126},[109,55208,52786],{"class":52475},[109,55210,55126],{"class":211},[109,55212,130],{"class":126},[109,55214,5091],{"class":278},[109,55216,55217],{"class":126},">5\u003C\u002F",[109,55219,52786],{"class":52475},[109,55221,52482],{"class":126},[109,55223,55224,55226,55228],{"class":111,"line":185},[109,55225,53319],{"class":126},[109,55227,52988],{"class":52475},[109,55229,52482],{"class":126},[109,55231,55232],{"class":111,"line":201},[109,55233,55234],{"class":126},"    const one = document.querySelector('div')\n",[109,55236,55237],{"class":111,"line":206},[109,55238,55239],{"class":126},"    console.log(one.dataset)\n",[109,55241,55242],{"class":111,"line":218},[109,55243,55244],{"class":126},"    console.log(one.dataset.id)\n",[109,55246,55247],{"class":111,"line":223},[109,55248,55249],{"class":126},"    console.log(one.dataset.spm)\n",[109,55251,55252,55254,55256],{"class":111,"line":229},[109,55253,53592],{"class":126},[109,55255,52988],{"class":52475},[109,55257,52482],{"class":126},[109,55259,55260,55262,55264],{"class":111,"line":244},[109,55261,52960],{"class":126},[109,55263,52975],{"class":52475},[109,55265,52482],{"class":126},[19,55267,55268],{},[938,55269],{"alt":104,"src":55270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55272,55273],{},"document.querySelector选择的是第一个对象（元素）",[51,55275,55277],{"id":55276},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55279,55280],{},[938,55281],{"alt":104,"src":55282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55284,55285],{},[938,55286],{"alt":104,"src":55287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55289,55290],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52988,55292,55293],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55295,55296],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52988,55298,55299],{},"\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,55301,55302],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55304,55305],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55307,55308],{},"单位为毫秒！！！",[19,55310,55311],{},"可以搭配匿名函数来用！！！",[19,55313,55314],{},"setInterval(function () {",[19,55316,55317],{},"alert('两秒执行一次')",[19,55319,55320],{},"}, 2000)",[19,55322,55323],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55325,55326],{},"function fn() {",[19,55328,55329],{},"document.write(1)",[19,55331,2476],{},[19,55333,55334],{},"setInterval(fn, 1000)",[19,55336,55337],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55339,55340],{},"setInterval('fn()', 1000)",[19,55342,55343],{},[938,55344],{"alt":104,"src":55345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23171,55347,55349],{"id":55348},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[99,55351,55353],{"className":51808,"code":55352,"language":51810,"meta":104,"style":104},"\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",[106,55354,55355,55365,55379,55383,55391,55405,55425,55437,55445,55449,55457,55494,55499,55504,55509,55517,55525,55547,55555,55560,55582,55587,55592,55603,55608,55628,55636,55651,55666,55677,55682,55692,55702,55706,55715,55719,55727,55735,55739],{"__ignoreMap":104},[109,55356,55357,55359,55361,55363],{"class":111,"line":112},[109,55358,52472],{"class":126},[109,55360,52476],{"class":52475},[109,55362,52479],{"class":211},[109,55364,52482],{"class":126},[109,55366,55367,55369,55371,55373,55375,55377],{"class":111,"line":119},[109,55368,1320],{"class":126},[109,55370,51810],{"class":52475},[109,55372,52491],{"class":211},[109,55374,130],{"class":126},[109,55376,52496],{"class":278},[109,55378,52482],{"class":126},[109,55380,55381],{"class":111,"line":140},[109,55382,158],{"emptyLinePlaceholder":157},[109,55384,55385,55387,55389],{"class":111,"line":154},[109,55386,1320],{"class":126},[109,55388,52509],{"class":52475},[109,55390,52482],{"class":126},[109,55392,55393,55395,55397,55399,55401,55403],{"class":111,"line":161},[109,55394,53319],{"class":126},[109,55396,52519],{"class":52475},[109,55398,52522],{"class":211},[109,55400,130],{"class":126},[109,55402,52527],{"class":278},[109,55404,52482],{"class":126},[109,55406,55407,55409,55411,55413,55415,55417,55419,55421,55423],{"class":111,"line":167},[109,55408,53319],{"class":126},[109,55410,52519],{"class":52475},[109,55412,16093],{"class":211},[109,55414,130],{"class":126},[109,55416,52566],{"class":278},[109,55418,52546],{"class":211},[109,55420,130],{"class":126},[109,55422,52573],{"class":278},[109,55424,52482],{"class":126},[109,55426,55427,55429,55431,55433,55435],{"class":111,"line":185},[109,55428,53319],{"class":126},[109,55430,52582],{"class":52475},[109,55432,52585],{"class":126},[109,55434,52582],{"class":52475},[109,55436,52482],{"class":126},[109,55438,55439,55441,55443],{"class":111,"line":201},[109,55440,52960],{"class":126},[109,55442,52509],{"class":52475},[109,55444,52482],{"class":126},[109,55446,55447],{"class":111,"line":206},[109,55448,158],{"emptyLinePlaceholder":157},[109,55450,55451,55453,55455],{"class":111,"line":218},[109,55452,1320],{"class":126},[109,55454,52975],{"class":52475},[109,55456,52482],{"class":126},[109,55458,55459,55461,55464,55466,55468,55470,55472,55474,55476,55479,55481,55484,55487,55489,55492],{"class":111,"line":223},[109,55460,53319],{"class":126},[109,55462,55463],{"class":52475},"textarea",[109,55465,16093],{"class":211},[109,55467,130],{"class":126},[109,55469,8978],{"class":278},[109,55471,16132],{"class":211},[109,55473,130],{"class":126},[109,55475,8978],{"class":278},[109,55477,55478],{"class":211}," cols",[109,55480,130],{"class":126},[109,55482,55483],{"class":278},"\"30\"",[109,55485,55486],{"class":211}," rows",[109,55488,130],{"class":126},[109,55490,55491],{"class":278},"\"10\"",[109,55493,52482],{"class":126},[109,55495,55496],{"class":111,"line":229},[109,55497,55498],{"class":126},"        用户注册协议\n",[109,55500,55501],{"class":111,"line":244},[109,55502,55503],{"class":126},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[109,55505,55506],{"class":111,"line":258},[109,55507,55508],{"class":126},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[109,55510,55511,55513,55515],{"class":111,"line":263},[109,55512,52951],{"class":126},[109,55514,55463],{"class":52475},[109,55516,52482],{"class":126},[109,55518,55519,55521,55523],{"class":111,"line":269},[109,55520,53319],{"class":126},[109,55522,54891],{"class":52475},[109,55524,52482],{"class":126},[109,55526,55527,55529,55531,55533,55535,55538,55540,55543,55545],{"class":111,"line":304},[109,55528,53319],{"class":126},[109,55530,55062],{"class":52475},[109,55532,54661],{"class":211},[109,55534,130],{"class":126},[109,55536,55537],{"class":278},"\"btn\"",[109,55539,55065],{"class":211},[109,55541,55542],{"class":126},">我已经阅读用户协议(5)\u003C\u002F",[109,55544,55062],{"class":52475},[109,55546,52482],{"class":126},[109,55548,55549,55551,55553],{"class":111,"line":331},[109,55550,53319],{"class":126},[109,55552,52988],{"class":52475},[109,55554,52482],{"class":126},[109,55556,55557],{"class":111,"line":336},[109,55558,55559],{"class":115},"    \u002F\u002F 1. 获取元素\n",[109,55561,55562,55564,55567,55569,55572,55575,55577,55580],{"class":111,"line":364},[109,55563,619],{"class":122},[109,55565,55566],{"class":133}," btn",[109,55568,14737],{"class":122},[109,55570,55571],{"class":126}," document.",[109,55573,55574],{"class":211},"querySelector",[109,55576,714],{"class":126},[109,55578,55579],{"class":278},"'.btn'",[109,55581,1330],{"class":126},[109,55583,55584],{"class":111,"line":391},[109,55585,55586],{"class":115},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[109,55588,55589],{"class":111,"line":396},[109,55590,55591],{"class":115},"    \u002F\u002F 2. 倒计时\n",[109,55593,55594,55596,55598,55600],{"class":111,"line":402},[109,55595,53394],{"class":122},[109,55597,10756],{"class":126},[109,55599,130],{"class":122},[109,55601,55602],{"class":133}," 5\n",[109,55604,55605],{"class":111,"line":419},[109,55606,55607],{"class":115},"    \u002F\u002F 2.1 开启定时器\n",[109,55609,55610,55612,55615,55617,55620,55622,55625],{"class":111,"line":435},[109,55611,53394],{"class":122},[109,55613,55614],{"class":126}," n ",[109,55616,130],{"class":122},[109,55618,55619],{"class":211}," setInterval",[109,55621,714],{"class":126},[109,55623,55624],{"class":122},"function",[109,55626,55627],{"class":126}," () {\n",[109,55629,55630,55633],{"class":111,"line":440},[109,55631,55632],{"class":126},"      i",[109,55634,55635],{"class":122},"--\n",[109,55637,55638,55641,55643,55646,55648],{"class":111,"line":467},[109,55639,55640],{"class":126},"      btn.innerHTML ",[109,55642,130],{"class":122},[109,55644,55645],{"class":278}," `我已经阅读用户协议(${",[109,55647,1345],{"class":126},[109,55649,55650],{"class":278},"})`\n",[109,55652,55653,55656,55659,55662,55664],{"class":111,"line":494},[109,55654,55655],{"class":122},"      if",[109,55657,55658],{"class":126}," (i ",[109,55660,55661],{"class":122},"===",[109,55663,734],{"class":133},[109,55665,13615],{"class":126},[109,55667,55668,55671,55674],{"class":111,"line":499},[109,55669,55670],{"class":211},"        clearInterval",[109,55672,55673],{"class":126},"(n)  ",[109,55675,55676],{"class":115},"\u002F\u002F 关闭定时器\n",[109,55678,55679],{"class":111,"line":526},[109,55680,55681],{"class":115},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[109,55683,55684,55687,55689],{"class":111,"line":552},[109,55685,55686],{"class":126},"        btn.disabled ",[109,55688,130],{"class":122},[109,55690,55691],{"class":133}," false\n",[109,55693,55694,55697,55699],{"class":111,"line":557},[109,55695,55696],{"class":126},"        btn.innerHTML ",[109,55698,130],{"class":122},[109,55700,55701],{"class":278}," '同意'\n",[109,55703,55704],{"class":111,"line":584},[109,55705,53573],{"class":126},[109,55707,55708,55711,55713],{"class":111,"line":611},[109,55709,55710],{"class":126},"    }, ",[109,55712,7740],{"class":133},[109,55714,1330],{"class":126},[109,55716,55717],{"class":111,"line":616},[109,55718,158],{"emptyLinePlaceholder":157},[109,55720,55721,55723,55725],{"class":111,"line":633},[109,55722,53592],{"class":126},[109,55724,52988],{"class":52475},[109,55726,52482],{"class":126},[109,55728,55729,55731,55733],{"class":111,"line":649},[109,55730,52960],{"class":126},[109,55732,52975],{"class":52475},[109,55734,52482],{"class":126},[109,55736,55737],{"class":111,"line":676},[109,55738,158],{"emptyLinePlaceholder":157},[109,55740,55741,55743,55745],{"class":111,"line":703},[109,55742,52960],{"class":126},[109,55744,51810],{"class":52475},[109,55746,52482],{"class":126},[19,55748,55749],{},"不要一直想着用死循环,避免死循环",[19,55751,55752,55755],{},[106,55753,55754],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23171,55757,55759],{"id":55758},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[765,55761,55762],{},[30,55763,55764],{},"法1",[99,55766,55768],{"className":51808,"code":55767,"language":51810,"meta":104,"style":104},"\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",[106,55769,55770,55780,55794,55798,55806,55820,55840,55852,55860,55866,55877,55888,55892,55896,55903,55915,55919,55923,55930,55942,55956,55969,55983,55987,55991,55998,56009,56020,56031,56043,56055,56067,56071,56075,56083,56093,56106,56118,56131,56135,56139,56146,56156,56168,56180,56191,56202,56212,56224,56236,56240,56244,56253,56265,56277,56305,56318,56322,56326,56333,56344,56348,56356,56364,56368,56376,56390,56405,56429,56437,56452,56465,56473,56494,56506,56518,56530,56542,56554,56566,56578,56587,56595,56603,56611,56623,56646,56665,56684,56703,56722,56741,56760,56780,56784,56804,56823,56843,56864,56875,56892,56902,56912,56922,56927,56932,56937,56942,56967,56980,56984,57007,57011,57019,57027,57035,57039],{"__ignoreMap":104},[109,55771,55772,55774,55776,55778],{"class":111,"line":112},[109,55773,52472],{"class":126},[109,55775,52476],{"class":52475},[109,55777,52479],{"class":211},[109,55779,52482],{"class":126},[109,55781,55782,55784,55786,55788,55790,55792],{"class":111,"line":119},[109,55783,1320],{"class":126},[109,55785,51810],{"class":52475},[109,55787,52491],{"class":211},[109,55789,130],{"class":126},[109,55791,52496],{"class":278},[109,55793,52482],{"class":126},[109,55795,55796],{"class":111,"line":140},[109,55797,158],{"emptyLinePlaceholder":157},[109,55799,55800,55802,55804],{"class":111,"line":154},[109,55801,1320],{"class":126},[109,55803,52509],{"class":52475},[109,55805,52482],{"class":126},[109,55807,55808,55810,55812,55814,55816,55818],{"class":111,"line":161},[109,55809,53319],{"class":126},[109,55811,52519],{"class":52475},[109,55813,52522],{"class":211},[109,55815,130],{"class":126},[109,55817,52527],{"class":278},[109,55819,52482],{"class":126},[109,55821,55822,55824,55826,55828,55830,55832,55834,55836,55838],{"class":111,"line":167},[109,55823,53319],{"class":126},[109,55825,52519],{"class":52475},[109,55827,16093],{"class":211},[109,55829,130],{"class":126},[109,55831,52566],{"class":278},[109,55833,52546],{"class":211},[109,55835,130],{"class":126},[109,55837,52573],{"class":278},[109,55839,52482],{"class":126},[109,55841,55842,55844,55846,55848,55850],{"class":111,"line":185},[109,55843,53319],{"class":126},[109,55845,52582],{"class":52475},[109,55847,52585],{"class":126},[109,55849,52582],{"class":52475},[109,55851,52482],{"class":126},[109,55853,55854,55856,55858],{"class":111,"line":201},[109,55855,53319],{"class":126},[109,55857,1467],{"class":52475},[109,55859,52482],{"class":126},[109,55861,55862,55864],{"class":111,"line":206},[109,55863,7733],{"class":52475},[109,55865,16745],{"class":126},[109,55867,55868,55871,55873,55875],{"class":111,"line":218},[109,55869,55870],{"class":133},"      padding",[109,55872,52612],{"class":126},[109,55874,1314],{"class":133},[109,55876,137],{"class":126},[109,55878,55879,55882,55884,55886],{"class":111,"line":223},[109,55880,55881],{"class":133},"      margin",[109,55883,52612],{"class":126},[109,55885,1314],{"class":133},[109,55887,137],{"class":126},[109,55889,55890],{"class":111,"line":229},[109,55891,1361],{"class":126},[109,55893,55894],{"class":111,"line":244},[109,55895,158],{"emptyLinePlaceholder":157},[109,55897,55898,55901],{"class":111,"line":258},[109,55899,55900],{"class":52475},"    li",[109,55902,16745],{"class":126},[109,55904,55905,55908,55910,55913],{"class":111,"line":263},[109,55906,55907],{"class":133},"      list-style",[109,55909,52612],{"class":126},[109,55911,55912],{"class":133},"none",[109,55914,137],{"class":126},[109,55916,55917],{"class":111,"line":269},[109,55918,1361],{"class":126},[109,55920,55921],{"class":111,"line":304},[109,55922,158],{"emptyLinePlaceholder":157},[109,55924,55925,55928],{"class":111,"line":331},[109,55926,55927],{"class":211},"    .box",[109,55929,16745],{"class":126},[109,55931,55932,55935,55937,55940],{"class":111,"line":336},[109,55933,55934],{"class":133},"      position",[109,55936,52612],{"class":126},[109,55938,55939],{"class":133},"relative",[109,55941,137],{"class":126},[109,55943,55944,55947,55949,55952,55954],{"class":111,"line":364},[109,55945,55946],{"class":133},"      width",[109,55948,52612],{"class":126},[109,55950,55951],{"class":133},"976",[109,55953,52667],{"class":122},[109,55955,137],{"class":126},[109,55957,55958,55961,55963,55965,55967],{"class":111,"line":391},[109,55959,55960],{"class":133},"      height",[109,55962,52612],{"class":126},[109,55964,2930],{"class":133},[109,55966,52667],{"class":122},[109,55968,137],{"class":126},[109,55970,55971,55973,55975,55977,55979,55981],{"class":111,"line":396},[109,55972,55881],{"class":133},[109,55974,52612],{"class":126},[109,55976,1351],{"class":133},[109,55978,52667],{"class":122},[109,55980,52731],{"class":133},[109,55982,137],{"class":126},[109,55984,55985],{"class":111,"line":402},[109,55986,1361],{"class":126},[109,55988,55989],{"class":111,"line":419},[109,55990,158],{"emptyLinePlaceholder":157},[109,55992,55993,55996],{"class":111,"line":435},[109,55994,55995],{"class":211},"    .slider-footer",[109,55997,16745],{"class":126},[109,55999,56000,56002,56004,56007],{"class":111,"line":440},[109,56001,55934],{"class":133},[109,56003,52612],{"class":126},[109,56005,56006],{"class":133},"absolute",[109,56008,137],{"class":126},[109,56010,56011,56014,56016,56018],{"class":111,"line":467},[109,56012,56013],{"class":133},"      left",[109,56015,52612],{"class":126},[109,56017,1314],{"class":133},[109,56019,137],{"class":126},[109,56021,56022,56025,56027,56029],{"class":111,"line":494},[109,56023,56024],{"class":133},"      bottom",[109,56026,52612],{"class":126},[109,56028,1314],{"class":133},[109,56030,137],{"class":126},[109,56032,56033,56035,56037,56039,56041],{"class":111,"line":499},[109,56034,55946],{"class":133},[109,56036,52612],{"class":126},[109,56038,1351],{"class":133},[109,56040,1865],{"class":122},[109,56042,137],{"class":126},[109,56044,56045,56047,56049,56051,56053],{"class":111,"line":526},[109,56046,55960],{"class":133},[109,56048,52612],{"class":126},[109,56050,2107],{"class":133},[109,56052,1865],{"class":122},[109,56054,137],{"class":126},[109,56056,56057,56060,56062,56065],{"class":111,"line":552},[109,56058,56059],{"class":133},"      background-color",[109,56061,52612],{"class":126},[109,56063,56064],{"class":133},"skyblue",[109,56066,137],{"class":126},[109,56068,56069],{"class":111,"line":557},[109,56070,1361],{"class":126},[109,56072,56073],{"class":111,"line":584},[109,56074,158],{"emptyLinePlaceholder":157},[109,56076,56077,56079,56081],{"class":111,"line":611},[109,56078,55995],{"class":211},[109,56080,8151],{"class":52475},[109,56082,16745],{"class":126},[109,56084,56085,56087,56089,56091],{"class":111,"line":616},[109,56086,55934],{"class":133},[109,56088,52612],{"class":126},[109,56090,56006],{"class":133},[109,56092,137],{"class":126},[109,56094,56095,56098,56100,56102,56104],{"class":111,"line":633},[109,56096,56097],{"class":133},"      font-size",[109,56099,52612],{"class":126},[109,56101,2432],{"class":133},[109,56103,52667],{"class":122},[109,56105,137],{"class":126},[109,56107,56108,56110,56112,56114,56116],{"class":111,"line":649},[109,56109,56013],{"class":133},[109,56111,52612],{"class":126},[109,56113,2232],{"class":133},[109,56115,52667],{"class":122},[109,56117,137],{"class":126},[109,56119,56120,56123,56125,56127,56129],{"class":111,"line":676},[109,56121,56122],{"class":133},"      top",[109,56124,52612],{"class":126},[109,56126,1856],{"class":133},[109,56128,52667],{"class":122},[109,56130,137],{"class":126},[109,56132,56133],{"class":111,"line":703},[109,56134,1361],{"class":126},[109,56136,56137],{"class":111,"line":708},[109,56138,158],{"emptyLinePlaceholder":157},[109,56140,56141,56144],{"class":111,"line":723},[109,56142,56143],{"class":52475},"    ul",[109,56145,16745],{"class":126},[109,56147,56148,56150,56152,56154],{"class":111,"line":728},[109,56149,55934],{"class":133},[109,56151,52612],{"class":126},[109,56153,56006],{"class":133},[109,56155,137],{"class":126},[109,56157,56158,56160,56162,56164,56166],{"class":111,"line":739},[109,56159,56122],{"class":133},[109,56161,52612],{"class":126},[109,56163,2313],{"class":133},[109,56165,52667],{"class":122},[109,56167,137],{"class":126},[109,56169,56170,56172,56174,56176,56178],{"class":111,"line":9352},[109,56171,56013],{"class":133},[109,56173,52612],{"class":126},[109,56175,2232],{"class":133},[109,56177,52667],{"class":122},[109,56179,137],{"class":126},[109,56181,56182,56185,56187,56189],{"class":111,"line":9364},[109,56183,56184],{"class":133},"      display",[109,56186,52612],{"class":126},[109,56188,52652],{"class":133},[109,56190,137],{"class":126},[109,56192,56193,56196,56198,56200],{"class":111,"line":9376},[109,56194,56195],{"class":133},"      justify-content",[109,56197,52612],{"class":126},[109,56199,52843],{"class":133},[109,56201,137],{"class":126},[109,56203,56204,56206,56208,56210],{"class":111,"line":11034},[109,56205,55934],{"class":133},[109,56207,52612],{"class":126},[109,56209,56006],{"class":133},[109,56211,137],{"class":126},[109,56213,56214,56216,56218,56220,56222],{"class":111,"line":11059},[109,56215,55946],{"class":133},[109,56217,52612],{"class":126},[109,56219,5334],{"class":133},[109,56221,52667],{"class":122},[109,56223,137],{"class":126},[109,56225,56226,56228,56230,56232,56234],{"class":111,"line":11082},[109,56227,55960],{"class":133},[109,56229,52612],{"class":126},[109,56231,2232],{"class":133},[109,56233,52667],{"class":122},[109,56235,137],{"class":126},[109,56237,56238],{"class":111,"line":11106},[109,56239,1361],{"class":126},[109,56241,56242],{"class":111,"line":11111},[109,56243,158],{"emptyLinePlaceholder":157},[109,56245,56246,56248,56251],{"class":111,"line":11116},[109,56247,56143],{"class":52475},[109,56249,56250],{"class":52475}," li",[109,56252,16745],{"class":126},[109,56254,56255,56257,56259,56261,56263],{"class":111,"line":11121},[109,56256,55946],{"class":133},[109,56258,52612],{"class":126},[109,56260,2232],{"class":133},[109,56262,52667],{"class":122},[109,56264,137],{"class":126},[109,56266,56267,56269,56271,56273,56275],{"class":111,"line":11130},[109,56268,55960],{"class":133},[109,56270,52612],{"class":126},[109,56272,2232],{"class":133},[109,56274,52667],{"class":122},[109,56276,137],{"class":126},[109,56278,56279,56281,56283,56286,56288,56290,56292,56294,56296,56298,56300,56303],{"class":111,"line":11135},[109,56280,56059],{"class":133},[109,56282,52612],{"class":126},[109,56284,56285],{"class":133},"rgba",[109,56287,714],{"class":126},[109,56289,1314],{"class":133},[109,56291,13608],{"class":126},[109,56293,1314],{"class":133},[109,56295,13608],{"class":126},[109,56297,1314],{"class":133},[109,56299,13608],{"class":126},[109,56301,56302],{"class":133},".4",[109,56304,720],{"class":126},[109,56306,56307,56310,56312,56314,56316],{"class":111,"line":11141},[109,56308,56309],{"class":133},"      border-radius",[109,56311,52612],{"class":126},[109,56313,1008],{"class":133},[109,56315,52667],{"class":122},[109,56317,137],{"class":126},[109,56319,56320],{"class":111,"line":11162},[109,56321,1361],{"class":126},[109,56323,56324],{"class":111,"line":11168},[109,56325,158],{"emptyLinePlaceholder":157},[109,56327,56328,56331],{"class":111,"line":11182},[109,56329,56330],{"class":211},"    .activate",[109,56332,16745],{"class":126},[109,56334,56335,56337,56339,56342],{"class":111,"line":11188},[109,56336,56059],{"class":133},[109,56338,52612],{"class":126},[109,56340,56341],{"class":133},"#f7f7f7",[109,56343,137],{"class":126},[109,56345,56346],{"class":111,"line":11215},[109,56347,1361],{"class":126},[109,56349,56350,56352,56354],{"class":111,"line":11224},[109,56351,53592],{"class":126},[109,56353,1467],{"class":52475},[109,56355,52482],{"class":126},[109,56357,56358,56360,56362],{"class":111,"line":11230},[109,56359,52960],{"class":126},[109,56361,52509],{"class":52475},[109,56363,52482],{"class":126},[109,56365,56366],{"class":111,"line":11238},[109,56367,158],{"emptyLinePlaceholder":157},[109,56369,56370,56372,56374],{"class":111,"line":11243},[109,56371,1320],{"class":126},[109,56373,52975],{"class":52475},[109,56375,52482],{"class":126},[109,56377,56378,56380,56382,56384,56386,56388],{"class":111,"line":17777},[109,56379,53319],{"class":126},[109,56381,52786],{"class":52475},[109,56383,54661],{"class":211},[109,56385,130],{"class":126},[109,56387,54666],{"class":278},[109,56389,52482],{"class":126},[109,56391,56392,56394,56396,56398,56400,56403],{"class":111,"line":17783},[109,56393,52516],{"class":126},[109,56395,52786],{"class":52475},[109,56397,54661],{"class":211},[109,56399,130],{"class":126},[109,56401,56402],{"class":278},"\"slider-wrapper\"",[109,56404,52482],{"class":126},[109,56406,56407,56410,56412,56415,56417,56420,56423,56425,56427],{"class":111,"line":17806},[109,56408,56409],{"class":126},"      \u003C",[109,56411,938],{"class":52475},[109,56413,56414],{"class":211}," src",[109,56416,130],{"class":126},[109,56418,56419],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[109,56421,56422],{"class":211}," alt",[109,56424,130],{"class":126},[109,56426,8978],{"class":278},[109,56428,52482],{"class":126},[109,56430,56431,56433,56435],{"class":111,"line":17812},[109,56432,52951],{"class":126},[109,56434,52786],{"class":52475},[109,56436,52482],{"class":126},[109,56438,56439,56441,56443,56445,56447,56450],{"class":111,"line":17835},[109,56440,52516],{"class":126},[109,56442,52786],{"class":52475},[109,56444,54661],{"class":211},[109,56446,130],{"class":126},[109,56448,56449],{"class":278},"\"slider-footer\"",[109,56451,52482],{"class":126},[109,56453,56454,56456,56458,56461,56463],{"class":111,"line":17849},[109,56455,56409],{"class":126},[109,56457,19],{"class":52475},[109,56459,56460],{"class":126},">对人类来说会不会太超前了?\u003C\u002F",[109,56462,19],{"class":52475},[109,56464,52482],{"class":126},[109,56466,56467,56469,56471],{"class":111,"line":17869},[109,56468,56409],{"class":126},[109,56470,27],{"class":52475},[109,56472,52482],{"class":126},[109,56474,56475,56478,56480,56482,56484,56487,56490,56492],{"class":111,"line":17875},[109,56476,56477],{"class":126},"        \u003C",[109,56479,30],{"class":52475},[109,56481,54661],{"class":211},[109,56483,130],{"class":126},[109,56485,56486],{"class":278},"\"activate\"",[109,56488,56489],{"class":126},">\u003C\u002F",[109,56491,30],{"class":52475},[109,56493,52482],{"class":126},[109,56495,56496,56498,56500,56502,56504],{"class":111,"line":17886},[109,56497,56477],{"class":126},[109,56499,30],{"class":52475},[109,56501,56489],{"class":126},[109,56503,30],{"class":52475},[109,56505,52482],{"class":126},[109,56507,56508,56510,56512,56514,56516],{"class":111,"line":17909},[109,56509,56477],{"class":126},[109,56511,30],{"class":52475},[109,56513,56489],{"class":126},[109,56515,30],{"class":52475},[109,56517,52482],{"class":126},[109,56519,56520,56522,56524,56526,56528],{"class":111,"line":17931},[109,56521,56477],{"class":126},[109,56523,30],{"class":52475},[109,56525,56489],{"class":126},[109,56527,30],{"class":52475},[109,56529,52482],{"class":126},[109,56531,56532,56534,56536,56538,56540],{"class":111,"line":17936},[109,56533,56477],{"class":126},[109,56535,30],{"class":52475},[109,56537,56489],{"class":126},[109,56539,30],{"class":52475},[109,56541,52482],{"class":126},[109,56543,56544,56546,56548,56550,56552],{"class":111,"line":17942},[109,56545,56477],{"class":126},[109,56547,30],{"class":52475},[109,56549,56489],{"class":126},[109,56551,30],{"class":52475},[109,56553,52482],{"class":126},[109,56555,56556,56558,56560,56562,56564],{"class":111,"line":17956},[109,56557,56477],{"class":126},[109,56559,30],{"class":52475},[109,56561,56489],{"class":126},[109,56563,30],{"class":52475},[109,56565,52482],{"class":126},[109,56567,56568,56570,56572,56574,56576],{"class":111,"line":17969},[109,56569,56477],{"class":126},[109,56571,30],{"class":52475},[109,56573,56489],{"class":126},[109,56575,30],{"class":52475},[109,56577,52482],{"class":126},[109,56579,56580,56583,56585],{"class":111,"line":17974},[109,56581,56582],{"class":126},"      \u003C\u002F",[109,56584,27],{"class":52475},[109,56586,52482],{"class":126},[109,56588,56589,56591,56593],{"class":111,"line":17988},[109,56590,52951],{"class":126},[109,56592,52786],{"class":52475},[109,56594,52482],{"class":126},[109,56596,56597,56599,56601],{"class":111,"line":17993},[109,56598,53592],{"class":126},[109,56600,52786],{"class":52475},[109,56602,52482],{"class":126},[109,56604,56605,56607,56609],{"class":111,"line":17999},[109,56606,53319],{"class":126},[109,56608,52988],{"class":52475},[109,56610,52482],{"class":126},[109,56612,56613,56615,56618,56620],{"class":111,"line":18004},[109,56614,619],{"class":122},[109,56616,56617],{"class":133}," arrImage",[109,56619,14737],{"class":122},[109,56621,56622],{"class":126}," [\n",[109,56624,56625,56628,56631,56634,56637,56640,56643],{"class":111,"line":18018},[109,56626,56627],{"class":126},"      { url: ",[109,56629,56630],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[109,56632,56633],{"class":126},", title: ",[109,56635,56636],{"class":278},"'对人类来说会不会太超前了?'",[109,56638,56639],{"class":126},", color: ",[109,56641,56642],{"class":278},"'rgba(100,67,68)'",[109,56644,56645],{"class":126}," },\n",[109,56647,56648,56650,56653,56655,56658,56660,56663],{"class":111,"line":18023},[109,56649,56627],{"class":126},[109,56651,56652],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[109,56654,56633],{"class":126},[109,56656,56657],{"class":278},"'开启剑与雪的黑暗传说!'",[109,56659,56639],{"class":126},[109,56661,56662],{"class":278},"'rgba(43,35,26)'",[109,56664,56645],{"class":126},[109,56666,56667,56669,56672,56674,56677,56679,56682],{"class":111,"line":18028},[109,56668,56627],{"class":126},[109,56670,56671],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[109,56673,56633],{"class":126},[109,56675,56676],{"class":278},"'真正的jo厨出现了!'",[109,56678,56639],{"class":126},[109,56680,56681],{"class":278},"'rgba(36,31,33)'",[109,56683,56645],{"class":126},[109,56685,56686,56688,56691,56693,56696,56698,56701],{"class":111,"line":18042},[109,56687,56627],{"class":126},[109,56689,56690],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[109,56692,56633],{"class":126},[109,56694,56695],{"class":278},"'李玉刚:让世界通过b站看到东方大国文化'",[109,56697,56639],{"class":126},[109,56699,56700],{"class":278},"'rgba(139,98,66)'",[109,56702,56645],{"class":126},[109,56704,56705,56707,56710,56712,56715,56717,56720],{"class":111,"line":18054},[109,56706,56627],{"class":126},[109,56708,56709],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[109,56711,56633],{"class":126},[109,56713,56714],{"class":278},"'快来分享你的寒假日常吧'",[109,56716,56639],{"class":126},[109,56718,56719],{"class":278},"'rgba(67,90,92)'",[109,56721,56645],{"class":126},[109,56723,56724,56726,56729,56731,56734,56736,56739],{"class":111,"line":18059},[109,56725,56627],{"class":126},[109,56727,56728],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[109,56730,56633],{"class":126},[109,56732,56733],{"class":278},"'哔哩哔哩小年YEAR'",[109,56735,56639],{"class":126},[109,56737,56738],{"class":278},"'rgba(166,131,143)'",[109,56740,56645],{"class":126},[109,56742,56743,56745,56748,56750,56753,56755,56758],{"class":111,"line":18072},[109,56744,56627],{"class":126},[109,56746,56747],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[109,56749,56633],{"class":126},[109,56751,56752],{"class":278},"'一站式解决你的电脑配置问题'",[109,56754,56639],{"class":126},[109,56756,56757],{"class":278},"'rgba(53,29,25)'",[109,56759,56645],{"class":126},[109,56761,56762,56764,56767,56769,56772,56774,56777],{"class":111,"line":18077},[109,56763,56627],{"class":126},[109,56765,56766],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[109,56768,56633],{"class":126},[109,56770,56771],{"class":278},"'谁不想和小猫咪贴贴呢?'",[109,56773,56639],{"class":126},[109,56775,56776],{"class":278},"'rgba(99,72,114)'",[109,56778,56779],{"class":126}," }\n",[109,56781,56782],{"class":111,"line":18082},[109,56783,54284],{"class":126},[109,56785,56786,56788,56791,56793,56795,56797,56799,56802],{"class":111,"line":18087},[109,56787,619],{"class":122},[109,56789,56790],{"class":133}," img",[109,56792,14737],{"class":122},[109,56794,55571],{"class":126},[109,56796,55574],{"class":211},[109,56798,714],{"class":126},[109,56800,56801],{"class":278},"'.slider-wrapper img'",[109,56803,1330],{"class":126},[109,56805,56806,56808,56810,56812,56814,56816,56818,56821],{"class":111,"line":18100},[109,56807,619],{"class":122},[109,56809,8151],{"class":133},[109,56811,14737],{"class":122},[109,56813,55571],{"class":126},[109,56815,55574],{"class":211},[109,56817,714],{"class":126},[109,56819,56820],{"class":278},"'.slider-footer p'",[109,56822,1330],{"class":126},[109,56824,56825,56827,56830,56832,56834,56836,56838,56841],{"class":111,"line":18105},[109,56826,619],{"class":122},[109,56828,56829],{"class":133}," color",[109,56831,14737],{"class":122},[109,56833,55571],{"class":126},[109,56835,55574],{"class":211},[109,56837,714],{"class":126},[109,56839,56840],{"class":278},"'.slider-footer'",[109,56842,1330],{"class":126},[109,56844,56845,56847,56850,56852,56854,56857,56859,56862],{"class":111,"line":33808},[109,56846,619],{"class":122},[109,56848,56849],{"class":133}," lis",[109,56851,14737],{"class":122},[109,56853,55571],{"class":126},[109,56855,56856],{"class":211},"querySelectorAll",[109,56858,714],{"class":126},[109,56860,56861],{"class":278},"'.slider-footer ul li'",[109,56863,1330],{"class":126},[109,56865,56866,56868,56870,56872],{"class":111,"line":33814},[109,56867,53394],{"class":122},[109,56869,10756],{"class":126},[109,56871,130],{"class":122},[109,56873,56874],{"class":133}," 1\n",[109,56876,56877,56879,56882,56884,56886,56888,56890],{"class":111,"line":33820},[109,56878,53394],{"class":122},[109,56880,56881],{"class":126}," timer ",[109,56883,130],{"class":122},[109,56885,55619],{"class":211},[109,56887,714],{"class":126},[109,56889,55624],{"class":122},[109,56891,55627],{"class":126},[109,56893,56894,56897,56899],{"class":111,"line":33826},[109,56895,56896],{"class":126},"      img.src ",[109,56898,130],{"class":122},[109,56900,56901],{"class":126}," arrImage[i].url\n",[109,56903,56904,56907,56909],{"class":111,"line":33832},[109,56905,56906],{"class":126},"      p.innerHTML ",[109,56908,130],{"class":122},[109,56910,56911],{"class":126}," arrImage[i].title\n",[109,56913,56914,56917,56919],{"class":111,"line":33843},[109,56915,56916],{"class":126},"      color.style.backgroundColor ",[109,56918,130],{"class":122},[109,56920,56921],{"class":126}," arrImage[i].color\n",[109,56923,56924],{"class":111,"line":33849},[109,56925,56926],{"class":115},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[109,56928,56929],{"class":111,"line":33869},[109,56930,56931],{"class":115},"      \u002F\u002F li.classList.add('activate')\n",[109,56933,56934],{"class":111,"line":33875},[109,56935,56936],{"class":115},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[109,56938,56939],{"class":111,"line":33886},[109,56940,56941],{"class":115},"      \u002F\u002F lis[i].classList.remove('activate')\n",[109,56943,56944,56947,56949,56951,56954,56957,56960,56962,56965],{"class":111,"line":33892},[109,56945,56946],{"class":126},"      document.",[109,56948,55574],{"class":211},[109,56950,714],{"class":126},[109,56952,56953],{"class":278},"'.activate'",[109,56955,56956],{"class":126},")?.classList.",[109,56958,56959],{"class":211},"toggle",[109,56961,714],{"class":126},[109,56963,56964],{"class":278},"'activate'",[109,56966,1330],{"class":126},[109,56968,56969,56972,56974,56976,56978],{"class":111,"line":33898},[109,56970,56971],{"class":126},"      lis[i].classList.",[109,56973,6671],{"class":211},[109,56975,714],{"class":126},[109,56977,56964],{"class":278},[109,56979,1330],{"class":126},[109,56981,56982],{"class":111,"line":33904},[109,56983,158],{"emptyLinePlaceholder":157},[109,56985,56986,56989,56991,56993,56995,56997,56999,57001,57004],{"class":111,"line":33910},[109,56987,56988],{"class":126},"      i ",[109,56990,130],{"class":122},[109,56992,55658],{"class":126},[109,56994,1348],{"class":122},[109,56996,26293],{"class":133},[109,56998,14887],{"class":126},[109,57000,1865],{"class":122},[109,57002,57003],{"class":126}," arrImage.",[109,57005,57006],{"class":133},"length\n",[109,57008,57009],{"class":111,"line":33916},[109,57010,158],{"emptyLinePlaceholder":157},[109,57012,57013,57015,57017],{"class":111,"line":33922},[109,57014,55710],{"class":126},[109,57016,7740],{"class":133},[109,57018,1330],{"class":126},[109,57020,57021,57023,57025],{"class":111,"line":33928},[109,57022,53592],{"class":126},[109,57024,52988],{"class":52475},[109,57026,52482],{"class":126},[109,57028,57029,57031,57033],{"class":111,"line":33948},[109,57030,52960],{"class":126},[109,57032,52975],{"class":52475},[109,57034,52482],{"class":126},[109,57036,57037],{"class":111,"line":33954},[109,57038,158],{"emptyLinePlaceholder":157},[109,57040,57041,57043,57045],{"class":111,"line":33970},[109,57042,52960],{"class":126},[109,57044,51810],{"class":52475},[109,57046,52482],{"class":126},[19,57048,57049],{},[938,57050],{"alt":104,"src":57051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57053,57054],{},"?.就是短路保护,确保输出正常进行",[19,57056,57057],{},"不要忘记取余%,有时候可以用",[19,57059,57060],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[765,57062,57063],{"start":119},[30,57064,57065],{},"法2",[99,57067,57069],{"className":51808,"code":57068,"language":51810,"meta":104,"style":104},"\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",[106,57070,57071,57081,57095,57099,57107,57121,57141,57153,57161,57167,57177,57187,57191,57195,57201,57211,57215,57219,57225,57235,57247,57259,57273,57277,57281,57287,57297,57307,57317,57329,57341,57351,57355,57359,57367,57377,57389,57401,57413,57417,57421,57427,57437,57449,57461,57471,57481,57491,57503,57515,57519,57523,57531,57543,57555,57581,57593,57597,57601,57607,57617,57621,57629,57637,57641,57649,57663,57677,57697,57705,57719,57731,57739,57757,57769,57781,57793,57805,57817,57829,57841,57849,57857,57865,57873,57884,57900,57916,57932,57948,57964,57980,57996,58012,58016,58021,58039,58057,58067,58072,58077,58088,58094,58109,58118,58122,58127,58136,58141,58150,58155,58160,58165,58188,58218,58222,58230,58234,58242,58250,58254],{"__ignoreMap":104},[109,57072,57073,57075,57077,57079],{"class":111,"line":112},[109,57074,52472],{"class":126},[109,57076,52476],{"class":52475},[109,57078,52479],{"class":211},[109,57080,52482],{"class":126},[109,57082,57083,57085,57087,57089,57091,57093],{"class":111,"line":119},[109,57084,1320],{"class":126},[109,57086,51810],{"class":52475},[109,57088,52491],{"class":211},[109,57090,130],{"class":126},[109,57092,52496],{"class":278},[109,57094,52482],{"class":126},[109,57096,57097],{"class":111,"line":140},[109,57098,158],{"emptyLinePlaceholder":157},[109,57100,57101,57103,57105],{"class":111,"line":154},[109,57102,1320],{"class":126},[109,57104,52509],{"class":52475},[109,57106,52482],{"class":126},[109,57108,57109,57111,57113,57115,57117,57119],{"class":111,"line":161},[109,57110,53319],{"class":126},[109,57112,52519],{"class":52475},[109,57114,52522],{"class":211},[109,57116,130],{"class":126},[109,57118,52527],{"class":278},[109,57120,52482],{"class":126},[109,57122,57123,57125,57127,57129,57131,57133,57135,57137,57139],{"class":111,"line":167},[109,57124,53319],{"class":126},[109,57126,52519],{"class":52475},[109,57128,16093],{"class":211},[109,57130,130],{"class":126},[109,57132,52566],{"class":278},[109,57134,52546],{"class":211},[109,57136,130],{"class":126},[109,57138,52573],{"class":278},[109,57140,52482],{"class":126},[109,57142,57143,57145,57147,57149,57151],{"class":111,"line":185},[109,57144,53319],{"class":126},[109,57146,52582],{"class":52475},[109,57148,52585],{"class":126},[109,57150,52582],{"class":52475},[109,57152,52482],{"class":126},[109,57154,57155,57157,57159],{"class":111,"line":201},[109,57156,53319],{"class":126},[109,57158,1467],{"class":52475},[109,57160,52482],{"class":126},[109,57162,57163,57165],{"class":111,"line":206},[109,57164,7733],{"class":52475},[109,57166,16745],{"class":126},[109,57168,57169,57171,57173,57175],{"class":111,"line":218},[109,57170,55870],{"class":133},[109,57172,52612],{"class":126},[109,57174,1314],{"class":133},[109,57176,137],{"class":126},[109,57178,57179,57181,57183,57185],{"class":111,"line":223},[109,57180,55881],{"class":133},[109,57182,52612],{"class":126},[109,57184,1314],{"class":133},[109,57186,137],{"class":126},[109,57188,57189],{"class":111,"line":229},[109,57190,1361],{"class":126},[109,57192,57193],{"class":111,"line":244},[109,57194,158],{"emptyLinePlaceholder":157},[109,57196,57197,57199],{"class":111,"line":258},[109,57198,55900],{"class":52475},[109,57200,16745],{"class":126},[109,57202,57203,57205,57207,57209],{"class":111,"line":263},[109,57204,55907],{"class":133},[109,57206,52612],{"class":126},[109,57208,55912],{"class":133},[109,57210,137],{"class":126},[109,57212,57213],{"class":111,"line":269},[109,57214,1361],{"class":126},[109,57216,57217],{"class":111,"line":304},[109,57218,158],{"emptyLinePlaceholder":157},[109,57220,57221,57223],{"class":111,"line":331},[109,57222,55927],{"class":211},[109,57224,16745],{"class":126},[109,57226,57227,57229,57231,57233],{"class":111,"line":336},[109,57228,55934],{"class":133},[109,57230,52612],{"class":126},[109,57232,55939],{"class":133},[109,57234,137],{"class":126},[109,57236,57237,57239,57241,57243,57245],{"class":111,"line":364},[109,57238,55946],{"class":133},[109,57240,52612],{"class":126},[109,57242,55951],{"class":133},[109,57244,52667],{"class":122},[109,57246,137],{"class":126},[109,57248,57249,57251,57253,57255,57257],{"class":111,"line":391},[109,57250,55960],{"class":133},[109,57252,52612],{"class":126},[109,57254,2930],{"class":133},[109,57256,52667],{"class":122},[109,57258,137],{"class":126},[109,57260,57261,57263,57265,57267,57269,57271],{"class":111,"line":396},[109,57262,55881],{"class":133},[109,57264,52612],{"class":126},[109,57266,1351],{"class":133},[109,57268,52667],{"class":122},[109,57270,52731],{"class":133},[109,57272,137],{"class":126},[109,57274,57275],{"class":111,"line":402},[109,57276,1361],{"class":126},[109,57278,57279],{"class":111,"line":419},[109,57280,158],{"emptyLinePlaceholder":157},[109,57282,57283,57285],{"class":111,"line":435},[109,57284,55995],{"class":211},[109,57286,16745],{"class":126},[109,57288,57289,57291,57293,57295],{"class":111,"line":440},[109,57290,55934],{"class":133},[109,57292,52612],{"class":126},[109,57294,56006],{"class":133},[109,57296,137],{"class":126},[109,57298,57299,57301,57303,57305],{"class":111,"line":467},[109,57300,56013],{"class":133},[109,57302,52612],{"class":126},[109,57304,1314],{"class":133},[109,57306,137],{"class":126},[109,57308,57309,57311,57313,57315],{"class":111,"line":494},[109,57310,56024],{"class":133},[109,57312,52612],{"class":126},[109,57314,1314],{"class":133},[109,57316,137],{"class":126},[109,57318,57319,57321,57323,57325,57327],{"class":111,"line":499},[109,57320,55946],{"class":133},[109,57322,52612],{"class":126},[109,57324,1351],{"class":133},[109,57326,1865],{"class":122},[109,57328,137],{"class":126},[109,57330,57331,57333,57335,57337,57339],{"class":111,"line":526},[109,57332,55960],{"class":133},[109,57334,52612],{"class":126},[109,57336,2107],{"class":133},[109,57338,1865],{"class":122},[109,57340,137],{"class":126},[109,57342,57343,57345,57347,57349],{"class":111,"line":552},[109,57344,56059],{"class":133},[109,57346,52612],{"class":126},[109,57348,56064],{"class":133},[109,57350,137],{"class":126},[109,57352,57353],{"class":111,"line":557},[109,57354,1361],{"class":126},[109,57356,57357],{"class":111,"line":584},[109,57358,158],{"emptyLinePlaceholder":157},[109,57360,57361,57363,57365],{"class":111,"line":611},[109,57362,55995],{"class":211},[109,57364,8151],{"class":52475},[109,57366,16745],{"class":126},[109,57368,57369,57371,57373,57375],{"class":111,"line":616},[109,57370,55934],{"class":133},[109,57372,52612],{"class":126},[109,57374,56006],{"class":133},[109,57376,137],{"class":126},[109,57378,57379,57381,57383,57385,57387],{"class":111,"line":633},[109,57380,56097],{"class":133},[109,57382,52612],{"class":126},[109,57384,2432],{"class":133},[109,57386,52667],{"class":122},[109,57388,137],{"class":126},[109,57390,57391,57393,57395,57397,57399],{"class":111,"line":649},[109,57392,56013],{"class":133},[109,57394,52612],{"class":126},[109,57396,2232],{"class":133},[109,57398,52667],{"class":122},[109,57400,137],{"class":126},[109,57402,57403,57405,57407,57409,57411],{"class":111,"line":676},[109,57404,56122],{"class":133},[109,57406,52612],{"class":126},[109,57408,1856],{"class":133},[109,57410,52667],{"class":122},[109,57412,137],{"class":126},[109,57414,57415],{"class":111,"line":703},[109,57416,1361],{"class":126},[109,57418,57419],{"class":111,"line":708},[109,57420,158],{"emptyLinePlaceholder":157},[109,57422,57423,57425],{"class":111,"line":723},[109,57424,56143],{"class":52475},[109,57426,16745],{"class":126},[109,57428,57429,57431,57433,57435],{"class":111,"line":728},[109,57430,55934],{"class":133},[109,57432,52612],{"class":126},[109,57434,56006],{"class":133},[109,57436,137],{"class":126},[109,57438,57439,57441,57443,57445,57447],{"class":111,"line":739},[109,57440,56122],{"class":133},[109,57442,52612],{"class":126},[109,57444,2313],{"class":133},[109,57446,52667],{"class":122},[109,57448,137],{"class":126},[109,57450,57451,57453,57455,57457,57459],{"class":111,"line":9352},[109,57452,56013],{"class":133},[109,57454,52612],{"class":126},[109,57456,2232],{"class":133},[109,57458,52667],{"class":122},[109,57460,137],{"class":126},[109,57462,57463,57465,57467,57469],{"class":111,"line":9364},[109,57464,56184],{"class":133},[109,57466,52612],{"class":126},[109,57468,52652],{"class":133},[109,57470,137],{"class":126},[109,57472,57473,57475,57477,57479],{"class":111,"line":9376},[109,57474,56195],{"class":133},[109,57476,52612],{"class":126},[109,57478,52843],{"class":133},[109,57480,137],{"class":126},[109,57482,57483,57485,57487,57489],{"class":111,"line":11034},[109,57484,55934],{"class":133},[109,57486,52612],{"class":126},[109,57488,56006],{"class":133},[109,57490,137],{"class":126},[109,57492,57493,57495,57497,57499,57501],{"class":111,"line":11059},[109,57494,55946],{"class":133},[109,57496,52612],{"class":126},[109,57498,5334],{"class":133},[109,57500,52667],{"class":122},[109,57502,137],{"class":126},[109,57504,57505,57507,57509,57511,57513],{"class":111,"line":11082},[109,57506,55960],{"class":133},[109,57508,52612],{"class":126},[109,57510,2232],{"class":133},[109,57512,52667],{"class":122},[109,57514,137],{"class":126},[109,57516,57517],{"class":111,"line":11106},[109,57518,1361],{"class":126},[109,57520,57521],{"class":111,"line":11111},[109,57522,158],{"emptyLinePlaceholder":157},[109,57524,57525,57527,57529],{"class":111,"line":11116},[109,57526,56143],{"class":52475},[109,57528,56250],{"class":52475},[109,57530,16745],{"class":126},[109,57532,57533,57535,57537,57539,57541],{"class":111,"line":11121},[109,57534,55946],{"class":133},[109,57536,52612],{"class":126},[109,57538,2232],{"class":133},[109,57540,52667],{"class":122},[109,57542,137],{"class":126},[109,57544,57545,57547,57549,57551,57553],{"class":111,"line":11130},[109,57546,55960],{"class":133},[109,57548,52612],{"class":126},[109,57550,2232],{"class":133},[109,57552,52667],{"class":122},[109,57554,137],{"class":126},[109,57556,57557,57559,57561,57563,57565,57567,57569,57571,57573,57575,57577,57579],{"class":111,"line":11135},[109,57558,56059],{"class":133},[109,57560,52612],{"class":126},[109,57562,56285],{"class":133},[109,57564,714],{"class":126},[109,57566,1314],{"class":133},[109,57568,13608],{"class":126},[109,57570,1314],{"class":133},[109,57572,13608],{"class":126},[109,57574,1314],{"class":133},[109,57576,13608],{"class":126},[109,57578,56302],{"class":133},[109,57580,720],{"class":126},[109,57582,57583,57585,57587,57589,57591],{"class":111,"line":11141},[109,57584,56309],{"class":133},[109,57586,52612],{"class":126},[109,57588,1008],{"class":133},[109,57590,52667],{"class":122},[109,57592,137],{"class":126},[109,57594,57595],{"class":111,"line":11162},[109,57596,1361],{"class":126},[109,57598,57599],{"class":111,"line":11168},[109,57600,158],{"emptyLinePlaceholder":157},[109,57602,57603,57605],{"class":111,"line":11182},[109,57604,56330],{"class":211},[109,57606,16745],{"class":126},[109,57608,57609,57611,57613,57615],{"class":111,"line":11188},[109,57610,56059],{"class":133},[109,57612,52612],{"class":126},[109,57614,56341],{"class":133},[109,57616,137],{"class":126},[109,57618,57619],{"class":111,"line":11215},[109,57620,1361],{"class":126},[109,57622,57623,57625,57627],{"class":111,"line":11224},[109,57624,53592],{"class":126},[109,57626,1467],{"class":52475},[109,57628,52482],{"class":126},[109,57630,57631,57633,57635],{"class":111,"line":11230},[109,57632,52960],{"class":126},[109,57634,52509],{"class":52475},[109,57636,52482],{"class":126},[109,57638,57639],{"class":111,"line":11238},[109,57640,158],{"emptyLinePlaceholder":157},[109,57642,57643,57645,57647],{"class":111,"line":11243},[109,57644,1320],{"class":126},[109,57646,52975],{"class":52475},[109,57648,52482],{"class":126},[109,57650,57651,57653,57655,57657,57659,57661],{"class":111,"line":17777},[109,57652,53319],{"class":126},[109,57654,52786],{"class":52475},[109,57656,54661],{"class":211},[109,57658,130],{"class":126},[109,57660,54666],{"class":278},[109,57662,52482],{"class":126},[109,57664,57665,57667,57669,57671,57673,57675],{"class":111,"line":17783},[109,57666,52516],{"class":126},[109,57668,52786],{"class":52475},[109,57670,54661],{"class":211},[109,57672,130],{"class":126},[109,57674,56402],{"class":278},[109,57676,52482],{"class":126},[109,57678,57679,57681,57683,57685,57687,57689,57691,57693,57695],{"class":111,"line":17806},[109,57680,56409],{"class":126},[109,57682,938],{"class":52475},[109,57684,56414],{"class":211},[109,57686,130],{"class":126},[109,57688,56419],{"class":278},[109,57690,56422],{"class":211},[109,57692,130],{"class":126},[109,57694,8978],{"class":278},[109,57696,52482],{"class":126},[109,57698,57699,57701,57703],{"class":111,"line":17812},[109,57700,52951],{"class":126},[109,57702,52786],{"class":52475},[109,57704,52482],{"class":126},[109,57706,57707,57709,57711,57713,57715,57717],{"class":111,"line":17835},[109,57708,52516],{"class":126},[109,57710,52786],{"class":52475},[109,57712,54661],{"class":211},[109,57714,130],{"class":126},[109,57716,56449],{"class":278},[109,57718,52482],{"class":126},[109,57720,57721,57723,57725,57727,57729],{"class":111,"line":17849},[109,57722,56409],{"class":126},[109,57724,19],{"class":52475},[109,57726,56460],{"class":126},[109,57728,19],{"class":52475},[109,57730,52482],{"class":126},[109,57732,57733,57735,57737],{"class":111,"line":17869},[109,57734,56409],{"class":126},[109,57736,27],{"class":52475},[109,57738,52482],{"class":126},[109,57740,57741,57743,57745,57747,57749,57751,57753,57755],{"class":111,"line":17875},[109,57742,56477],{"class":126},[109,57744,30],{"class":52475},[109,57746,54661],{"class":211},[109,57748,130],{"class":126},[109,57750,56486],{"class":278},[109,57752,56489],{"class":126},[109,57754,30],{"class":52475},[109,57756,52482],{"class":126},[109,57758,57759,57761,57763,57765,57767],{"class":111,"line":17886},[109,57760,56477],{"class":126},[109,57762,30],{"class":52475},[109,57764,56489],{"class":126},[109,57766,30],{"class":52475},[109,57768,52482],{"class":126},[109,57770,57771,57773,57775,57777,57779],{"class":111,"line":17909},[109,57772,56477],{"class":126},[109,57774,30],{"class":52475},[109,57776,56489],{"class":126},[109,57778,30],{"class":52475},[109,57780,52482],{"class":126},[109,57782,57783,57785,57787,57789,57791],{"class":111,"line":17931},[109,57784,56477],{"class":126},[109,57786,30],{"class":52475},[109,57788,56489],{"class":126},[109,57790,30],{"class":52475},[109,57792,52482],{"class":126},[109,57794,57795,57797,57799,57801,57803],{"class":111,"line":17936},[109,57796,56477],{"class":126},[109,57798,30],{"class":52475},[109,57800,56489],{"class":126},[109,57802,30],{"class":52475},[109,57804,52482],{"class":126},[109,57806,57807,57809,57811,57813,57815],{"class":111,"line":17942},[109,57808,56477],{"class":126},[109,57810,30],{"class":52475},[109,57812,56489],{"class":126},[109,57814,30],{"class":52475},[109,57816,52482],{"class":126},[109,57818,57819,57821,57823,57825,57827],{"class":111,"line":17956},[109,57820,56477],{"class":126},[109,57822,30],{"class":52475},[109,57824,56489],{"class":126},[109,57826,30],{"class":52475},[109,57828,52482],{"class":126},[109,57830,57831,57833,57835,57837,57839],{"class":111,"line":17969},[109,57832,56477],{"class":126},[109,57834,30],{"class":52475},[109,57836,56489],{"class":126},[109,57838,30],{"class":52475},[109,57840,52482],{"class":126},[109,57842,57843,57845,57847],{"class":111,"line":17974},[109,57844,56582],{"class":126},[109,57846,27],{"class":52475},[109,57848,52482],{"class":126},[109,57850,57851,57853,57855],{"class":111,"line":17988},[109,57852,52951],{"class":126},[109,57854,52786],{"class":52475},[109,57856,52482],{"class":126},[109,57858,57859,57861,57863],{"class":111,"line":17993},[109,57860,53592],{"class":126},[109,57862,52786],{"class":52475},[109,57864,52482],{"class":126},[109,57866,57867,57869,57871],{"class":111,"line":17999},[109,57868,53319],{"class":126},[109,57870,52988],{"class":52475},[109,57872,52482],{"class":126},[109,57874,57875,57877,57880,57882],{"class":111,"line":18004},[109,57876,619],{"class":122},[109,57878,57879],{"class":133}," sliderData",[109,57881,14737],{"class":122},[109,57883,56622],{"class":126},[109,57885,57886,57888,57890,57892,57894,57896,57898],{"class":111,"line":18018},[109,57887,56627],{"class":126},[109,57889,56630],{"class":278},[109,57891,56633],{"class":126},[109,57893,56636],{"class":278},[109,57895,56639],{"class":126},[109,57897,56642],{"class":278},[109,57899,56645],{"class":126},[109,57901,57902,57904,57906,57908,57910,57912,57914],{"class":111,"line":18023},[109,57903,56627],{"class":126},[109,57905,56652],{"class":278},[109,57907,56633],{"class":126},[109,57909,56657],{"class":278},[109,57911,56639],{"class":126},[109,57913,56662],{"class":278},[109,57915,56645],{"class":126},[109,57917,57918,57920,57922,57924,57926,57928,57930],{"class":111,"line":18028},[109,57919,56627],{"class":126},[109,57921,56671],{"class":278},[109,57923,56633],{"class":126},[109,57925,56676],{"class":278},[109,57927,56639],{"class":126},[109,57929,56681],{"class":278},[109,57931,56645],{"class":126},[109,57933,57934,57936,57938,57940,57942,57944,57946],{"class":111,"line":18042},[109,57935,56627],{"class":126},[109,57937,56690],{"class":278},[109,57939,56633],{"class":126},[109,57941,56695],{"class":278},[109,57943,56639],{"class":126},[109,57945,56700],{"class":278},[109,57947,56645],{"class":126},[109,57949,57950,57952,57954,57956,57958,57960,57962],{"class":111,"line":18054},[109,57951,56627],{"class":126},[109,57953,56709],{"class":278},[109,57955,56633],{"class":126},[109,57957,56714],{"class":278},[109,57959,56639],{"class":126},[109,57961,56719],{"class":278},[109,57963,56645],{"class":126},[109,57965,57966,57968,57970,57972,57974,57976,57978],{"class":111,"line":18059},[109,57967,56627],{"class":126},[109,57969,56728],{"class":278},[109,57971,56633],{"class":126},[109,57973,56733],{"class":278},[109,57975,56639],{"class":126},[109,57977,56738],{"class":278},[109,57979,56645],{"class":126},[109,57981,57982,57984,57986,57988,57990,57992,57994],{"class":111,"line":18072},[109,57983,56627],{"class":126},[109,57985,56747],{"class":278},[109,57987,56633],{"class":126},[109,57989,56752],{"class":278},[109,57991,56639],{"class":126},[109,57993,56757],{"class":278},[109,57995,56645],{"class":126},[109,57997,57998,58000,58002,58004,58006,58008,58010],{"class":111,"line":18077},[109,57999,56627],{"class":126},[109,58001,56766],{"class":278},[109,58003,56633],{"class":126},[109,58005,56771],{"class":278},[109,58007,56639],{"class":126},[109,58009,56776],{"class":278},[109,58011,56779],{"class":126},[109,58013,58014],{"class":111,"line":18082},[109,58015,54284],{"class":126},[109,58017,58018],{"class":111,"line":18087},[109,58019,58020],{"class":115},"    \u002F\u002F 1.获取元素\n",[109,58022,58023,58025,58027,58029,58031,58033,58035,58037],{"class":111,"line":18100},[109,58024,619],{"class":122},[109,58026,56790],{"class":133},[109,58028,14737],{"class":122},[109,58030,55571],{"class":126},[109,58032,55574],{"class":211},[109,58034,714],{"class":126},[109,58036,56801],{"class":278},[109,58038,1330],{"class":126},[109,58040,58041,58043,58045,58047,58049,58051,58053,58055],{"class":111,"line":18105},[109,58042,619],{"class":122},[109,58044,8151],{"class":133},[109,58046,14737],{"class":122},[109,58048,55571],{"class":126},[109,58050,55574],{"class":211},[109,58052,714],{"class":126},[109,58054,56820],{"class":278},[109,58056,1330],{"class":126},[109,58058,58059,58061,58063,58065],{"class":111,"line":33808},[109,58060,53394],{"class":122},[109,58062,10756],{"class":126},[109,58064,130],{"class":122},[109,58066,48508],{"class":133},[109,58068,58069],{"class":111,"line":33814},[109,58070,58071],{"class":115},"    \u002F\u002F 2.开启定时器\n",[109,58073,58074],{"class":111,"line":33820},[109,58075,58076],{"class":115},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[109,58078,58079,58082,58084,58086],{"class":111,"line":33826},[109,58080,58081],{"class":211},"    setInterval",[109,58083,714],{"class":126},[109,58085,55624],{"class":122},[109,58087,55627],{"class":126},[109,58089,58090,58092],{"class":111,"line":33832},[109,58091,55632],{"class":126},[109,58093,4050],{"class":122},[109,58095,58096,58098,58100,58102,58105,58107],{"class":111,"line":33843},[109,58097,55655],{"class":122},[109,58099,55658],{"class":126},[109,58101,3086],{"class":122},[109,58103,58104],{"class":126}," sliderData.",[109,58106,53143],{"class":133},[109,58108,13615],{"class":126},[109,58110,58111,58114,58116],{"class":111,"line":33849},[109,58112,58113],{"class":126},"        i ",[109,58115,130],{"class":122},[109,58117,48508],{"class":133},[109,58119,58120],{"class":111,"line":33869},[109,58121,53573],{"class":126},[109,58123,58124],{"class":111,"line":33875},[109,58125,58126],{"class":115},"      \u002F\u002F 更换图片路径\n",[109,58128,58129,58131,58133],{"class":111,"line":33886},[109,58130,56896],{"class":126},[109,58132,130],{"class":122},[109,58134,58135],{"class":126}," sliderData[i].url\n",[109,58137,58138],{"class":111,"line":33892},[109,58139,58140],{"class":115},"      \u002F\u002F 把文字写到p里面\n",[109,58142,58143,58145,58147],{"class":111,"line":33898},[109,58144,56906],{"class":126},[109,58146,130],{"class":122},[109,58148,58149],{"class":126}," sliderData[i].title\n",[109,58151,58152],{"class":111,"line":33904},[109,58153,58154],{"class":115},"      \u002F\u002F 小圆点\n",[109,58156,58157],{"class":111,"line":33910},[109,58158,58159],{"class":115},"      \u002F\u002F 先删除以前的active\n",[109,58161,58162],{"class":111,"line":33916},[109,58163,58164],{"class":115},"      \u002F\u002F 只让当前li添加active\n",[109,58166,58167,58169,58171,58173,58176,58179,58182,58184,58186],{"class":111,"line":33922},[109,58168,56946],{"class":126},[109,58170,55574],{"class":211},[109,58172,714],{"class":126},[109,58174,58175],{"class":278},"'.slider-footer .activate'",[109,58177,58178],{"class":126},").classList.",[109,58180,58181],{"class":211},"remove",[109,58183,714],{"class":126},[109,58185,56964],{"class":278},[109,58187,1330],{"class":126},[109,58189,58190,58192,58194,58196,58199,58201,58203,58205,58208,58210,58212,58214,58216],{"class":111,"line":33928},[109,58191,56946],{"class":126},[109,58193,55574],{"class":211},[109,58195,714],{"class":126},[109,58197,58198],{"class":278},"`.slider-footer ul li:nth-child(${",[109,58200,1345],{"class":126},[109,58202,46741],{"class":122},[109,58204,26293],{"class":133},[109,58206,58207],{"class":278},"})`",[109,58209,58178],{"class":126},[109,58211,6671],{"class":211},[109,58213,714],{"class":126},[109,58215,56964],{"class":278},[109,58217,1330],{"class":126},[109,58219,58220],{"class":111,"line":33948},[109,58221,158],{"emptyLinePlaceholder":157},[109,58223,58224,58226,58228],{"class":111,"line":33954},[109,58225,55710],{"class":126},[109,58227,7740],{"class":133},[109,58229,1330],{"class":126},[109,58231,58232],{"class":111,"line":33970},[109,58233,158],{"emptyLinePlaceholder":157},[109,58235,58236,58238,58240],{"class":111,"line":33976},[109,58237,53592],{"class":126},[109,58239,52988],{"class":52475},[109,58241,52482],{"class":126},[109,58243,58244,58246,58248],{"class":111,"line":33990},[109,58245,52960],{"class":126},[109,58247,52975],{"class":52475},[109,58249,52482],{"class":126},[109,58251,58252],{"class":111,"line":33996},[109,58253,158],{"emptyLinePlaceholder":157},[109,58255,58256,58258,58260],{"class":111,"line":34011},[109,58257,52960],{"class":126},[109,58259,51810],{"class":52475},[109,58261,52482],{"class":126},[51,58263,58265],{"id":58264},"_317-重要知识点","3.1.7 重要知识点",[19,58267,58268,58269],{},"浏览器在渲染文本时， ",[23,58270,58271],{},"没有空格或换行符就没有“断行点”",[19,58273,58274],{},[938,58275],{"alt":104,"src":58276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58278,58279],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58281,58282],{},[938,58283],{"alt":104,"src":58284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58286,58287],{},[938,58288],{"alt":104,"src":58289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58291,58293],{"id":58292},"_32-dom事件基础","3.2 DOM事件基础",[51,58295,58297],{"id":58296},"_321-事件监听","3.2.1 事件监听",[19,58299,58300],{},[938,58301],{"alt":104,"src":58302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58304,58305],{},"事件监听有响应的发生",[19,58307,58308],{},[938,58309],{"alt":104,"src":58310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58312,58313],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58315,58316],{},"对于有名函数,要执行的函数名后边不要加()",[51,58318,58320],{"id":58319},"_322-随机点名案例","3.2.2 随机点名案例",[99,58322,58324],{"className":51808,"code":58323,"language":51810,"meta":104,"style":104},"\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",[106,58325,58326,58336,58350,58354,58362,58376,58396,58408,58416,58422,58432,58442,58446,58450,58457,58468,58472,58476,58482,58494,58508,58518,58530,58543,58547,58551,58558,58562,58575,58587,58599,58603,58607,58611,58618,58628,58632,58636,58645,58657,58669,58684,58688,58696,58704,58708,58716,58729,58743,58756,58776,58784,58799,58819,58839,58847,58851,58859,58864,58900,58920,58925,58944,58949,58960,58965,58976,58981,59000,59015,59020,59046,59056,59065,59070,59086,59091,59096,59101,59116,59120,59124,59129,59148,59165,59173,59178,59193,59197,59201,59209,59217,59221],{"__ignoreMap":104},[109,58327,58328,58330,58332,58334],{"class":111,"line":112},[109,58329,52472],{"class":126},[109,58331,52476],{"class":52475},[109,58333,52479],{"class":211},[109,58335,52482],{"class":126},[109,58337,58338,58340,58342,58344,58346,58348],{"class":111,"line":119},[109,58339,1320],{"class":126},[109,58341,51810],{"class":52475},[109,58343,52491],{"class":211},[109,58345,130],{"class":126},[109,58347,52496],{"class":278},[109,58349,52482],{"class":126},[109,58351,58352],{"class":111,"line":140},[109,58353,158],{"emptyLinePlaceholder":157},[109,58355,58356,58358,58360],{"class":111,"line":154},[109,58357,1320],{"class":126},[109,58359,52509],{"class":52475},[109,58361,52482],{"class":126},[109,58363,58364,58366,58368,58370,58372,58374],{"class":111,"line":161},[109,58365,53319],{"class":126},[109,58367,52519],{"class":52475},[109,58369,52522],{"class":211},[109,58371,130],{"class":126},[109,58373,52527],{"class":278},[109,58375,52482],{"class":126},[109,58377,58378,58380,58382,58384,58386,58388,58390,58392,58394],{"class":111,"line":167},[109,58379,53319],{"class":126},[109,58381,52519],{"class":52475},[109,58383,16093],{"class":211},[109,58385,130],{"class":126},[109,58387,52566],{"class":278},[109,58389,52546],{"class":211},[109,58391,130],{"class":126},[109,58393,52573],{"class":278},[109,58395,52482],{"class":126},[109,58397,58398,58400,58402,58404,58406],{"class":111,"line":185},[109,58399,53319],{"class":126},[109,58401,52582],{"class":52475},[109,58403,52585],{"class":126},[109,58405,52582],{"class":52475},[109,58407,52482],{"class":126},[109,58409,58410,58412,58414],{"class":111,"line":201},[109,58411,53319],{"class":126},[109,58413,1467],{"class":52475},[109,58415,52482],{"class":126},[109,58417,58418,58420],{"class":111,"line":206},[109,58419,7733],{"class":52475},[109,58421,16745],{"class":126},[109,58423,58424,58426,58428,58430],{"class":111,"line":218},[109,58425,55881],{"class":133},[109,58427,52612],{"class":126},[109,58429,1314],{"class":133},[109,58431,137],{"class":126},[109,58433,58434,58436,58438,58440],{"class":111,"line":223},[109,58435,55870],{"class":133},[109,58437,52612],{"class":126},[109,58439,1314],{"class":133},[109,58441,137],{"class":126},[109,58443,58444],{"class":111,"line":229},[109,58445,1361],{"class":126},[109,58447,58448],{"class":111,"line":244},[109,58449,158],{"emptyLinePlaceholder":157},[109,58451,58452,58455],{"class":111,"line":258},[109,58453,58454],{"class":52475},"    h2",[109,58456,16745],{"class":126},[109,58458,58459,58462,58464,58466],{"class":111,"line":263},[109,58460,58461],{"class":133},"      text-align",[109,58463,52612],{"class":126},[109,58465,52767],{"class":133},[109,58467,137],{"class":126},[109,58469,58470],{"class":111,"line":269},[109,58471,1361],{"class":126},[109,58473,58474],{"class":111,"line":304},[109,58475,158],{"emptyLinePlaceholder":157},[109,58477,58478,58480],{"class":111,"line":331},[109,58479,55927],{"class":211},[109,58481,16745],{"class":126},[109,58483,58484,58486,58488,58490,58492],{"class":111,"line":336},[109,58485,55946],{"class":133},[109,58487,52612],{"class":126},[109,58489,2930],{"class":133},[109,58491,52667],{"class":122},[109,58493,137],{"class":126},[109,58495,58496,58498,58500,58502,58504,58506],{"class":111,"line":364},[109,58497,55881],{"class":133},[109,58499,52612],{"class":126},[109,58501,2188],{"class":133},[109,58503,52667],{"class":122},[109,58505,52731],{"class":133},[109,58507,137],{"class":126},[109,58509,58510,58512,58514,58516],{"class":111,"line":391},[109,58511,56184],{"class":133},[109,58513,52612],{"class":126},[109,58515,52652],{"class":133},[109,58517,137],{"class":126},[109,58519,58520,58522,58524,58526,58528],{"class":111,"line":396},[109,58521,56097],{"class":133},[109,58523,52612],{"class":126},[109,58525,2357],{"class":133},[109,58527,52667],{"class":122},[109,58529,137],{"class":126},[109,58531,58532,58535,58537,58539,58541],{"class":111,"line":402},[109,58533,58534],{"class":133},"      line-height",[109,58536,52612],{"class":126},[109,58538,1937],{"class":133},[109,58540,52667],{"class":122},[109,58542,137],{"class":126},[109,58544,58545],{"class":111,"line":419},[109,58546,1361],{"class":126},[109,58548,58549],{"class":111,"line":435},[109,58550,158],{"emptyLinePlaceholder":157},[109,58552,58553,58556],{"class":111,"line":440},[109,58554,58555],{"class":211},"    .qs",[109,58557,16745],{"class":126},[109,58559,58560],{"class":111,"line":467},[109,58561,158],{"emptyLinePlaceholder":157},[109,58563,58564,58566,58568,58571,58573],{"class":111,"line":494},[109,58565,55946],{"class":133},[109,58567,52612],{"class":126},[109,58569,58570],{"class":133},"450",[109,58572,52667],{"class":122},[109,58574,137],{"class":126},[109,58576,58577,58579,58581,58583,58585],{"class":111,"line":499},[109,58578,55960],{"class":133},[109,58580,52612],{"class":126},[109,58582,1937],{"class":133},[109,58584,52667],{"class":122},[109,58586,137],{"class":126},[109,58588,58589,58592,58594,58597],{"class":111,"line":526},[109,58590,58591],{"class":133},"      color",[109,58593,52612],{"class":126},[109,58595,58596],{"class":133},"red",[109,58598,137],{"class":126},[109,58600,58601],{"class":111,"line":552},[109,58602,158],{"emptyLinePlaceholder":157},[109,58604,58605],{"class":111,"line":557},[109,58606,1361],{"class":126},[109,58608,58609],{"class":111,"line":584},[109,58610,158],{"emptyLinePlaceholder":157},[109,58612,58613,58616],{"class":111,"line":611},[109,58614,58615],{"class":211},"    .btns",[109,58617,16745],{"class":126},[109,58619,58620,58622,58624,58626],{"class":111,"line":616},[109,58621,58461],{"class":133},[109,58623,52612],{"class":126},[109,58625,52767],{"class":133},[109,58627,137],{"class":126},[109,58629,58630],{"class":111,"line":633},[109,58631,1361],{"class":126},[109,58633,58634],{"class":111,"line":649},[109,58635,158],{"emptyLinePlaceholder":157},[109,58637,58638,58640,58643],{"class":111,"line":676},[109,58639,58615],{"class":211},[109,58641,58642],{"class":52475}," button",[109,58644,16745],{"class":126},[109,58646,58647,58649,58651,58653,58655],{"class":111,"line":703},[109,58648,55946],{"class":133},[109,58650,52612],{"class":126},[109,58652,2349],{"class":133},[109,58654,52667],{"class":122},[109,58656,137],{"class":126},[109,58658,58659,58661,58663,58665,58667],{"class":111,"line":708},[109,58660,55960],{"class":133},[109,58662,52612],{"class":126},[109,58664,1811],{"class":133},[109,58666,52667],{"class":122},[109,58668,137],{"class":126},[109,58670,58671,58673,58675,58677,58680,58682],{"class":111,"line":723},[109,58672,55881],{"class":133},[109,58674,52612],{"class":126},[109,58676,1314],{"class":133},[109,58678,58679],{"class":133}," 50",[109,58681,52667],{"class":122},[109,58683,137],{"class":126},[109,58685,58686],{"class":111,"line":728},[109,58687,1361],{"class":126},[109,58689,58690,58692,58694],{"class":111,"line":739},[109,58691,53592],{"class":126},[109,58693,1467],{"class":52475},[109,58695,52482],{"class":126},[109,58697,58698,58700,58702],{"class":111,"line":9352},[109,58699,52960],{"class":126},[109,58701,52509],{"class":52475},[109,58703,52482],{"class":126},[109,58705,58706],{"class":111,"line":9364},[109,58707,158],{"emptyLinePlaceholder":157},[109,58709,58710,58712,58714],{"class":111,"line":9376},[109,58711,1320],{"class":126},[109,58713,52975],{"class":52475},[109,58715,52482],{"class":126},[109,58717,58718,58720,58722,58725,58727],{"class":111,"line":11034},[109,58719,53319],{"class":126},[109,58721,14],{"class":52475},[109,58723,58724],{"class":126},">随机点名\u003C\u002F",[109,58726,14],{"class":52475},[109,58728,52482],{"class":126},[109,58730,58731,58733,58735,58737,58739,58741],{"class":111,"line":11059},[109,58732,53319],{"class":126},[109,58734,52786],{"class":52475},[109,58736,54661],{"class":211},[109,58738,130],{"class":126},[109,58740,54666],{"class":278},[109,58742,52482],{"class":126},[109,58744,58745,58747,58749,58752,58754],{"class":111,"line":11082},[109,58746,52516],{"class":126},[109,58748,109],{"class":52475},[109,58750,58751],{"class":126},">名字是：\u003C\u002F",[109,58753,109],{"class":52475},[109,58755,52482],{"class":126},[109,58757,58758,58760,58762,58764,58766,58769,58772,58774],{"class":111,"line":11106},[109,58759,52516],{"class":126},[109,58761,52786],{"class":52475},[109,58763,54661],{"class":211},[109,58765,130],{"class":126},[109,58767,58768],{"class":278},"\"qs\"",[109,58770,58771],{"class":126},">这里显示姓名\u003C\u002F",[109,58773,52786],{"class":52475},[109,58775,52482],{"class":126},[109,58777,58778,58780,58782],{"class":111,"line":11111},[109,58779,53592],{"class":126},[109,58781,52786],{"class":52475},[109,58783,52482],{"class":126},[109,58785,58786,58788,58790,58792,58794,58797],{"class":111,"line":11116},[109,58787,53319],{"class":126},[109,58789,52786],{"class":52475},[109,58791,54661],{"class":211},[109,58793,130],{"class":126},[109,58795,58796],{"class":278},"\"btns\"",[109,58798,52482],{"class":126},[109,58800,58801,58803,58805,58807,58809,58812,58815,58817],{"class":111,"line":11121},[109,58802,52516],{"class":126},[109,58804,55062],{"class":52475},[109,58806,54661],{"class":211},[109,58808,130],{"class":126},[109,58810,58811],{"class":278},"\"start\"",[109,58813,58814],{"class":126},">开始\u003C\u002F",[109,58816,55062],{"class":52475},[109,58818,52482],{"class":126},[109,58820,58821,58823,58825,58827,58829,58832,58835,58837],{"class":111,"line":11130},[109,58822,52516],{"class":126},[109,58824,55062],{"class":52475},[109,58826,54661],{"class":211},[109,58828,130],{"class":126},[109,58830,58831],{"class":278},"\"end\"",[109,58833,58834],{"class":126},">结束\u003C\u002F",[109,58836,55062],{"class":52475},[109,58838,52482],{"class":126},[109,58840,58841,58843,58845],{"class":111,"line":11135},[109,58842,53592],{"class":126},[109,58844,52786],{"class":52475},[109,58846,52482],{"class":126},[109,58848,58849],{"class":111,"line":11141},[109,58850,158],{"emptyLinePlaceholder":157},[109,58852,58853,58855,58857],{"class":111,"line":11162},[109,58854,53319],{"class":126},[109,58856,52988],{"class":52475},[109,58858,52482],{"class":126},[109,58860,58861],{"class":111,"line":11168},[109,58862,58863],{"class":115},"    \u002F\u002F 数据数组\n",[109,58865,58866,58868,58871,58873,58875,58878,58880,58883,58885,58888,58890,58893,58895,58898],{"class":111,"line":11182},[109,58867,619],{"class":122},[109,58869,58870],{"class":133}," arr",[109,58872,14737],{"class":122},[109,58874,53401],{"class":126},[109,58876,58877],{"class":278},"'马超'",[109,58879,13608],{"class":126},[109,58881,58882],{"class":278},"'黄忠'",[109,58884,13608],{"class":126},[109,58886,58887],{"class":278},"'赵云'",[109,58889,13608],{"class":126},[109,58891,58892],{"class":278},"'关羽'",[109,58894,13608],{"class":126},[109,58896,58897],{"class":278},"'张飞'",[109,58899,34421],{"class":126},[109,58901,58902,58904,58907,58909,58911,58913,58915,58918],{"class":111,"line":11188},[109,58903,619],{"class":122},[109,58905,58906],{"class":133}," qs",[109,58908,14737],{"class":122},[109,58910,55571],{"class":126},[109,58912,55574],{"class":211},[109,58914,714],{"class":126},[109,58916,58917],{"class":278},"'.qs'",[109,58919,1330],{"class":126},[109,58921,58922],{"class":111,"line":11215},[109,58923,58924],{"class":115},"    \u002F\u002F 1.业务1.开始按钮模块\n",[109,58926,58927,58929,58931,58933,58935,58937,58939,58942],{"class":111,"line":11224},[109,58928,619],{"class":122},[109,58930,5523],{"class":133},[109,58932,14737],{"class":122},[109,58934,55571],{"class":126},[109,58936,55574],{"class":211},[109,58938,714],{"class":126},[109,58940,58941],{"class":278},"'.start'",[109,58943,1330],{"class":126},[109,58945,58946],{"class":111,"line":11230},[109,58947,58948],{"class":115},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[109,58950,58951,58953,58956,58958],{"class":111,"line":11238},[109,58952,53394],{"class":122},[109,58954,58955],{"class":126}," timerId ",[109,58957,130],{"class":122},[109,58959,48508],{"class":133},[109,58961,58962],{"class":111,"line":11243},[109,58963,58964],{"class":115},"    \u002F\u002F 随机号要全局变量\n",[109,58966,58967,58969,58972,58974],{"class":111,"line":17777},[109,58968,53394],{"class":122},[109,58970,58971],{"class":126}," random ",[109,58973,130],{"class":122},[109,58975,48508],{"class":133},[109,58977,58978],{"class":111,"line":17783},[109,58979,58980],{"class":115},"    \u002F\u002F 1.1 添加点击事件\n",[109,58982,58983,58986,58989,58991,58994,58996,58998],{"class":111,"line":17806},[109,58984,58985],{"class":126},"    start.",[109,58987,58988],{"class":211},"addEventListener",[109,58990,714],{"class":126},[109,58992,58993],{"class":278},"'click'",[109,58995,13608],{"class":126},[109,58997,55624],{"class":122},[109,58999,55627],{"class":126},[109,59001,59002,59005,59007,59009,59011,59013],{"class":111,"line":17812},[109,59003,59004],{"class":126},"      timerId ",[109,59006,130],{"class":122},[109,59008,55619],{"class":211},[109,59010,714],{"class":126},[109,59012,55624],{"class":122},[109,59014,55627],{"class":126},[109,59016,59017],{"class":111,"line":17835},[109,59018,59019],{"class":115},"        \u002F\u002F 随机数\n",[109,59021,59022,59025,59027,59030,59033,59036,59038,59040,59042,59044],{"class":111,"line":17849},[109,59023,59024],{"class":126},"        random ",[109,59026,130],{"class":122},[109,59028,59029],{"class":211}," parseInt",[109,59031,59032],{"class":126},"(Math.",[109,59034,59035],{"class":211},"random",[109,59037,14223],{"class":126},[109,59039,1988],{"class":122},[109,59041,53140],{"class":126},[109,59043,53143],{"class":133},[109,59045,1330],{"class":126},[109,59047,59048,59051,59053],{"class":111,"line":17869},[109,59049,59050],{"class":126},"        qs.innerHTML ",[109,59052,130],{"class":122},[109,59054,59055],{"class":126}," arr[random]\n",[109,59057,59058,59061,59063],{"class":111,"line":17875},[109,59059,59060],{"class":126},"      }, ",[109,59062,1811],{"class":133},[109,59064,1330],{"class":126},[109,59066,59067],{"class":111,"line":17886},[109,59068,59069],{"class":115},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[109,59071,59072,59074,59077,59079,59082,59084],{"class":111,"line":17909},[109,59073,55655],{"class":122},[109,59075,59076],{"class":126}," (arr.",[109,59078,53143],{"class":133},[109,59080,59081],{"class":122}," ===",[109,59083,26293],{"class":133},[109,59085,13615],{"class":126},[109,59087,59088],{"class":111,"line":17931},[109,59089,59090],{"class":115},"        \u002F\u002F start.disabled = true\n",[109,59092,59093],{"class":111,"line":17936},[109,59094,59095],{"class":115},"        \u002F\u002F end.disabled = true\n",[109,59097,59098],{"class":111,"line":17942},[109,59099,59100],{"class":115},"        \u002F\u002F 可以合起来写\n",[109,59102,59103,59106,59108,59111,59113],{"class":111,"line":17956},[109,59104,59105],{"class":126},"        start.disabled ",[109,59107,130],{"class":122},[109,59109,59110],{"class":126}," end.disabled ",[109,59112,130],{"class":122},[109,59114,59115],{"class":133}," true\n",[109,59117,59118],{"class":111,"line":17969},[109,59119,53573],{"class":126},[109,59121,59122],{"class":111,"line":17974},[109,59123,34636],{"class":126},[109,59125,59126],{"class":111,"line":17988},[109,59127,59128],{"class":115},"    \u002F\u002F 1.2 关闭按钮模块\n",[109,59130,59131,59133,59135,59137,59139,59141,59143,59146],{"class":111,"line":17993},[109,59132,619],{"class":122},[109,59134,5539],{"class":133},[109,59136,14737],{"class":122},[109,59138,55571],{"class":126},[109,59140,55574],{"class":211},[109,59142,714],{"class":126},[109,59144,59145],{"class":278},"'.end'",[109,59147,1330],{"class":126},[109,59149,59150,59153,59155,59157,59159,59161,59163],{"class":111,"line":17999},[109,59151,59152],{"class":126},"    end.",[109,59154,58988],{"class":211},[109,59156,714],{"class":126},[109,59158,58993],{"class":278},[109,59160,13608],{"class":126},[109,59162,55624],{"class":122},[109,59164,55627],{"class":126},[109,59166,59167,59170],{"class":111,"line":18004},[109,59168,59169],{"class":211},"      clearInterval",[109,59171,59172],{"class":126},"(timerId)\n",[109,59174,59175],{"class":111,"line":18018},[109,59176,59177],{"class":115},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[109,59179,59180,59183,59186,59189,59191],{"class":111,"line":18023},[109,59181,59182],{"class":126},"      arr.",[109,59184,59185],{"class":211},"splice",[109,59187,59188],{"class":126},"(random, ",[109,59190,1755],{"class":133},[109,59192,1330],{"class":126},[109,59194,59195],{"class":111,"line":18028},[109,59196,34636],{"class":126},[109,59198,59199],{"class":111,"line":18042},[109,59200,158],{"emptyLinePlaceholder":157},[109,59202,59203,59205,59207],{"class":111,"line":18054},[109,59204,53592],{"class":126},[109,59206,52988],{"class":52475},[109,59208,52482],{"class":126},[109,59210,59211,59213,59215],{"class":111,"line":18059},[109,59212,52960],{"class":126},[109,59214,52975],{"class":52475},[109,59216,52482],{"class":126},[109,59218,59219],{"class":111,"line":18072},[109,59220,158],{"emptyLinePlaceholder":157},[109,59222,59223,59225,59227],{"class":111,"line":18077},[109,59224,52960],{"class":126},[109,59226,51810],{"class":52475},[109,59228,52482],{"class":126},[19,59230,59231],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[51,59233,59235],{"id":59234},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[99,59237,59239],{"className":51808,"code":59238,"language":51810,"meta":104,"style":104},"\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",[106,59240,59241,59251,59265,59269,59277,59291,59311,59323,59331,59335,59343,59355,59363,59382,59399,59415,59425,59429,59437,59445,59449],{"__ignoreMap":104},[109,59242,59243,59245,59247,59249],{"class":111,"line":112},[109,59244,52472],{"class":126},[109,59246,52476],{"class":52475},[109,59248,52479],{"class":211},[109,59250,52482],{"class":126},[109,59252,59253,59255,59257,59259,59261,59263],{"class":111,"line":119},[109,59254,1320],{"class":126},[109,59256,51810],{"class":52475},[109,59258,52491],{"class":211},[109,59260,130],{"class":126},[109,59262,52496],{"class":278},[109,59264,52482],{"class":126},[109,59266,59267],{"class":111,"line":140},[109,59268,158],{"emptyLinePlaceholder":157},[109,59270,59271,59273,59275],{"class":111,"line":154},[109,59272,1320],{"class":126},[109,59274,52509],{"class":52475},[109,59276,52482],{"class":126},[109,59278,59279,59281,59283,59285,59287,59289],{"class":111,"line":161},[109,59280,53319],{"class":126},[109,59282,52519],{"class":52475},[109,59284,52522],{"class":211},[109,59286,130],{"class":126},[109,59288,52527],{"class":278},[109,59290,52482],{"class":126},[109,59292,59293,59295,59297,59299,59301,59303,59305,59307,59309],{"class":111,"line":167},[109,59294,53319],{"class":126},[109,59296,52519],{"class":52475},[109,59298,16093],{"class":211},[109,59300,130],{"class":126},[109,59302,52566],{"class":278},[109,59304,52546],{"class":211},[109,59306,130],{"class":126},[109,59308,52573],{"class":278},[109,59310,52482],{"class":126},[109,59312,59313,59315,59317,59319,59321],{"class":111,"line":185},[109,59314,53319],{"class":126},[109,59316,52582],{"class":52475},[109,59318,52585],{"class":126},[109,59320,52582],{"class":52475},[109,59322,52482],{"class":126},[109,59324,59325,59327,59329],{"class":111,"line":201},[109,59326,52960],{"class":126},[109,59328,52509],{"class":52475},[109,59330,52482],{"class":126},[109,59332,59333],{"class":111,"line":206},[109,59334,158],{"emptyLinePlaceholder":157},[109,59336,59337,59339,59341],{"class":111,"line":218},[109,59338,1320],{"class":126},[109,59340,52975],{"class":52475},[109,59342,52482],{"class":126},[109,59344,59345,59347,59349,59351,59353],{"class":111,"line":223},[109,59346,53319],{"class":126},[109,59348,55062],{"class":52475},[109,59350,55068],{"class":126},[109,59352,55062],{"class":52475},[109,59354,52482],{"class":126},[109,59356,59357,59359,59361],{"class":111,"line":229},[109,59358,53319],{"class":126},[109,59360,52988],{"class":52475},[109,59362,52482],{"class":126},[109,59364,59365,59367,59369,59371,59373,59375,59377,59380],{"class":111,"line":244},[109,59366,619],{"class":122},[109,59368,55566],{"class":133},[109,59370,14737],{"class":122},[109,59372,55571],{"class":126},[109,59374,55574],{"class":211},[109,59376,714],{"class":126},[109,59378,59379],{"class":278},"'button'",[109,59381,1330],{"class":126},[109,59383,59384,59387,59389,59391,59393,59395,59397],{"class":111,"line":258},[109,59385,59386],{"class":126},"    btn.",[109,59388,58988],{"class":211},[109,59390,714],{"class":126},[109,59392,58993],{"class":278},[109,59394,13608],{"class":126},[109,59396,55624],{"class":122},[109,59398,55627],{"class":126},[109,59400,59401,59404,59406,59408,59411,59413],{"class":111,"line":263},[109,59402,59403],{"class":122},"      const",[109,59405,3601],{"class":133},[109,59407,14737],{"class":122},[109,59409,59410],{"class":126}," Math.",[109,59412,59035],{"class":211},[109,59414,803],{"class":126},[109,59416,59417,59420,59423],{"class":111,"line":269},[109,59418,59419],{"class":126},"      console.",[109,59421,59422],{"class":211},"log",[109,59424,1558],{"class":126},[109,59426,59427],{"class":111,"line":304},[109,59428,34636],{"class":126},[109,59430,59431,59433,59435],{"class":111,"line":331},[109,59432,53592],{"class":126},[109,59434,52988],{"class":52475},[109,59436,52482],{"class":126},[109,59438,59439,59441,59443],{"class":111,"line":336},[109,59440,52960],{"class":126},[109,59442,52975],{"class":52475},[109,59444,52482],{"class":126},[109,59446,59447],{"class":111,"line":364},[109,59448,158],{"emptyLinePlaceholder":157},[109,59450,59451,59453,59455],{"class":111,"line":391},[109,59452,52960],{"class":126},[109,59454,51810],{"class":52475},[109,59456,52482],{"class":126},[19,59458,59459],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59461,59462],{},"常量不可以重新赋值",[19,59464,59465],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[99,59467,59469],{"className":51808,"code":59468,"language":51810,"meta":104,"style":104},"\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",[106,59470,59471,59481,59495,59499,59507,59521,59541,59553,59561,59565,59573,59585,59593,59604,59622,59638,59652,59660,59664,59672,59680,59684],{"__ignoreMap":104},[109,59472,59473,59475,59477,59479],{"class":111,"line":112},[109,59474,52472],{"class":126},[109,59476,52476],{"class":52475},[109,59478,52479],{"class":211},[109,59480,52482],{"class":126},[109,59482,59483,59485,59487,59489,59491,59493],{"class":111,"line":119},[109,59484,1320],{"class":126},[109,59486,51810],{"class":52475},[109,59488,52491],{"class":211},[109,59490,130],{"class":126},[109,59492,52496],{"class":278},[109,59494,52482],{"class":126},[109,59496,59497],{"class":111,"line":140},[109,59498,158],{"emptyLinePlaceholder":157},[109,59500,59501,59503,59505],{"class":111,"line":154},[109,59502,1320],{"class":126},[109,59504,52509],{"class":52475},[109,59506,52482],{"class":126},[109,59508,59509,59511,59513,59515,59517,59519],{"class":111,"line":161},[109,59510,53319],{"class":126},[109,59512,52519],{"class":52475},[109,59514,52522],{"class":211},[109,59516,130],{"class":126},[109,59518,52527],{"class":278},[109,59520,52482],{"class":126},[109,59522,59523,59525,59527,59529,59531,59533,59535,59537,59539],{"class":111,"line":167},[109,59524,53319],{"class":126},[109,59526,52519],{"class":52475},[109,59528,16093],{"class":211},[109,59530,130],{"class":126},[109,59532,52566],{"class":278},[109,59534,52546],{"class":211},[109,59536,130],{"class":126},[109,59538,52573],{"class":278},[109,59540,52482],{"class":126},[109,59542,59543,59545,59547,59549,59551],{"class":111,"line":185},[109,59544,53319],{"class":126},[109,59546,52582],{"class":52475},[109,59548,52585],{"class":126},[109,59550,52582],{"class":52475},[109,59552,52482],{"class":126},[109,59554,59555,59557,59559],{"class":111,"line":201},[109,59556,52960],{"class":126},[109,59558,52509],{"class":52475},[109,59560,52482],{"class":126},[109,59562,59563],{"class":111,"line":206},[109,59564,158],{"emptyLinePlaceholder":157},[109,59566,59567,59569,59571],{"class":111,"line":218},[109,59568,1320],{"class":126},[109,59570,52975],{"class":52475},[109,59572,52482],{"class":126},[109,59574,59575,59577,59579,59581,59583],{"class":111,"line":223},[109,59576,53319],{"class":126},[109,59578,55062],{"class":52475},[109,59580,55068],{"class":126},[109,59582,55062],{"class":52475},[109,59584,52482],{"class":126},[109,59586,59587,59589,59591],{"class":111,"line":229},[109,59588,53319],{"class":126},[109,59590,52988],{"class":52475},[109,59592,52482],{"class":126},[109,59594,59595,59597,59599,59601],{"class":111,"line":244},[109,59596,619],{"class":122},[109,59598,3601],{"class":133},[109,59600,14737],{"class":122},[109,59602,59603],{"class":133}," 10\n",[109,59605,59606,59608,59610,59612,59614,59616,59618,59620],{"class":111,"line":258},[109,59607,619],{"class":122},[109,59609,55566],{"class":133},[109,59611,14737],{"class":122},[109,59613,55571],{"class":126},[109,59615,55574],{"class":211},[109,59617,714],{"class":126},[109,59619,59379],{"class":278},[109,59621,1330],{"class":126},[109,59623,59624,59626,59628,59630,59632,59634,59636],{"class":111,"line":263},[109,59625,59386],{"class":126},[109,59627,58988],{"class":211},[109,59629,714],{"class":126},[109,59631,58993],{"class":278},[109,59633,13608],{"class":126},[109,59635,55624],{"class":122},[109,59637,55627],{"class":126},[109,59639,59640,59642,59644,59646,59648,59650],{"class":111,"line":269},[109,59641,59403],{"class":122},[109,59643,3601],{"class":133},[109,59645,14737],{"class":122},[109,59647,59410],{"class":126},[109,59649,59035],{"class":211},[109,59651,803],{"class":126},[109,59653,59654,59656,59658],{"class":111,"line":304},[109,59655,59419],{"class":126},[109,59657,59422],{"class":211},[109,59659,1558],{"class":126},[109,59661,59662],{"class":111,"line":331},[109,59663,34636],{"class":126},[109,59665,59666,59668,59670],{"class":111,"line":336},[109,59667,53592],{"class":126},[109,59669,52988],{"class":52475},[109,59671,52482],{"class":126},[109,59673,59674,59676,59678],{"class":111,"line":364},[109,59675,52960],{"class":126},[109,59677,52975],{"class":52475},[109,59679,52482],{"class":126},[109,59681,59682],{"class":111,"line":391},[109,59683,158],{"emptyLinePlaceholder":157},[109,59685,59686,59688,59690],{"class":111,"line":396},[109,59687,52960],{"class":126},[109,59689,51810],{"class":52475},[109,59691,52482],{"class":126},[19,59693,59694],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[99,59696,59698],{"className":51808,"code":59697,"language":51810,"meta":104,"style":104},"\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",[106,59699,59700,59710,59724,59728,59736,59750,59770,59782,59790,59794,59802,59814,59822,59832,59850,59866,59879,59887,59891,59899,59907,59911],{"__ignoreMap":104},[109,59701,59702,59704,59706,59708],{"class":111,"line":112},[109,59703,52472],{"class":126},[109,59705,52476],{"class":52475},[109,59707,52479],{"class":211},[109,59709,52482],{"class":126},[109,59711,59712,59714,59716,59718,59720,59722],{"class":111,"line":119},[109,59713,1320],{"class":126},[109,59715,51810],{"class":52475},[109,59717,52491],{"class":211},[109,59719,130],{"class":126},[109,59721,52496],{"class":278},[109,59723,52482],{"class":126},[109,59725,59726],{"class":111,"line":140},[109,59727,158],{"emptyLinePlaceholder":157},[109,59729,59730,59732,59734],{"class":111,"line":154},[109,59731,1320],{"class":126},[109,59733,52509],{"class":52475},[109,59735,52482],{"class":126},[109,59737,59738,59740,59742,59744,59746,59748],{"class":111,"line":161},[109,59739,53319],{"class":126},[109,59741,52519],{"class":52475},[109,59743,52522],{"class":211},[109,59745,130],{"class":126},[109,59747,52527],{"class":278},[109,59749,52482],{"class":126},[109,59751,59752,59754,59756,59758,59760,59762,59764,59766,59768],{"class":111,"line":167},[109,59753,53319],{"class":126},[109,59755,52519],{"class":52475},[109,59757,16093],{"class":211},[109,59759,130],{"class":126},[109,59761,52566],{"class":278},[109,59763,52546],{"class":211},[109,59765,130],{"class":126},[109,59767,52573],{"class":278},[109,59769,52482],{"class":126},[109,59771,59772,59774,59776,59778,59780],{"class":111,"line":185},[109,59773,53319],{"class":126},[109,59775,52582],{"class":52475},[109,59777,52585],{"class":126},[109,59779,52582],{"class":52475},[109,59781,52482],{"class":126},[109,59783,59784,59786,59788],{"class":111,"line":201},[109,59785,52960],{"class":126},[109,59787,52509],{"class":52475},[109,59789,52482],{"class":126},[109,59791,59792],{"class":111,"line":206},[109,59793,158],{"emptyLinePlaceholder":157},[109,59795,59796,59798,59800],{"class":111,"line":218},[109,59797,1320],{"class":126},[109,59799,52975],{"class":52475},[109,59801,52482],{"class":126},[109,59803,59804,59806,59808,59810,59812],{"class":111,"line":223},[109,59805,53319],{"class":126},[109,59807,55062],{"class":52475},[109,59809,55068],{"class":126},[109,59811,55062],{"class":52475},[109,59813,52482],{"class":126},[109,59815,59816,59818,59820],{"class":111,"line":229},[109,59817,53319],{"class":126},[109,59819,52988],{"class":52475},[109,59821,52482],{"class":126},[109,59823,59824,59826,59828,59830],{"class":111,"line":244},[109,59825,619],{"class":122},[109,59827,3601],{"class":133},[109,59829,14737],{"class":122},[109,59831,59603],{"class":133},[109,59833,59834,59836,59838,59840,59842,59844,59846,59848],{"class":111,"line":258},[109,59835,619],{"class":122},[109,59837,55566],{"class":133},[109,59839,14737],{"class":122},[109,59841,55571],{"class":126},[109,59843,55574],{"class":211},[109,59845,714],{"class":126},[109,59847,59379],{"class":278},[109,59849,1330],{"class":126},[109,59851,59852,59854,59856,59858,59860,59862,59864],{"class":111,"line":263},[109,59853,59386],{"class":126},[109,59855,58988],{"class":211},[109,59857,714],{"class":126},[109,59859,58993],{"class":278},[109,59861,13608],{"class":126},[109,59863,55624],{"class":122},[109,59865,55627],{"class":126},[109,59867,59868,59871,59873,59875,59877],{"class":111,"line":269},[109,59869,59870],{"class":126},"      num ",[109,59872,130],{"class":122},[109,59874,59410],{"class":126},[109,59876,59035],{"class":211},[109,59878,803],{"class":126},[109,59880,59881,59883,59885],{"class":111,"line":304},[109,59882,59419],{"class":126},[109,59884,59422],{"class":211},[109,59886,1558],{"class":126},[109,59888,59889],{"class":111,"line":331},[109,59890,34636],{"class":126},[109,59892,59893,59895,59897],{"class":111,"line":336},[109,59894,53592],{"class":126},[109,59896,52988],{"class":52475},[109,59898,52482],{"class":126},[109,59900,59901,59903,59905],{"class":111,"line":364},[109,59902,52960],{"class":126},[109,59904,52975],{"class":52475},[109,59906,52482],{"class":126},[109,59908,59909],{"class":111,"line":391},[109,59910,158],{"emptyLinePlaceholder":157},[109,59912,59913,59915,59917],{"class":111,"line":396},[109,59914,52960],{"class":126},[109,59916,51810],{"class":52475},[109,59918,52482],{"class":126},[19,59920,59921],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[51,59923,59925],{"id":59924},"_324-事件监听版本","3.2.4 事件监听版本",[19,59927,59928],{},[938,59929],{"alt":104,"src":59930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59932,59933],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59935,59936],{},"这种方式会覆盖前边的事件监听:",[99,59938,59940],{"className":51808,"code":59939,"language":51810,"meta":104,"style":104},"\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",[106,59941,59942,59952,59966,59970,59978,59992,60012,60024,60032,60036,60044,60056,60064,60082,60096,60107,60111,60123,60133,60137,60145,60153,60157],{"__ignoreMap":104},[109,59943,59944,59946,59948,59950],{"class":111,"line":112},[109,59945,52472],{"class":126},[109,59947,52476],{"class":52475},[109,59949,52479],{"class":211},[109,59951,52482],{"class":126},[109,59953,59954,59956,59958,59960,59962,59964],{"class":111,"line":119},[109,59955,1320],{"class":126},[109,59957,51810],{"class":52475},[109,59959,52491],{"class":211},[109,59961,130],{"class":126},[109,59963,52496],{"class":278},[109,59965,52482],{"class":126},[109,59967,59968],{"class":111,"line":140},[109,59969,158],{"emptyLinePlaceholder":157},[109,59971,59972,59974,59976],{"class":111,"line":154},[109,59973,1320],{"class":126},[109,59975,52509],{"class":52475},[109,59977,52482],{"class":126},[109,59979,59980,59982,59984,59986,59988,59990],{"class":111,"line":161},[109,59981,53319],{"class":126},[109,59983,52519],{"class":52475},[109,59985,52522],{"class":211},[109,59987,130],{"class":126},[109,59989,52527],{"class":278},[109,59991,52482],{"class":126},[109,59993,59994,59996,59998,60000,60002,60004,60006,60008,60010],{"class":111,"line":167},[109,59995,53319],{"class":126},[109,59997,52519],{"class":52475},[109,59999,16093],{"class":211},[109,60001,130],{"class":126},[109,60003,52566],{"class":278},[109,60005,52546],{"class":211},[109,60007,130],{"class":126},[109,60009,52573],{"class":278},[109,60011,52482],{"class":126},[109,60013,60014,60016,60018,60020,60022],{"class":111,"line":185},[109,60015,53319],{"class":126},[109,60017,52582],{"class":52475},[109,60019,52585],{"class":126},[109,60021,52582],{"class":52475},[109,60023,52482],{"class":126},[109,60025,60026,60028,60030],{"class":111,"line":201},[109,60027,52960],{"class":126},[109,60029,52509],{"class":52475},[109,60031,52482],{"class":126},[109,60033,60034],{"class":111,"line":206},[109,60035,158],{"emptyLinePlaceholder":157},[109,60037,60038,60040,60042],{"class":111,"line":218},[109,60039,1320],{"class":126},[109,60041,52975],{"class":52475},[109,60043,52482],{"class":126},[109,60045,60046,60048,60050,60052,60054],{"class":111,"line":223},[109,60047,53319],{"class":126},[109,60049,55062],{"class":52475},[109,60051,55068],{"class":126},[109,60053,55062],{"class":52475},[109,60055,52482],{"class":126},[109,60057,60058,60060,60062],{"class":111,"line":229},[109,60059,53319],{"class":126},[109,60061,52988],{"class":52475},[109,60063,52482],{"class":126},[109,60065,60066,60068,60070,60072,60074,60076,60078,60080],{"class":111,"line":244},[109,60067,619],{"class":122},[109,60069,55566],{"class":133},[109,60071,14737],{"class":122},[109,60073,55571],{"class":126},[109,60075,55574],{"class":211},[109,60077,714],{"class":126},[109,60079,59379],{"class":278},[109,60081,1330],{"class":126},[109,60083,60084,60086,60089,60091,60094],{"class":111,"line":258},[109,60085,59386],{"class":126},[109,60087,60088],{"class":211},"onclick",[109,60090,14737],{"class":122},[109,60092,60093],{"class":122}," function",[109,60095,55627],{"class":126},[109,60097,60098,60101,60103,60105],{"class":111,"line":263},[109,60099,60100],{"class":211},"      alert",[109,60102,714],{"class":126},[109,60104,2005],{"class":133},[109,60106,1330],{"class":126},[109,60108,60109],{"class":111,"line":269},[109,60110,1361],{"class":126},[109,60112,60113,60115,60117,60119,60121],{"class":111,"line":304},[109,60114,59386],{"class":126},[109,60116,60088],{"class":211},[109,60118,14737],{"class":122},[109,60120,60093],{"class":122},[109,60122,55627],{"class":126},[109,60124,60125,60127,60129,60131],{"class":111,"line":331},[109,60126,60100],{"class":211},[109,60128,714],{"class":126},[109,60130,2282],{"class":133},[109,60132,1330],{"class":126},[109,60134,60135],{"class":111,"line":336},[109,60136,1361],{"class":126},[109,60138,60139,60141,60143],{"class":111,"line":364},[109,60140,53592],{"class":126},[109,60142,52988],{"class":52475},[109,60144,52482],{"class":126},[109,60146,60147,60149,60151],{"class":111,"line":391},[109,60148,52960],{"class":126},[109,60150,52975],{"class":52475},[109,60152,52482],{"class":126},[109,60154,60155],{"class":111,"line":396},[109,60156,158],{"emptyLinePlaceholder":157},[109,60158,60159,60161,60163],{"class":111,"line":402},[109,60160,52960],{"class":126},[109,60162,51810],{"class":52475},[109,60164,52482],{"class":126},[19,60166,60167],{},"只要点击就输出结果为22,前边11被覆盖了",[99,60169,60171],{"className":51808,"code":60170,"language":51810,"meta":104,"style":104},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[106,60172,60173,60178,60183,60187,60192,60197],{"__ignoreMap":104},[109,60174,60175],{"class":111,"line":112},[109,60176,60177],{"class":126},"  btn.addEventListener('click', function () {\n",[109,60179,60180],{"class":111,"line":119},[109,60181,60182],{"class":126},"      alert(11)\n",[109,60184,60185],{"class":111,"line":140},[109,60186,34636],{"class":126},[109,60188,60189],{"class":111,"line":154},[109,60190,60191],{"class":126},"    btn.addEventListener('click', function () {\n",[109,60193,60194],{"class":111,"line":161},[109,60195,60196],{"class":126},"      alert(22)\n",[109,60198,60199],{"class":111,"line":167},[109,60200,34636],{"class":126},[19,60202,60203],{},"点击第一次输出11,第二次点击为22",[51,60205,60207],{"id":60206},"_325-事件类型","3.2.5 事件类型",[19,60209,60210],{},[938,60211],{"alt":104,"src":60212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23171,60214,60216],{"id":60215},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60218,60219],{},"补充知识:",[19,60221,60222],{},"轮播图自动播放模块,可以使用",[19,60224,60225],{},"let timerId = setInterval(function () {",[19,60227,60228],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60230,60231],{},"用js方法模拟进行点击事件,click必须加()",[19,60233,60234],{},"next.click()",[19,60236,60237],{},"}, 1000)",[19,60239,60240],{},[938,60241],{"alt":104,"src":60242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[99,60244,60246],{"className":54242,"code":60245,"language":54244,"meta":104,"style":104},"\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",[106,60247,60248,60252,60262,60276,60280,60288,60303,60323,60343,60356,60364,60369,60374,60378,60382,60387,60392,60397,60402,60406,60410,60415,60420,60425,60429,60433,60438,60442,60447,60452,60456,60460,60465,60470,60475,60480,60485,60489,60493,60498,60503,60508,60513,60518,60522,60526,60531,60536,60541,60546,60551,60556,60561,60566,60571,60576,60580,60584,60589,60594,60598,60602,60607,60612,60616,60621,60626,60630,60634,60639,60643,60648,60653,60657,60662,60666,60670,60675,60680,60685,60690,60695,60700,60705,60709,60713,60717,60722,60727,60732,60737,60741,60749,60757,60761,60769,60784,60798,60819,60827,60841,60854,60869,60888,60900,60912,60924,60936,60948,60960,60972,60980,60995,61019,61043,61051,61059,61067,61075,61080,61085,61090,61095,61100,61105,61110,61115,61120,61125,61129,61134,61139,61144,61149,61154,61159,61164,61169,61174,61178,61183,61188,61193,61198,61203,61208,61213,61218,61223,61228,61233,61238,61242,61246,61251,61256,61261,61265,61270,61275,61280,61285,61290,61294,61299,61303,61307,61311,61315,61319,61323,61328,61333,61338,61343,61348,61353,61358,61363,61368,61372,61376,61381,61386,61391,61396,61401,61405,61410,61415,61420,61425,61430,61435,61439,61443,61448,61452,61457,61461,61466,61471,61476,61481,61486,61491,61495,61503,61511,61515],{"__ignoreMap":104},[109,60249,60250],{"class":111,"line":112},[109,60251,158],{"emptyLinePlaceholder":157},[109,60253,60254,60256,60258,60260],{"class":111,"line":119},[109,60255,52472],{"class":126},[109,60257,52476],{"class":122},[109,60259,52479],{"class":133},[109,60261,52482],{"class":126},[109,60263,60264,60266,60268,60270,60272,60274],{"class":111,"line":140},[109,60265,1320],{"class":126},[109,60267,51810],{"class":52475},[109,60269,52491],{"class":211},[109,60271,130],{"class":126},[109,60273,52496],{"class":278},[109,60275,52482],{"class":126},[109,60277,60278],{"class":111,"line":154},[109,60279,158],{"emptyLinePlaceholder":157},[109,60281,60282,60284,60286],{"class":111,"line":161},[109,60283,1320],{"class":126},[109,60285,52509],{"class":52475},[109,60287,52482],{"class":126},[109,60289,60290,60292,60294,60296,60298,60300],{"class":111,"line":167},[109,60291,53319],{"class":126},[109,60293,52519],{"class":52475},[109,60295,52522],{"class":211},[109,60297,130],{"class":126},[109,60299,52527],{"class":278},[109,60301,60302],{"class":126}," \u002F>\n",[109,60304,60305,60307,60309,60311,60313,60315,60317,60319,60321],{"class":111,"line":185},[109,60306,53319],{"class":126},[109,60308,52519],{"class":52475},[109,60310,52538],{"class":211},[109,60312,130],{"class":126},[109,60314,52543],{"class":278},[109,60316,52546],{"class":211},[109,60318,130],{"class":126},[109,60320,52551],{"class":278},[109,60322,60302],{"class":126},[109,60324,60325,60327,60329,60331,60333,60335,60337,60339,60341],{"class":111,"line":201},[109,60326,53319],{"class":126},[109,60328,52519],{"class":52475},[109,60330,16093],{"class":211},[109,60332,130],{"class":126},[109,60334,52566],{"class":278},[109,60336,52546],{"class":211},[109,60338,130],{"class":126},[109,60340,52573],{"class":278},[109,60342,60302],{"class":126},[109,60344,60345,60347,60349,60352,60354],{"class":111,"line":206},[109,60346,53319],{"class":126},[109,60348,52582],{"class":52475},[109,60350,60351],{"class":126},">轮播图点击切换\u003C\u002F",[109,60353,52582],{"class":52475},[109,60355,52482],{"class":126},[109,60357,60358,60360,60362],{"class":111,"line":218},[109,60359,53319],{"class":126},[109,60361,1467],{"class":52475},[109,60363,52482],{"class":126},[109,60365,60366],{"class":111,"line":223},[109,60367,60368],{"class":126},"    * {\n",[109,60370,60371],{"class":111,"line":229},[109,60372,60373],{"class":126},"      box-sizing: border-box;\n",[109,60375,60376],{"class":111,"line":244},[109,60377,1361],{"class":126},[109,60379,60380],{"class":111,"line":258},[109,60381,158],{"emptyLinePlaceholder":157},[109,60383,60384],{"class":111,"line":263},[109,60385,60386],{"class":126},"    .slider {\n",[109,60388,60389],{"class":111,"line":269},[109,60390,60391],{"class":126},"      width: 560px;\n",[109,60393,60394],{"class":111,"line":304},[109,60395,60396],{"class":126},"      height: 400px;\n",[109,60398,60399],{"class":111,"line":331},[109,60400,60401],{"class":126},"      overflow: hidden;\n",[109,60403,60404],{"class":111,"line":336},[109,60405,1361],{"class":126},[109,60407,60408],{"class":111,"line":364},[109,60409,158],{"emptyLinePlaceholder":157},[109,60411,60412],{"class":111,"line":391},[109,60413,60414],{"class":126},"    .slider-wrapper {\n",[109,60416,60417],{"class":111,"line":396},[109,60418,60419],{"class":126},"      width: 100%;\n",[109,60421,60422],{"class":111,"line":402},[109,60423,60424],{"class":126},"      height: 320px;\n",[109,60426,60427],{"class":111,"line":419},[109,60428,1361],{"class":126},[109,60430,60431],{"class":111,"line":435},[109,60432,158],{"emptyLinePlaceholder":157},[109,60434,60435],{"class":111,"line":440},[109,60436,60437],{"class":126},"    .slider-wrapper img {\n",[109,60439,60440],{"class":111,"line":467},[109,60441,60419],{"class":126},[109,60443,60444],{"class":111,"line":494},[109,60445,60446],{"class":126},"      height: 100%;\n",[109,60448,60449],{"class":111,"line":499},[109,60450,60451],{"class":126},"      display: block;\n",[109,60453,60454],{"class":111,"line":526},[109,60455,1361],{"class":126},[109,60457,60458],{"class":111,"line":552},[109,60459,158],{"emptyLinePlaceholder":157},[109,60461,60462],{"class":111,"line":557},[109,60463,60464],{"class":126},"    .slider-footer {\n",[109,60466,60467],{"class":111,"line":584},[109,60468,60469],{"class":126},"      height: 80px;\n",[109,60471,60472],{"class":111,"line":611},[109,60473,60474],{"class":126},"      background-color: rgb(100, 67, 68);\n",[109,60476,60477],{"class":111,"line":616},[109,60478,60479],{"class":126},"      padding: 12px 12px 0 12px;\n",[109,60481,60482],{"class":111,"line":633},[109,60483,60484],{"class":126},"      position: relative;\n",[109,60486,60487],{"class":111,"line":649},[109,60488,1361],{"class":126},[109,60490,60491],{"class":111,"line":676},[109,60492,158],{"emptyLinePlaceholder":157},[109,60494,60495],{"class":111,"line":703},[109,60496,60497],{"class":126},"    .slider-footer .toggle {\n",[109,60499,60500],{"class":111,"line":708},[109,60501,60502],{"class":126},"      position: absolute;\n",[109,60504,60505],{"class":111,"line":723},[109,60506,60507],{"class":126},"      right: 0;\n",[109,60509,60510],{"class":111,"line":728},[109,60511,60512],{"class":126},"      top: 12px;\n",[109,60514,60515],{"class":111,"line":739},[109,60516,60517],{"class":126},"      display: flex;\n",[109,60519,60520],{"class":111,"line":9352},[109,60521,1361],{"class":126},[109,60523,60524],{"class":111,"line":9364},[109,60525,158],{"emptyLinePlaceholder":157},[109,60527,60528],{"class":111,"line":9376},[109,60529,60530],{"class":126},"    .slider-footer .toggle button {\n",[109,60532,60533],{"class":111,"line":11034},[109,60534,60535],{"class":126},"      margin-right: 12px;\n",[109,60537,60538],{"class":111,"line":11059},[109,60539,60540],{"class":126},"      width: 28px;\n",[109,60542,60543],{"class":111,"line":11082},[109,60544,60545],{"class":126},"      height: 28px;\n",[109,60547,60548],{"class":111,"line":11106},[109,60549,60550],{"class":126},"      appearance: none;\n",[109,60552,60553],{"class":111,"line":11111},[109,60554,60555],{"class":126},"      border: none;\n",[109,60557,60558],{"class":111,"line":11116},[109,60559,60560],{"class":126},"      background: rgba(255, 255, 255, 0.1);\n",[109,60562,60563],{"class":111,"line":11121},[109,60564,60565],{"class":126},"      color: #fff;\n",[109,60567,60568],{"class":111,"line":11130},[109,60569,60570],{"class":126},"      border-radius: 4px;\n",[109,60572,60573],{"class":111,"line":11135},[109,60574,60575],{"class":126},"      cursor: pointer;\n",[109,60577,60578],{"class":111,"line":11141},[109,60579,1361],{"class":126},[109,60581,60582],{"class":111,"line":11162},[109,60583,158],{"emptyLinePlaceholder":157},[109,60585,60586],{"class":111,"line":11168},[109,60587,60588],{"class":126},"    .slider-footer .toggle button:hover {\n",[109,60590,60591],{"class":111,"line":11182},[109,60592,60593],{"class":126},"      background: rgba(255, 255, 255, 0.2);\n",[109,60595,60596],{"class":111,"line":11188},[109,60597,1361],{"class":126},[109,60599,60600],{"class":111,"line":11215},[109,60601,158],{"emptyLinePlaceholder":157},[109,60603,60604],{"class":111,"line":11224},[109,60605,60606],{"class":126},"    .slider-footer p {\n",[109,60608,60609],{"class":111,"line":11230},[109,60610,60611],{"class":126},"      margin: 0;\n",[109,60613,60614],{"class":111,"line":11238},[109,60615,60565],{"class":126},[109,60617,60618],{"class":111,"line":11243},[109,60619,60620],{"class":126},"      font-size: 18px;\n",[109,60622,60623],{"class":111,"line":17777},[109,60624,60625],{"class":126},"      margin-bottom: 10px;\n",[109,60627,60628],{"class":111,"line":17783},[109,60629,1361],{"class":126},[109,60631,60632],{"class":111,"line":17806},[109,60633,158],{"emptyLinePlaceholder":157},[109,60635,60636],{"class":111,"line":17812},[109,60637,60638],{"class":126},"    .slider-indicator {\n",[109,60640,60641],{"class":111,"line":17835},[109,60642,60611],{"class":126},[109,60644,60645],{"class":111,"line":17849},[109,60646,60647],{"class":126},"      padding: 0;\n",[109,60649,60650],{"class":111,"line":17869},[109,60651,60652],{"class":126},"      list-style: none;\n",[109,60654,60655],{"class":111,"line":17875},[109,60656,60517],{"class":126},[109,60658,60659],{"class":111,"line":17886},[109,60660,60661],{"class":126},"      align-items: center;\n",[109,60663,60664],{"class":111,"line":17909},[109,60665,1361],{"class":126},[109,60667,60668],{"class":111,"line":17931},[109,60669,158],{"emptyLinePlaceholder":157},[109,60671,60672],{"class":111,"line":17936},[109,60673,60674],{"class":126},"    .slider-indicator li {\n",[109,60676,60677],{"class":111,"line":17942},[109,60678,60679],{"class":126},"      width: 8px;\n",[109,60681,60682],{"class":111,"line":17956},[109,60683,60684],{"class":126},"      height: 8px;\n",[109,60686,60687],{"class":111,"line":17969},[109,60688,60689],{"class":126},"      margin: 4px;\n",[109,60691,60692],{"class":111,"line":17974},[109,60693,60694],{"class":126},"      border-radius: 50%;\n",[109,60696,60697],{"class":111,"line":17988},[109,60698,60699],{"class":126},"      background: #fff;\n",[109,60701,60702],{"class":111,"line":17993},[109,60703,60704],{"class":126},"      opacity: 0.4;\n",[109,60706,60707],{"class":111,"line":17999},[109,60708,60575],{"class":126},[109,60710,60711],{"class":111,"line":18004},[109,60712,1361],{"class":126},[109,60714,60715],{"class":111,"line":18018},[109,60716,158],{"emptyLinePlaceholder":157},[109,60718,60719],{"class":111,"line":18023},[109,60720,60721],{"class":126},"    .slider-indicator li.active {\n",[109,60723,60724],{"class":111,"line":18028},[109,60725,60726],{"class":126},"      width: 12px;\n",[109,60728,60729],{"class":111,"line":18042},[109,60730,60731],{"class":126},"      height: 12px;\n",[109,60733,60734],{"class":111,"line":18054},[109,60735,60736],{"class":126},"      opacity: 1;\n",[109,60738,60739],{"class":111,"line":18059},[109,60740,1361],{"class":126},[109,60742,60743,60745,60747],{"class":111,"line":18072},[109,60744,53592],{"class":126},[109,60746,1467],{"class":52475},[109,60748,52482],{"class":126},[109,60750,60751,60753,60755],{"class":111,"line":18077},[109,60752,52960],{"class":126},[109,60754,52509],{"class":52475},[109,60756,52482],{"class":126},[109,60758,60759],{"class":111,"line":18082},[109,60760,158],{"emptyLinePlaceholder":157},[109,60762,60763,60765,60767],{"class":111,"line":18087},[109,60764,1320],{"class":126},[109,60766,52975],{"class":52475},[109,60768,52482],{"class":126},[109,60770,60771,60773,60775,60777,60779,60782],{"class":111,"line":18100},[109,60772,53319],{"class":126},[109,60774,52786],{"class":52475},[109,60776,54661],{"class":211},[109,60778,130],{"class":126},[109,60780,60781],{"class":278},"\"slider\"",[109,60783,52482],{"class":126},[109,60785,60786,60788,60790,60792,60794,60796],{"class":111,"line":18105},[109,60787,52516],{"class":126},[109,60789,52786],{"class":52475},[109,60791,54661],{"class":211},[109,60793,130],{"class":126},[109,60795,56402],{"class":278},[109,60797,52482],{"class":126},[109,60799,60800,60802,60804,60806,60808,60811,60813,60815,60817],{"class":111,"line":33808},[109,60801,56409],{"class":126},[109,60803,938],{"class":52475},[109,60805,56414],{"class":211},[109,60807,130],{"class":126},[109,60809,60810],{"class":278},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[109,60812,56422],{"class":211},[109,60814,130],{"class":126},[109,60816,8978],{"class":278},[109,60818,60302],{"class":126},[109,60820,60821,60823,60825],{"class":111,"line":33814},[109,60822,52951],{"class":126},[109,60824,52786],{"class":52475},[109,60826,52482],{"class":126},[109,60828,60829,60831,60833,60835,60837,60839],{"class":111,"line":33820},[109,60830,52516],{"class":126},[109,60832,52786],{"class":52475},[109,60834,54661],{"class":211},[109,60836,130],{"class":126},[109,60838,56449],{"class":278},[109,60840,52482],{"class":126},[109,60842,60843,60845,60847,60850,60852],{"class":111,"line":33826},[109,60844,56409],{"class":126},[109,60846,19],{"class":52475},[109,60848,60849],{"class":126},">对人类来说会不会太超前了？\u003C\u002F",[109,60851,19],{"class":52475},[109,60853,52482],{"class":126},[109,60855,60856,60858,60860,60862,60864,60867],{"class":111,"line":33832},[109,60857,56409],{"class":126},[109,60859,27],{"class":52475},[109,60861,54661],{"class":211},[109,60863,130],{"class":126},[109,60865,60866],{"class":278},"\"slider-indicator\"",[109,60868,52482],{"class":126},[109,60870,60871,60873,60875,60877,60879,60882,60884,60886],{"class":111,"line":33843},[109,60872,56477],{"class":126},[109,60874,30],{"class":52475},[109,60876,54661],{"class":211},[109,60878,130],{"class":126},[109,60880,60881],{"class":278},"\"active\"",[109,60883,56489],{"class":126},[109,60885,30],{"class":52475},[109,60887,52482],{"class":126},[109,60889,60890,60892,60894,60896,60898],{"class":111,"line":33849},[109,60891,56477],{"class":126},[109,60893,30],{"class":52475},[109,60895,56489],{"class":126},[109,60897,30],{"class":52475},[109,60899,52482],{"class":126},[109,60901,60902,60904,60906,60908,60910],{"class":111,"line":33869},[109,60903,56477],{"class":126},[109,60905,30],{"class":52475},[109,60907,56489],{"class":126},[109,60909,30],{"class":52475},[109,60911,52482],{"class":126},[109,60913,60914,60916,60918,60920,60922],{"class":111,"line":33875},[109,60915,56477],{"class":126},[109,60917,30],{"class":52475},[109,60919,56489],{"class":126},[109,60921,30],{"class":52475},[109,60923,52482],{"class":126},[109,60925,60926,60928,60930,60932,60934],{"class":111,"line":33886},[109,60927,56477],{"class":126},[109,60929,30],{"class":52475},[109,60931,56489],{"class":126},[109,60933,30],{"class":52475},[109,60935,52482],{"class":126},[109,60937,60938,60940,60942,60944,60946],{"class":111,"line":33892},[109,60939,56477],{"class":126},[109,60941,30],{"class":52475},[109,60943,56489],{"class":126},[109,60945,30],{"class":52475},[109,60947,52482],{"class":126},[109,60949,60950,60952,60954,60956,60958],{"class":111,"line":33898},[109,60951,56477],{"class":126},[109,60953,30],{"class":52475},[109,60955,56489],{"class":126},[109,60957,30],{"class":52475},[109,60959,52482],{"class":126},[109,60961,60962,60964,60966,60968,60970],{"class":111,"line":33904},[109,60963,56477],{"class":126},[109,60965,30],{"class":52475},[109,60967,56489],{"class":126},[109,60969,30],{"class":52475},[109,60971,52482],{"class":126},[109,60973,60974,60976,60978],{"class":111,"line":33910},[109,60975,56582],{"class":126},[109,60977,27],{"class":52475},[109,60979,52482],{"class":126},[109,60981,60982,60984,60986,60988,60990,60993],{"class":111,"line":33916},[109,60983,56409],{"class":126},[109,60985,52786],{"class":52475},[109,60987,54661],{"class":211},[109,60989,130],{"class":126},[109,60991,60992],{"class":278},"\"toggle\"",[109,60994,52482],{"class":126},[109,60996,60997,60999,61001,61003,61005,61008,61010,61013,61015,61017],{"class":111,"line":33922},[109,60998,56477],{"class":126},[109,61000,55062],{"class":52475},[109,61002,54661],{"class":211},[109,61004,130],{"class":126},[109,61006,61007],{"class":278},"\"prev\"",[109,61009,2490],{"class":126},[109,61011,61012],{"class":133},"&lt;",[109,61014,52960],{"class":126},[109,61016,55062],{"class":52475},[109,61018,52482],{"class":126},[109,61020,61021,61023,61025,61027,61029,61032,61034,61037,61039,61041],{"class":111,"line":33928},[109,61022,56477],{"class":126},[109,61024,55062],{"class":52475},[109,61026,54661],{"class":211},[109,61028,130],{"class":126},[109,61030,61031],{"class":278},"\"next\"",[109,61033,2490],{"class":126},[109,61035,61036],{"class":133},"&gt;",[109,61038,52960],{"class":126},[109,61040,55062],{"class":52475},[109,61042,52482],{"class":126},[109,61044,61045,61047,61049],{"class":111,"line":33948},[109,61046,56582],{"class":126},[109,61048,52786],{"class":52475},[109,61050,52482],{"class":126},[109,61052,61053,61055,61057],{"class":111,"line":33954},[109,61054,52951],{"class":126},[109,61056,52786],{"class":52475},[109,61058,52482],{"class":126},[109,61060,61061,61063,61065],{"class":111,"line":33970},[109,61062,53592],{"class":126},[109,61064,52786],{"class":52475},[109,61066,52482],{"class":126},[109,61068,61069,61071,61073],{"class":111,"line":33976},[109,61070,53319],{"class":126},[109,61072,52988],{"class":52475},[109,61074,52482],{"class":126},[109,61076,61077],{"class":111,"line":33990},[109,61078,61079],{"class":126},"    \u002F\u002F 1. 初始数据\n",[109,61081,61082],{"class":111,"line":33996},[109,61083,61084],{"class":126},"    const data = [\n",[109,61086,61087],{"class":111,"line":34011},[109,61088,61089],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[109,61091,61092],{"class":111,"line":34017},[109,61093,61094],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[109,61096,61097],{"class":111,"line":34026},[109,61098,61099],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[109,61101,61102],{"class":111,"line":34032},[109,61103,61104],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[109,61106,61107],{"class":111,"line":34041},[109,61108,61109],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[109,61111,61112],{"class":111,"line":34047},[109,61113,61114],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[109,61116,61117],{"class":111,"line":34053},[109,61118,61119],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[109,61121,61122],{"class":111,"line":34062},[109,61123,61124],{"class":126},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[109,61126,61127],{"class":111,"line":34068},[109,61128,54284],{"class":126},[109,61130,61131],{"class":111,"line":34079},[109,61132,61133],{"class":126},"    \u002F\u002F 获取元素\n",[109,61135,61136],{"class":111,"line":34085},[109,61137,61138],{"class":126},"    const img = document.querySelector('.slider-wrapper img')\n",[109,61140,61141],{"class":111,"line":34104},[109,61142,61143],{"class":126},"    const p = document.querySelector('.slider-footer p')\n",[109,61145,61146],{"class":111,"line":34110},[109,61147,61148],{"class":126},"    const footer = document.querySelector('.slider-footer')\n",[109,61150,61151],{"class":111,"line":34121},[109,61152,61153],{"class":126},"    \u002F\u002F 1. 右按钮业务\n",[109,61155,61156],{"class":111,"line":34127},[109,61157,61158],{"class":126},"    \u002F\u002F 1.1 获取右侧按钮 \n",[109,61160,61161],{"class":111,"line":34147},[109,61162,61163],{"class":126},"    const next = document.querySelector('.next')\n",[109,61165,61166],{"class":111,"line":34163},[109,61167,61168],{"class":126},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[109,61170,61171],{"class":111,"line":34169},[109,61172,61173],{"class":126},"    \u002F\u002F 1.2 注册点击事件\n",[109,61175,61176],{"class":111,"line":34183},[109,61177,158],{"emptyLinePlaceholder":157},[109,61179,61180],{"class":111,"line":34189},[109,61181,61182],{"class":126},"    next.addEventListener('click', function () {\n",[109,61184,61185],{"class":111,"line":34195},[109,61186,61187],{"class":126},"      \u002F\u002F console.log(11)\n",[109,61189,61190],{"class":111,"line":34206},[109,61191,61192],{"class":126},"      i++\n",[109,61194,61195],{"class":111,"line":34212},[109,61196,61197],{"class":126},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[109,61199,61200],{"class":111,"line":34218},[109,61201,61202],{"class":126},"      \u002F\u002F if (i >= 8) {\n",[109,61204,61205],{"class":111,"line":34228},[109,61206,61207],{"class":126},"      \u002F\u002F   i = 0\n",[109,61209,61210],{"class":111,"line":34234},[109,61211,61212],{"class":126},"      \u002F\u002F }\n",[109,61214,61215],{"class":111,"line":34245},[109,61216,61217],{"class":126},"      i = i >= data.length ? 0 : i\n",[109,61219,61220],{"class":111,"line":34251},[109,61221,61222],{"class":126},"      \u002F\u002F 1.3 得到对应的对象\n",[109,61224,61225],{"class":111,"line":34261},[109,61226,61227],{"class":126},"      \u002F\u002F console.log(data[i])\n",[109,61229,61230],{"class":111,"line":34266},[109,61231,61232],{"class":126},"      \u002F\u002F 调用函数\n",[109,61234,61235],{"class":111,"line":34272},[109,61236,61237],{"class":126},"      toggle()\n",[109,61239,61240],{"class":111,"line":34321},[109,61241,34636],{"class":126},[109,61243,61244],{"class":111,"line":34368},[109,61245,158],{"emptyLinePlaceholder":157},[109,61247,61248],{"class":111,"line":34373},[109,61249,61250],{"class":126},"    \u002F\u002F 2. 左侧按钮业务\n",[109,61252,61253],{"class":111,"line":34379},[109,61254,61255],{"class":126},"    \u002F\u002F 2.1 获取左侧按钮 \n",[109,61257,61258],{"class":111,"line":34398},[109,61259,61260],{"class":126},"    const prev = document.querySelector('.prev')\n",[109,61262,61263],{"class":111,"line":34404},[109,61264,61173],{"class":126},[109,61266,61267],{"class":111,"line":34424},[109,61268,61269],{"class":126},"    prev.addEventListener('click', function () {\n",[109,61271,61272],{"class":111,"line":34430},[109,61273,61274],{"class":126},"      i--\n",[109,61276,61277],{"class":111,"line":34436},[109,61278,61279],{"class":126},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[109,61281,61282],{"class":111,"line":34446},[109,61283,61284],{"class":126},"      \u002F\u002F if (i \u003C 0) {\n",[109,61286,61287],{"class":111,"line":34451},[109,61288,61289],{"class":126},"      \u002F\u002F   i = 7\n",[109,61291,61292],{"class":111,"line":34457},[109,61293,61212],{"class":126},[109,61295,61296],{"class":111,"line":34473},[109,61297,61298],{"class":126},"      i = i \u003C 0 ? data.length - 1 : i\n",[109,61300,61301],{"class":111,"line":34518},[109,61302,61222],{"class":126},[109,61304,61305],{"class":111,"line":34524},[109,61306,61227],{"class":126},[109,61308,61309],{"class":111,"line":34530},[109,61310,61232],{"class":126},[109,61312,61313],{"class":111,"line":34536},[109,61314,61237],{"class":126},[109,61316,61317],{"class":111,"line":34547},[109,61318,34636],{"class":126},[109,61320,61321],{"class":111,"line":34553},[109,61322,158],{"emptyLinePlaceholder":157},[109,61324,61325],{"class":111,"line":34559},[109,61326,61327],{"class":126},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[109,61329,61330],{"class":111,"line":34565},[109,61331,61332],{"class":126},"    function toggle() {\n",[109,61334,61335],{"class":111,"line":34583},[109,61336,61337],{"class":126},"      \u002F\u002F 1.4 渲染对应的数据\n",[109,61339,61340],{"class":111,"line":34597},[109,61341,61342],{"class":126},"      img.src = data[i].url\n",[109,61344,61345],{"class":111,"line":34606},[109,61346,61347],{"class":126},"      p.innerHTML = data[i].title\n",[109,61349,61350],{"class":111,"line":34615},[109,61351,61352],{"class":126},"      footer.style.backgroundColor = data[i].color\n",[109,61354,61355],{"class":111,"line":34624},[109,61356,61357],{"class":126},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[109,61359,61360],{"class":111,"line":34633},[109,61361,61362],{"class":126},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[109,61364,61365],{"class":111,"line":34639},[109,61366,61367],{"class":126},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[109,61369,61370],{"class":111,"line":34645},[109,61371,1361],{"class":126},[109,61373,61374],{"class":111,"line":34653},[109,61375,158],{"emptyLinePlaceholder":157},[109,61377,61378],{"class":111,"line":34658},[109,61379,61380],{"class":126},"    \u002F\u002F 3. 自动播放模块\n",[109,61382,61383],{"class":111,"line":34664},[109,61384,61385],{"class":126},"    let timerId = setInterval(function () {\n",[109,61387,61388],{"class":111,"line":34675},[109,61389,61390],{"class":126},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[109,61392,61393],{"class":111,"line":34681},[109,61394,61395],{"class":126},"      next.click()\n",[109,61397,61398],{"class":111,"line":34701},[109,61399,61400],{"class":126},"    }, 1000)\n",[109,61402,61403],{"class":111,"line":34707},[109,61404,158],{"emptyLinePlaceholder":157},[109,61406,61407],{"class":111,"line":34713},[109,61408,61409],{"class":126},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[109,61411,61412],{"class":111,"line":34719},[109,61413,61414],{"class":126},"    const slider = document.querySelector('.slider')\n",[109,61416,61417],{"class":111,"line":34736},[109,61418,61419],{"class":126},"    \u002F\u002F 注册事件\n",[109,61421,61422],{"class":111,"line":34742},[109,61423,61424],{"class":126},"    slider.addEventListener('mouseenter', function () {\n",[109,61426,61427],{"class":111,"line":34748},[109,61428,61429],{"class":126},"      \u002F\u002F 停止定时器\n",[109,61431,61432],{"class":111,"line":34754},[109,61433,61434],{"class":126},"      clearInterval(timerId)\n",[109,61436,61437],{"class":111,"line":34760},[109,61438,34636],{"class":126},[109,61440,61441],{"class":111,"line":34766},[109,61442,158],{"emptyLinePlaceholder":157},[109,61444,61445],{"class":111,"line":34793},[109,61446,61447],{"class":126},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[109,61449,61450],{"class":111,"line":34817},[109,61451,61419],{"class":126},[109,61453,61454],{"class":111,"line":34823},[109,61455,61456],{"class":126},"    slider.addEventListener('mouseleave', function () {\n",[109,61458,61459],{"class":111,"line":34829},[109,61460,61429],{"class":126},[109,61462,61463],{"class":111,"line":34835},[109,61464,61465],{"class":126},"      if (timerId) clearInterval(timerId)\n",[109,61467,61468],{"class":111,"line":34846},[109,61469,61470],{"class":126},"      \u002F\u002F 开启定时器\n",[109,61472,61473],{"class":111,"line":34857},[109,61474,61475],{"class":126},"      timerId = setInterval(function () {\n",[109,61477,61478],{"class":111,"line":34863},[109,61479,61480],{"class":126},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[109,61482,61483],{"class":111,"line":34880},[109,61484,61485],{"class":126},"        next.click()\n",[109,61487,61488],{"class":111,"line":34903},[109,61489,61490],{"class":126},"      }, 1000)\n",[109,61492,61493],{"class":111,"line":34926},[109,61494,34636],{"class":126},[109,61496,61497,61499,61501],{"class":111,"line":34932},[109,61498,53592],{"class":126},[109,61500,52988],{"class":52475},[109,61502,52482],{"class":126},[109,61504,61505,61507,61509],{"class":111,"line":34937},[109,61506,52960],{"class":126},[109,61508,52975],{"class":52475},[109,61510,52482],{"class":126},[109,61512,61513],{"class":111,"line":34946},[109,61514,158],{"emptyLinePlaceholder":157},[109,61516,61517,61519,61521],{"class":111,"line":34956},[109,61518,52960],{"class":126},[109,61520,51810],{"class":52475},[109,61522,52482],{"class":126},[23171,61524,61526],{"id":61525},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61528,61529],{},"小米搜索框案例：",[99,61531,61533],{"className":51808,"code":61532,"language":51810,"meta":104,"style":104},"\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",[106,61534,61535,61545,61559,61563,61571,61585,61605,61625,61637,61645,61651,61661,61671,61683,61687,61691,61698,61702,61713,61717,61721,61728,61739,61752,61766,61770,61774,61783,61795,61807,61821,61834,61847,61865,61876,61880,61884,61893,61910,61914,61918,61925,61935,61945,61956,61969,61981,61997,62008,62020,62024,62028,62036,62047,62064,62076,62088,62099,62103,62107,62118,62129,62133,62141,62145,62153,62157,62165,62180,62203,62218,62249,62276,62303,62330,62357,62384,62411,62420,62428,62436,62441,62461,62481,62486,62491,62509,62514,62524,62529,62543,62548,62553,62570,62579,62591,62595,62603,62611,62615],{"__ignoreMap":104},[109,61536,61537,61539,61541,61543],{"class":111,"line":112},[109,61538,52472],{"class":126},[109,61540,52476],{"class":52475},[109,61542,52479],{"class":211},[109,61544,52482],{"class":126},[109,61546,61547,61549,61551,61553,61555,61557],{"class":111,"line":119},[109,61548,1320],{"class":126},[109,61550,51810],{"class":52475},[109,61552,52491],{"class":211},[109,61554,130],{"class":126},[109,61556,52496],{"class":278},[109,61558,52482],{"class":126},[109,61560,61561],{"class":111,"line":140},[109,61562,158],{"emptyLinePlaceholder":157},[109,61564,61565,61567,61569],{"class":111,"line":154},[109,61566,1320],{"class":126},[109,61568,52509],{"class":52475},[109,61570,52482],{"class":126},[109,61572,61573,61575,61577,61579,61581,61583],{"class":111,"line":161},[109,61574,52516],{"class":126},[109,61576,52519],{"class":52475},[109,61578,52522],{"class":211},[109,61580,130],{"class":126},[109,61582,52527],{"class":278},[109,61584,52482],{"class":126},[109,61586,61587,61589,61591,61593,61595,61597,61599,61601,61603],{"class":111,"line":167},[109,61588,52516],{"class":126},[109,61590,52519],{"class":52475},[109,61592,52538],{"class":211},[109,61594,130],{"class":126},[109,61596,52543],{"class":278},[109,61598,52546],{"class":211},[109,61600,130],{"class":126},[109,61602,52551],{"class":278},[109,61604,52482],{"class":126},[109,61606,61607,61609,61611,61613,61615,61617,61619,61621,61623],{"class":111,"line":185},[109,61608,52516],{"class":126},[109,61610,52519],{"class":52475},[109,61612,16093],{"class":211},[109,61614,130],{"class":126},[109,61616,52566],{"class":278},[109,61618,52546],{"class":211},[109,61620,130],{"class":126},[109,61622,52573],{"class":278},[109,61624,52482],{"class":126},[109,61626,61627,61629,61631,61633,61635],{"class":111,"line":201},[109,61628,52516],{"class":126},[109,61630,52582],{"class":52475},[109,61632,52585],{"class":126},[109,61634,52582],{"class":52475},[109,61636,52482],{"class":126},[109,61638,61639,61641,61643],{"class":111,"line":206},[109,61640,52516],{"class":126},[109,61642,1467],{"class":52475},[109,61644,52482],{"class":126},[109,61646,61647,61649],{"class":111,"line":218},[109,61648,52602],{"class":52475},[109,61650,16745],{"class":126},[109,61652,61653,61655,61657,61659],{"class":111,"line":223},[109,61654,52609],{"class":133},[109,61656,52612],{"class":126},[109,61658,1314],{"class":133},[109,61660,137],{"class":126},[109,61662,61663,61665,61667,61669],{"class":111,"line":229},[109,61664,52621],{"class":133},[109,61666,52612],{"class":126},[109,61668,1314],{"class":133},[109,61670,137],{"class":126},[109,61672,61673,61676,61678,61681],{"class":111,"line":244},[109,61674,61675],{"class":133},"            box-sizing",[109,61677,52612],{"class":126},[109,61679,61680],{"class":133},"border-box",[109,61682,137],{"class":126},[109,61684,61685],{"class":111,"line":258},[109,61686,3884],{"class":126},[109,61688,61689],{"class":111,"line":263},[109,61690,158],{"emptyLinePlaceholder":157},[109,61692,61693,61696],{"class":111,"line":269},[109,61694,61695],{"class":52475},"        ul",[109,61697,16745],{"class":126},[109,61699,61700],{"class":111,"line":304},[109,61701,158],{"emptyLinePlaceholder":157},[109,61703,61704,61707,61709,61711],{"class":111,"line":331},[109,61705,61706],{"class":133},"            list-style",[109,61708,52612],{"class":126},[109,61710,55912],{"class":133},[109,61712,137],{"class":126},[109,61714,61715],{"class":111,"line":336},[109,61716,3884],{"class":126},[109,61718,61719],{"class":111,"line":364},[109,61720,158],{"emptyLinePlaceholder":157},[109,61722,61723,61726],{"class":111,"line":391},[109,61724,61725],{"class":211},"        .mi",[109,61727,16745],{"class":126},[109,61729,61730,61733,61735,61737],{"class":111,"line":396},[109,61731,61732],{"class":133},"            position",[109,61734,52612],{"class":126},[109,61736,55939],{"class":133},[109,61738,137],{"class":126},[109,61740,61741,61743,61745,61748,61750],{"class":111,"line":402},[109,61742,52659],{"class":133},[109,61744,52612],{"class":126},[109,61746,61747],{"class":133},"223",[109,61749,52667],{"class":122},[109,61751,137],{"class":126},[109,61753,61754,61756,61758,61760,61762,61764],{"class":111,"line":419},[109,61755,52609],{"class":133},[109,61757,52612],{"class":126},[109,61759,1351],{"class":133},[109,61761,52667],{"class":122},[109,61763,52731],{"class":133},[109,61765,137],{"class":126},[109,61767,61768],{"class":111,"line":435},[109,61769,3884],{"class":126},[109,61771,61772],{"class":111,"line":440},[109,61773,158],{"emptyLinePlaceholder":157},[109,61775,61776,61778,61781],{"class":111,"line":467},[109,61777,61725],{"class":211},[109,61779,61780],{"class":52475}," input",[109,61782,16745],{"class":126},[109,61784,61785,61787,61789,61791,61793],{"class":111,"line":494},[109,61786,52659],{"class":133},[109,61788,52612],{"class":126},[109,61790,61747],{"class":133},[109,61792,52667],{"class":122},[109,61794,137],{"class":126},[109,61796,61797,61799,61801,61803,61805],{"class":111,"line":499},[109,61798,52674],{"class":133},[109,61800,52612],{"class":126},[109,61802,2139],{"class":133},[109,61804,52667],{"class":122},[109,61806,137],{"class":126},[109,61808,61809,61811,61813,61815,61817,61819],{"class":111,"line":526},[109,61810,52621],{"class":133},[109,61812,52612],{"class":126},[109,61814,1314],{"class":133},[109,61816,134],{"class":133},[109,61818,52667],{"class":122},[109,61820,137],{"class":126},[109,61822,61823,61826,61828,61830,61832],{"class":111,"line":552},[109,61824,61825],{"class":133},"            font-size",[109,61827,52612],{"class":126},[109,61829,2081],{"class":133},[109,61831,52667],{"class":122},[109,61833,137],{"class":126},[109,61835,61836,61839,61841,61843,61845],{"class":111,"line":557},[109,61837,61838],{"class":133},"            line-height",[109,61840,52612],{"class":126},[109,61842,2139],{"class":133},[109,61844,52667],{"class":122},[109,61846,137],{"class":126},[109,61848,61849,61852,61854,61856,61858,61860,61863],{"class":111,"line":584},[109,61850,61851],{"class":133},"            border",[109,61853,52612],{"class":126},[109,61855,1755],{"class":133},[109,61857,52667],{"class":122},[109,61859,52696],{"class":133},[109,61861,61862],{"class":133}," #e0e0e0",[109,61864,137],{"class":126},[109,61866,61867,61870,61872,61874],{"class":111,"line":611},[109,61868,61869],{"class":133},"            outline",[109,61871,52612],{"class":126},[109,61873,55912],{"class":133},[109,61875,137],{"class":126},[109,61877,61878],{"class":111,"line":616},[109,61879,3884],{"class":126},[109,61881,61882],{"class":111,"line":633},[109,61883,158],{"emptyLinePlaceholder":157},[109,61885,61886,61888,61891],{"class":111,"line":649},[109,61887,61725],{"class":211},[109,61889,61890],{"class":211}," .search",[109,61892,16745],{"class":126},[109,61894,61895,61897,61899,61901,61903,61905,61908],{"class":111,"line":676},[109,61896,61851],{"class":133},[109,61898,52612],{"class":126},[109,61900,1755],{"class":133},[109,61902,52667],{"class":122},[109,61904,52696],{"class":133},[109,61906,61907],{"class":133}," #ff6700",[109,61909,137],{"class":126},[109,61911,61912],{"class":111,"line":703},[109,61913,3884],{"class":126},[109,61915,61916],{"class":111,"line":708},[109,61917,158],{"emptyLinePlaceholder":157},[109,61919,61920,61923],{"class":111,"line":723},[109,61921,61922],{"class":211},"        .result-list",[109,61924,16745],{"class":126},[109,61926,61927,61929,61931,61933],{"class":111,"line":728},[109,61928,52647],{"class":133},[109,61930,52612],{"class":126},[109,61932,55912],{"class":133},[109,61934,137],{"class":126},[109,61936,61937,61939,61941,61943],{"class":111,"line":739},[109,61938,61732],{"class":133},[109,61940,52612],{"class":126},[109,61942,56006],{"class":133},[109,61944,137],{"class":126},[109,61946,61947,61950,61952,61954],{"class":111,"line":9352},[109,61948,61949],{"class":133},"            left",[109,61951,52612],{"class":126},[109,61953,1314],{"class":133},[109,61955,137],{"class":126},[109,61957,61958,61961,61963,61965,61967],{"class":111,"line":9364},[109,61959,61960],{"class":133},"            top",[109,61962,52612],{"class":126},[109,61964,2139],{"class":133},[109,61966,52667],{"class":122},[109,61968,137],{"class":126},[109,61970,61971,61973,61975,61977,61979],{"class":111,"line":9376},[109,61972,52659],{"class":133},[109,61974,52612],{"class":126},[109,61976,61747],{"class":133},[109,61978,52667],{"class":122},[109,61980,137],{"class":126},[109,61982,61983,61985,61987,61989,61991,61993,61995],{"class":111,"line":11034},[109,61984,61851],{"class":133},[109,61986,52612],{"class":126},[109,61988,1755],{"class":133},[109,61990,52667],{"class":122},[109,61992,52696],{"class":133},[109,61994,61907],{"class":133},[109,61996,137],{"class":126},[109,61998,61999,62002,62004,62006],{"class":111,"line":11059},[109,62000,62001],{"class":133},"            border-top",[109,62003,52612],{"class":126},[109,62005,1314],{"class":133},[109,62007,137],{"class":126},[109,62009,62010,62013,62015,62018],{"class":111,"line":11082},[109,62011,62012],{"class":133},"            background",[109,62014,52612],{"class":126},[109,62016,62017],{"class":133},"#fff",[109,62019,137],{"class":126},[109,62021,62022],{"class":111,"line":11106},[109,62023,3884],{"class":126},[109,62025,62026],{"class":111,"line":11111},[109,62027,158],{"emptyLinePlaceholder":157},[109,62029,62030,62032,62034],{"class":111,"line":11116},[109,62031,61922],{"class":211},[109,62033,2791],{"class":52475},[109,62035,16745],{"class":126},[109,62037,62038,62040,62042,62045],{"class":111,"line":11121},[109,62039,52647],{"class":133},[109,62041,52612],{"class":126},[109,62043,62044],{"class":133},"block",[109,62046,137],{"class":126},[109,62048,62049,62051,62053,62055,62057,62060,62062],{"class":111,"line":11130},[109,62050,52621],{"class":133},[109,62052,52612],{"class":126},[109,62054,1881],{"class":133},[109,62056,52667],{"class":122},[109,62058,62059],{"class":133}," 15",[109,62061,52667],{"class":122},[109,62063,137],{"class":126},[109,62065,62066,62068,62070,62072,62074],{"class":111,"line":11135},[109,62067,61825],{"class":133},[109,62069,52612],{"class":126},[109,62071,2030],{"class":133},[109,62073,52667],{"class":122},[109,62075,137],{"class":126},[109,62077,62078,62081,62083,62086],{"class":111,"line":11141},[109,62079,62080],{"class":133},"            color",[109,62082,52612],{"class":126},[109,62084,62085],{"class":133},"#424242",[109,62087,137],{"class":126},[109,62089,62090,62093,62095,62097],{"class":111,"line":11162},[109,62091,62092],{"class":133},"            text-decoration",[109,62094,52612],{"class":126},[109,62096,55912],{"class":133},[109,62098,137],{"class":126},[109,62100,62101],{"class":111,"line":11168},[109,62102,3884],{"class":126},[109,62104,62105],{"class":111,"line":11182},[109,62106,158],{"emptyLinePlaceholder":157},[109,62108,62109,62111,62113,62116],{"class":111,"line":11188},[109,62110,61922],{"class":211},[109,62112,2791],{"class":52475},[109,62114,62115],{"class":211},":hover",[109,62117,16745],{"class":126},[109,62119,62120,62122,62124,62127],{"class":111,"line":11215},[109,62121,52815],{"class":133},[109,62123,52612],{"class":126},[109,62125,62126],{"class":133},"#eee",[109,62128,137],{"class":126},[109,62130,62131],{"class":111,"line":11224},[109,62132,3884],{"class":126},[109,62134,62135,62137,62139],{"class":111,"line":11230},[109,62136,52951],{"class":126},[109,62138,1467],{"class":52475},[109,62140,52482],{"class":126},[109,62142,62143],{"class":111,"line":11238},[109,62144,158],{"emptyLinePlaceholder":157},[109,62146,62147,62149,62151],{"class":111,"line":11243},[109,62148,52960],{"class":126},[109,62150,52509],{"class":52475},[109,62152,52482],{"class":126},[109,62154,62155],{"class":111,"line":17777},[109,62156,158],{"emptyLinePlaceholder":157},[109,62158,62159,62161,62163],{"class":111,"line":17783},[109,62160,1320],{"class":126},[109,62162,52975],{"class":52475},[109,62164,52482],{"class":126},[109,62166,62167,62169,62171,62173,62175,62178],{"class":111,"line":17806},[109,62168,52516],{"class":126},[109,62170,52786],{"class":52475},[109,62172,54661],{"class":211},[109,62174,130],{"class":126},[109,62176,62177],{"class":278},"\"mi\"",[109,62179,52482],{"class":126},[109,62181,62182,62184,62186,62188,62190,62193,62196,62198,62201],{"class":111,"line":17812},[109,62183,56477],{"class":126},[109,62185,54996],{"class":52475},[109,62187,54999],{"class":211},[109,62189,130],{"class":126},[109,62191,62192],{"class":278},"\"search\"",[109,62194,62195],{"class":211}," placeholder",[109,62197,130],{"class":126},[109,62199,62200],{"class":278},"\"小米笔记本\"",[109,62202,52482],{"class":126},[109,62204,62205,62207,62209,62211,62213,62216],{"class":111,"line":17835},[109,62206,56477],{"class":126},[109,62208,27],{"class":52475},[109,62210,54661],{"class":211},[109,62212,130],{"class":126},[109,62214,62215],{"class":278},"\"result-list\"",[109,62217,52482],{"class":126},[109,62219,62220,62223,62225,62228,62230,62233,62235,62238,62241,62243,62245,62247],{"class":111,"line":17849},[109,62221,62222],{"class":126},"            \u003C",[109,62224,30],{"class":52475},[109,62226,62227],{"class":126},">\u003C",[109,62229,1776],{"class":52475},[109,62231,62232],{"class":211}," href",[109,62234,130],{"class":126},[109,62236,62237],{"class":278},"\"#\"",[109,62239,62240],{"class":126},">全部商品\u003C\u002F",[109,62242,1776],{"class":52475},[109,62244,56489],{"class":126},[109,62246,30],{"class":52475},[109,62248,52482],{"class":126},[109,62250,62251,62253,62255,62257,62259,62261,62263,62265,62268,62270,62272,62274],{"class":111,"line":17869},[109,62252,62222],{"class":126},[109,62254,30],{"class":52475},[109,62256,62227],{"class":126},[109,62258,1776],{"class":52475},[109,62260,62232],{"class":211},[109,62262,130],{"class":126},[109,62264,62237],{"class":278},[109,62266,62267],{"class":126},">小米11\u003C\u002F",[109,62269,1776],{"class":52475},[109,62271,56489],{"class":126},[109,62273,30],{"class":52475},[109,62275,52482],{"class":126},[109,62277,62278,62280,62282,62284,62286,62288,62290,62292,62295,62297,62299,62301],{"class":111,"line":17875},[109,62279,62222],{"class":126},[109,62281,30],{"class":52475},[109,62283,62227],{"class":126},[109,62285,1776],{"class":52475},[109,62287,62232],{"class":211},[109,62289,130],{"class":126},[109,62291,62237],{"class":278},[109,62293,62294],{"class":126},">小米10S\u003C\u002F",[109,62296,1776],{"class":52475},[109,62298,56489],{"class":126},[109,62300,30],{"class":52475},[109,62302,52482],{"class":126},[109,62304,62305,62307,62309,62311,62313,62315,62317,62319,62322,62324,62326,62328],{"class":111,"line":17886},[109,62306,62222],{"class":126},[109,62308,30],{"class":52475},[109,62310,62227],{"class":126},[109,62312,1776],{"class":52475},[109,62314,62232],{"class":211},[109,62316,130],{"class":126},[109,62318,62237],{"class":278},[109,62320,62321],{"class":126},">小米笔记本\u003C\u002F",[109,62323,1776],{"class":52475},[109,62325,56489],{"class":126},[109,62327,30],{"class":52475},[109,62329,52482],{"class":126},[109,62331,62332,62334,62336,62338,62340,62342,62344,62346,62349,62351,62353,62355],{"class":111,"line":17909},[109,62333,62222],{"class":126},[109,62335,30],{"class":52475},[109,62337,62227],{"class":126},[109,62339,1776],{"class":52475},[109,62341,62232],{"class":211},[109,62343,130],{"class":126},[109,62345,62237],{"class":278},[109,62347,62348],{"class":126},">小米手机\u003C\u002F",[109,62350,1776],{"class":52475},[109,62352,56489],{"class":126},[109,62354,30],{"class":52475},[109,62356,52482],{"class":126},[109,62358,62359,62361,62363,62365,62367,62369,62371,62373,62376,62378,62380,62382],{"class":111,"line":17931},[109,62360,62222],{"class":126},[109,62362,30],{"class":52475},[109,62364,62227],{"class":126},[109,62366,1776],{"class":52475},[109,62368,62232],{"class":211},[109,62370,130],{"class":126},[109,62372,62237],{"class":278},[109,62374,62375],{"class":126},">黑鲨4\u003C\u002F",[109,62377,1776],{"class":52475},[109,62379,56489],{"class":126},[109,62381,30],{"class":52475},[109,62383,52482],{"class":126},[109,62385,62386,62388,62390,62392,62394,62396,62398,62400,62403,62405,62407,62409],{"class":111,"line":17936},[109,62387,62222],{"class":126},[109,62389,30],{"class":52475},[109,62391,62227],{"class":126},[109,62393,1776],{"class":52475},[109,62395,62232],{"class":211},[109,62397,130],{"class":126},[109,62399,62237],{"class":278},[109,62401,62402],{"class":126},">空调\u003C\u002F",[109,62404,1776],{"class":52475},[109,62406,56489],{"class":126},[109,62408,30],{"class":52475},[109,62410,52482],{"class":126},[109,62412,62413,62416,62418],{"class":111,"line":17942},[109,62414,62415],{"class":126},"        \u003C\u002F",[109,62417,27],{"class":52475},[109,62419,52482],{"class":126},[109,62421,62422,62424,62426],{"class":111,"line":17956},[109,62423,52951],{"class":126},[109,62425,52786],{"class":52475},[109,62427,52482],{"class":126},[109,62429,62430,62432,62434],{"class":111,"line":17969},[109,62431,52516],{"class":126},[109,62433,52988],{"class":52475},[109,62435,52482],{"class":126},[109,62437,62438],{"class":111,"line":17974},[109,62439,62440],{"class":115},"        \u002F\u002F 1. 获取元素\n",[109,62442,62443,62446,62448,62450,62452,62454,62456,62459],{"class":111,"line":17988},[109,62444,62445],{"class":122},"        const",[109,62447,61780],{"class":133},[109,62449,14737],{"class":122},[109,62451,55571],{"class":126},[109,62453,55574],{"class":211},[109,62455,714],{"class":126},[109,62457,62458],{"class":278},"'[type=search]'",[109,62460,1330],{"class":126},[109,62462,62463,62465,62468,62470,62472,62474,62476,62479],{"class":111,"line":17993},[109,62464,62445],{"class":122},[109,62466,62467],{"class":133}," ul",[109,62469,14737],{"class":122},[109,62471,55571],{"class":126},[109,62473,55574],{"class":211},[109,62475,714],{"class":126},[109,62477,62478],{"class":278},"'.result-list'",[109,62480,1330],{"class":126},[109,62482,62483],{"class":111,"line":17999},[109,62484,62485],{"class":115},"        \u002F\u002F console.log(input)\n",[109,62487,62488],{"class":111,"line":18004},[109,62489,62490],{"class":115},"        \u002F\u002F 2. 监听事件 获得焦点\n",[109,62492,62493,62496,62498,62500,62503,62505,62507],{"class":111,"line":18018},[109,62494,62495],{"class":126},"        input.",[109,62497,58988],{"class":211},[109,62499,714],{"class":126},[109,62501,62502],{"class":278},"'focus'",[109,62504,13608],{"class":126},[109,62506,55624],{"class":122},[109,62508,55627],{"class":126},[109,62510,62511],{"class":111,"line":18023},[109,62512,62513],{"class":115},"            \u002F\u002F ul显示\n",[109,62515,62516,62519,62521],{"class":111,"line":18028},[109,62517,62518],{"class":126},"            ul.style.display ",[109,62520,130],{"class":122},[109,62522,62523],{"class":278}," 'block'\n",[109,62525,62526],{"class":111,"line":18042},[109,62527,62528],{"class":115},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[109,62530,62531,62534,62536,62538,62541],{"class":111,"line":18054},[109,62532,62533],{"class":126},"            input.classList.",[109,62535,6671],{"class":211},[109,62537,714],{"class":126},[109,62539,62540],{"class":278},"'search'",[109,62542,1330],{"class":126},[109,62544,62545],{"class":111,"line":18059},[109,62546,62547],{"class":126},"        })\n",[109,62549,62550],{"class":111,"line":18072},[109,62551,62552],{"class":115},"        \u002F\u002F 3. 监听事件 失去焦点\n",[109,62554,62555,62557,62559,62561,62564,62566,62568],{"class":111,"line":18077},[109,62556,62495],{"class":126},[109,62558,58988],{"class":211},[109,62560,714],{"class":126},[109,62562,62563],{"class":278},"'blur'",[109,62565,13608],{"class":126},[109,62567,55624],{"class":122},[109,62569,55627],{"class":126},[109,62571,62572,62574,62576],{"class":111,"line":18082},[109,62573,62518],{"class":126},[109,62575,130],{"class":122},[109,62577,62578],{"class":278}," 'none'\n",[109,62580,62581,62583,62585,62587,62589],{"class":111,"line":18087},[109,62582,62533],{"class":126},[109,62584,58181],{"class":211},[109,62586,714],{"class":126},[109,62588,62540],{"class":278},[109,62590,1330],{"class":126},[109,62592,62593],{"class":111,"line":18100},[109,62594,62547],{"class":126},[109,62596,62597,62599,62601],{"class":111,"line":18105},[109,62598,52951],{"class":126},[109,62600,52988],{"class":52475},[109,62602,52482],{"class":126},[109,62604,62605,62607,62609],{"class":111,"line":33808},[109,62606,52960],{"class":126},[109,62608,52975],{"class":52475},[109,62610,52482],{"class":126},[109,62612,62613],{"class":111,"line":33814},[109,62614,158],{"emptyLinePlaceholder":157},[109,62616,62617,62619,62621],{"class":111,"line":33820},[109,62618,52960],{"class":126},[109,62620,51810],{"class":52475},[109,62622,52482],{"class":126},[23171,62624,62626],{"id":62625},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62628,62629],{},"评论字数统计案例",[19,62631,62632],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62634,62635],{},"牢记focus伪类选择器",[52519,62637],{"charSet":62638},"UTF-8",[52519,62640],{"name":62641,"content":62642},"viewport","width=device-width, initial-scale=1.0",[52582,62644,62645],{},"Document",[1467,62647,62648],{},"\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",[54996,62650],{"type":6524},[27,62652,62653,62656],{},[30,62654,62655],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[30,62657,62658],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[99,62660,62662],{"className":51808,"code":62661,"language":51810,"meta":104,"style":104},"\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",[106,62663,62664,62674,62688,62692,62700,62714,62734,62754,62767,62775,62782,62795,62809,62819,62829,62833,62837,62844,62856,62868,62880,62892,62921,62934,62938,62942,62951,62962,62974,62985,62996,63008,63019,63031,63047,63059,63063,63067,63078,63089,63099,63111,63115,63119,63127,63138,63148,63159,63171,63184,63196,63208,63212,63216,63225,63237,63248,63261,63272,63286,63290,63294,63301,63313,63325,63335,63339,63343,63352,63364,63374,63378,63382,63393,63403,63422,63435,63439,63443,63453,63463,63467,63471,63482,63493,63505,63517,63521,63525,63536,63547,63561,63565,63569,63580,63590,63602,63606,63614,63622,63626,63634,63649,63668,63708,63721,63729,63743,63763,63771,63786,63809,63827,63842,63862,63882,63902,63910,63918,63926,63934,63954,63974,63979,63996,64005,64009,64014,64030,64038,64042,64047,64064,64069,64094,64098,64102,64107,64112,64120,64128,64132],{"__ignoreMap":104},[109,62665,62666,62668,62670,62672],{"class":111,"line":112},[109,62667,52472],{"class":126},[109,62669,52476],{"class":52475},[109,62671,52479],{"class":211},[109,62673,52482],{"class":126},[109,62675,62676,62678,62680,62682,62684,62686],{"class":111,"line":119},[109,62677,1320],{"class":126},[109,62679,51810],{"class":52475},[109,62681,52491],{"class":211},[109,62683,130],{"class":126},[109,62685,52496],{"class":278},[109,62687,52482],{"class":126},[109,62689,62690],{"class":111,"line":140},[109,62691,158],{"emptyLinePlaceholder":157},[109,62693,62694,62696,62698],{"class":111,"line":154},[109,62695,1320],{"class":126},[109,62697,52509],{"class":52475},[109,62699,52482],{"class":126},[109,62701,62702,62704,62706,62708,62710,62712],{"class":111,"line":161},[109,62703,53319],{"class":126},[109,62705,52519],{"class":52475},[109,62707,52522],{"class":211},[109,62709,130],{"class":126},[109,62711,52527],{"class":278},[109,62713,52482],{"class":126},[109,62715,62716,62718,62720,62722,62724,62726,62728,62730,62732],{"class":111,"line":167},[109,62717,53319],{"class":126},[109,62719,52519],{"class":52475},[109,62721,52538],{"class":211},[109,62723,130],{"class":126},[109,62725,52543],{"class":278},[109,62727,52546],{"class":211},[109,62729,130],{"class":126},[109,62731,52551],{"class":278},[109,62733,52482],{"class":126},[109,62735,62736,62738,62740,62742,62744,62746,62748,62750,62752],{"class":111,"line":185},[109,62737,53319],{"class":126},[109,62739,52519],{"class":52475},[109,62741,16093],{"class":211},[109,62743,130],{"class":126},[109,62745,52566],{"class":278},[109,62747,52546],{"class":211},[109,62749,130],{"class":126},[109,62751,52573],{"class":278},[109,62753,52482],{"class":126},[109,62755,62756,62758,62760,62763,62765],{"class":111,"line":201},[109,62757,53319],{"class":126},[109,62759,52582],{"class":52475},[109,62761,62762],{"class":126},">评论回车发布\u003C\u002F",[109,62764,52582],{"class":52475},[109,62766,52482],{"class":126},[109,62768,62769,62771,62773],{"class":111,"line":206},[109,62770,53319],{"class":126},[109,62772,1467],{"class":52475},[109,62774,52482],{"class":126},[109,62776,62777,62780],{"class":111,"line":218},[109,62778,62779],{"class":211},"    .wrapper",[109,62781,16745],{"class":126},[109,62783,62784,62787,62789,62791,62793],{"class":111,"line":223},[109,62785,62786],{"class":133},"      min-width",[109,62788,52612],{"class":126},[109,62790,5329],{"class":133},[109,62792,52667],{"class":122},[109,62794,137],{"class":126},[109,62796,62797,62800,62802,62805,62807],{"class":111,"line":229},[109,62798,62799],{"class":133},"      max-width",[109,62801,52612],{"class":126},[109,62803,62804],{"class":133},"800",[109,62806,52667],{"class":122},[109,62808,137],{"class":126},[109,62810,62811,62813,62815,62817],{"class":111,"line":244},[109,62812,56184],{"class":133},[109,62814,52612],{"class":126},[109,62816,52652],{"class":133},[109,62818,137],{"class":126},[109,62820,62821,62823,62825,62827],{"class":111,"line":258},[109,62822,56195],{"class":133},[109,62824,52612],{"class":126},[109,62826,52755],{"class":133},[109,62828,137],{"class":126},[109,62830,62831],{"class":111,"line":263},[109,62832,1361],{"class":126},[109,62834,62835],{"class":111,"line":269},[109,62836,158],{"emptyLinePlaceholder":157},[109,62838,62839,62842],{"class":111,"line":304},[109,62840,62841],{"class":211},"    .avatar",[109,62843,16745],{"class":126},[109,62845,62846,62848,62850,62852,62854],{"class":111,"line":331},[109,62847,55946],{"class":133},[109,62849,52612],{"class":126},[109,62851,2139],{"class":133},[109,62853,52667],{"class":122},[109,62855,137],{"class":126},[109,62857,62858,62860,62862,62864,62866],{"class":111,"line":336},[109,62859,55960],{"class":133},[109,62861,52612],{"class":126},[109,62863,2139],{"class":133},[109,62865,52667],{"class":122},[109,62867,137],{"class":126},[109,62869,62870,62872,62874,62876,62878],{"class":111,"line":364},[109,62871,56309],{"class":133},[109,62873,52612],{"class":126},[109,62875,2188],{"class":133},[109,62877,1865],{"class":122},[109,62879,137],{"class":126},[109,62881,62882,62885,62887,62890],{"class":111,"line":391},[109,62883,62884],{"class":133},"      overflow",[109,62886,52612],{"class":126},[109,62888,62889],{"class":133},"hidden",[109,62891,137],{"class":126},[109,62893,62894,62897,62899,62902,62904,62907,62909,62912,62914,62916,62919],{"class":111,"line":396},[109,62895,62896],{"class":133},"      background",[109,62898,52612],{"class":126},[109,62900,62901],{"class":133},"url",[109,62903,714],{"class":126},[109,62905,62906],{"class":6553},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[109,62908,14887],{"class":126},[109,62910,62911],{"class":133},"no-repeat",[109,62913,18317],{"class":133},[109,62915,26153],{"class":126},[109,62917,62918],{"class":133},"cover",[109,62920,137],{"class":126},[109,62922,62923,62926,62928,62930,62932],{"class":111,"line":402},[109,62924,62925],{"class":133},"      margin-right",[109,62927,52612],{"class":126},[109,62929,2232],{"class":133},[109,62931,52667],{"class":122},[109,62933,137],{"class":126},[109,62935,62936],{"class":111,"line":419},[109,62937,1361],{"class":126},[109,62939,62940],{"class":111,"line":435},[109,62941,158],{"emptyLinePlaceholder":157},[109,62943,62944,62946,62949],{"class":111,"line":440},[109,62945,62779],{"class":211},[109,62947,62948],{"class":52475}," textarea",[109,62950,16745],{"class":126},[109,62952,62953,62956,62958,62960],{"class":111,"line":467},[109,62954,62955],{"class":133},"      outline",[109,62957,52612],{"class":126},[109,62959,55912],{"class":133},[109,62961,137],{"class":126},[109,62963,62964,62967,62969,62972],{"class":111,"line":494},[109,62965,62966],{"class":133},"      border-color",[109,62968,52612],{"class":126},[109,62970,62971],{"class":133},"transparent",[109,62973,137],{"class":126},[109,62975,62976,62979,62981,62983],{"class":111,"line":499},[109,62977,62978],{"class":133},"      resize",[109,62980,52612],{"class":126},[109,62982,55912],{"class":133},[109,62984,137],{"class":126},[109,62986,62987,62989,62991,62994],{"class":111,"line":526},[109,62988,62896],{"class":133},[109,62990,52612],{"class":126},[109,62992,62993],{"class":133},"#f5f5f5",[109,62995,137],{"class":126},[109,62997,62998,63000,63002,63004,63006],{"class":111,"line":552},[109,62999,56309],{"class":133},[109,63001,52612],{"class":126},[109,63003,1831],{"class":133},[109,63005,52667],{"class":122},[109,63007,137],{"class":126},[109,63009,63010,63013,63015,63017],{"class":111,"line":557},[109,63011,63012],{"class":133},"      flex",[109,63014,52612],{"class":126},[109,63016,1755],{"class":133},[109,63018,137],{"class":126},[109,63020,63021,63023,63025,63027,63029],{"class":111,"line":584},[109,63022,55870],{"class":133},[109,63024,52612],{"class":126},[109,63026,1008],{"class":133},[109,63028,52667],{"class":122},[109,63030,137],{"class":126},[109,63032,63033,63036,63038,63040,63043,63045],{"class":111,"line":611},[109,63034,63035],{"class":133},"      transition",[109,63037,52612],{"class":126},[109,63039,29296],{"class":133},[109,63041,63042],{"class":133}," 0.5",[109,63044,2227],{"class":122},[109,63046,137],{"class":126},[109,63048,63049,63051,63053,63055,63057],{"class":111,"line":616},[109,63050,55960],{"class":133},[109,63052,52612],{"class":126},[109,63054,2481],{"class":133},[109,63056,52667],{"class":122},[109,63058,137],{"class":126},[109,63060,63061],{"class":111,"line":633},[109,63062,1361],{"class":126},[109,63064,63065],{"class":111,"line":649},[109,63066,158],{"emptyLinePlaceholder":157},[109,63068,63069,63071,63073,63076],{"class":111,"line":676},[109,63070,62779],{"class":211},[109,63072,62948],{"class":52475},[109,63074,63075],{"class":211},":focus",[109,63077,16745],{"class":126},[109,63079,63080,63082,63084,63087],{"class":111,"line":703},[109,63081,62966],{"class":133},[109,63083,52612],{"class":126},[109,63085,63086],{"class":133},"#e4e4e4",[109,63088,137],{"class":126},[109,63090,63091,63093,63095,63097],{"class":111,"line":708},[109,63092,62896],{"class":133},[109,63094,52612],{"class":126},[109,63096,62017],{"class":133},[109,63098,137],{"class":126},[109,63100,63101,63103,63105,63107,63109],{"class":111,"line":723},[109,63102,55960],{"class":133},[109,63104,52612],{"class":126},[109,63106,2188],{"class":133},[109,63108,52667],{"class":122},[109,63110,137],{"class":126},[109,63112,63113],{"class":111,"line":728},[109,63114,1361],{"class":126},[109,63116,63117],{"class":111,"line":739},[109,63118,158],{"emptyLinePlaceholder":157},[109,63120,63121,63123,63125],{"class":111,"line":9352},[109,63122,62779],{"class":211},[109,63124,58642],{"class":52475},[109,63126,16745],{"class":126},[109,63128,63129,63131,63133,63136],{"class":111,"line":9364},[109,63130,62896],{"class":133},[109,63132,52612],{"class":126},[109,63134,63135],{"class":133},"#00aeec",[109,63137,137],{"class":126},[109,63139,63140,63142,63144,63146],{"class":111,"line":9376},[109,63141,58591],{"class":133},[109,63143,52612],{"class":126},[109,63145,62017],{"class":133},[109,63147,137],{"class":126},[109,63149,63150,63153,63155,63157],{"class":111,"line":11034},[109,63151,63152],{"class":133},"      border",[109,63154,52612],{"class":126},[109,63156,55912],{"class":133},[109,63158,137],{"class":126},[109,63160,63161,63163,63165,63167,63169],{"class":111,"line":11059},[109,63162,56309],{"class":133},[109,63164,52612],{"class":126},[109,63166,1831],{"class":133},[109,63168,52667],{"class":122},[109,63170,137],{"class":126},[109,63172,63173,63176,63178,63180,63182],{"class":111,"line":11082},[109,63174,63175],{"class":133},"      margin-left",[109,63177,52612],{"class":126},[109,63179,1008],{"class":133},[109,63181,52667],{"class":122},[109,63183,137],{"class":126},[109,63185,63186,63188,63190,63192,63194],{"class":111,"line":11106},[109,63187,55946],{"class":133},[109,63189,52612],{"class":126},[109,63191,1892],{"class":133},[109,63193,52667],{"class":122},[109,63195,137],{"class":126},[109,63197,63198,63201,63203,63206],{"class":111,"line":11111},[109,63199,63200],{"class":133},"      cursor",[109,63202,52612],{"class":126},[109,63204,63205],{"class":133},"pointer",[109,63207,137],{"class":126},[109,63209,63210],{"class":111,"line":11116},[109,63211,1361],{"class":126},[109,63213,63214],{"class":111,"line":11121},[109,63215,158],{"emptyLinePlaceholder":157},[109,63217,63218,63220,63223],{"class":111,"line":11130},[109,63219,62779],{"class":211},[109,63221,63222],{"class":211}," .total",[109,63224,16745],{"class":126},[109,63226,63227,63229,63231,63233,63235],{"class":111,"line":11135},[109,63228,62925],{"class":133},[109,63230,52612],{"class":126},[109,63232,2144],{"class":133},[109,63234,52667],{"class":122},[109,63236,137],{"class":126},[109,63238,63239,63241,63243,63246],{"class":111,"line":11141},[109,63240,58591],{"class":133},[109,63242,52612],{"class":126},[109,63244,63245],{"class":133},"#999",[109,63247,137],{"class":126},[109,63249,63250,63253,63255,63257,63259],{"class":111,"line":11162},[109,63251,63252],{"class":133},"      margin-top",[109,63254,52612],{"class":126},[109,63256,1856],{"class":133},[109,63258,52667],{"class":122},[109,63260,137],{"class":126},[109,63262,63263,63266,63268,63270],{"class":111,"line":11168},[109,63264,63265],{"class":133},"      opacity",[109,63267,52612],{"class":126},[109,63269,1314],{"class":133},[109,63271,137],{"class":126},[109,63273,63274,63276,63278,63280,63282,63284],{"class":111,"line":11182},[109,63275,63035],{"class":133},[109,63277,52612],{"class":126},[109,63279,29296],{"class":133},[109,63281,63042],{"class":133},[109,63283,2227],{"class":122},[109,63285,137],{"class":126},[109,63287,63288],{"class":111,"line":11188},[109,63289,1361],{"class":126},[109,63291,63292],{"class":111,"line":11215},[109,63293,158],{"emptyLinePlaceholder":157},[109,63295,63296,63299],{"class":111,"line":11224},[109,63297,63298],{"class":211},"    .list",[109,63300,16745],{"class":126},[109,63302,63303,63305,63307,63309,63311],{"class":111,"line":11230},[109,63304,62786],{"class":133},[109,63306,52612],{"class":126},[109,63308,5329],{"class":133},[109,63310,52667],{"class":122},[109,63312,137],{"class":126},[109,63314,63315,63317,63319,63321,63323],{"class":111,"line":11238},[109,63316,62799],{"class":133},[109,63318,52612],{"class":126},[109,63320,62804],{"class":133},[109,63322,52667],{"class":122},[109,63324,137],{"class":126},[109,63326,63327,63329,63331,63333],{"class":111,"line":11243},[109,63328,56184],{"class":133},[109,63330,52612],{"class":126},[109,63332,52652],{"class":133},[109,63334,137],{"class":126},[109,63336,63337],{"class":111,"line":17777},[109,63338,1361],{"class":126},[109,63340,63341],{"class":111,"line":17783},[109,63342,158],{"emptyLinePlaceholder":157},[109,63344,63345,63347,63350],{"class":111,"line":17806},[109,63346,63298],{"class":211},[109,63348,63349],{"class":211}," .item",[109,63351,16745],{"class":126},[109,63353,63354,63356,63358,63360,63362],{"class":111,"line":17812},[109,63355,55946],{"class":133},[109,63357,52612],{"class":126},[109,63359,1351],{"class":133},[109,63361,1865],{"class":122},[109,63363,137],{"class":126},[109,63365,63366,63368,63370,63372],{"class":111,"line":17835},[109,63367,56184],{"class":133},[109,63369,52612],{"class":126},[109,63371,52652],{"class":133},[109,63373,137],{"class":126},[109,63375,63376],{"class":111,"line":17849},[109,63377,1361],{"class":126},[109,63379,63380],{"class":111,"line":17869},[109,63381,158],{"emptyLinePlaceholder":157},[109,63383,63384,63386,63388,63391],{"class":111,"line":17875},[109,63385,63298],{"class":211},[109,63387,63349],{"class":211},[109,63389,63390],{"class":211}," .info",[109,63392,16745],{"class":126},[109,63394,63395,63397,63399,63401],{"class":111,"line":17886},[109,63396,63012],{"class":133},[109,63398,52612],{"class":126},[109,63400,1755],{"class":133},[109,63402,137],{"class":126},[109,63404,63405,63408,63410,63412,63414,63417,63420],{"class":111,"line":17909},[109,63406,63407],{"class":133},"      border-bottom",[109,63409,52612],{"class":126},[109,63411,1755],{"class":133},[109,63413,52667],{"class":122},[109,63415,63416],{"class":133}," dashed",[109,63418,63419],{"class":133}," #e4e4e4",[109,63421,137],{"class":126},[109,63423,63424,63427,63429,63431,63433],{"class":111,"line":17931},[109,63425,63426],{"class":133},"      padding-bottom",[109,63428,52612],{"class":126},[109,63430,1008],{"class":133},[109,63432,52667],{"class":122},[109,63434,137],{"class":126},[109,63436,63437],{"class":111,"line":17936},[109,63438,1361],{"class":126},[109,63440,63441],{"class":111,"line":17942},[109,63442,158],{"emptyLinePlaceholder":157},[109,63444,63445,63447,63449,63451],{"class":111,"line":17956},[109,63446,63298],{"class":211},[109,63448,63349],{"class":211},[109,63450,8151],{"class":52475},[109,63452,16745],{"class":126},[109,63454,63455,63457,63459,63461],{"class":111,"line":17969},[109,63456,55881],{"class":133},[109,63458,52612],{"class":126},[109,63460,1314],{"class":133},[109,63462,137],{"class":126},[109,63464,63465],{"class":111,"line":17974},[109,63466,1361],{"class":126},[109,63468,63469],{"class":111,"line":17988},[109,63470,158],{"emptyLinePlaceholder":157},[109,63472,63473,63475,63477,63480],{"class":111,"line":17993},[109,63474,63298],{"class":211},[109,63476,63349],{"class":211},[109,63478,63479],{"class":211}," .name",[109,63481,16745],{"class":126},[109,63483,63484,63486,63488,63491],{"class":111,"line":17999},[109,63485,58591],{"class":133},[109,63487,52612],{"class":126},[109,63489,63490],{"class":133},"#FB7299",[109,63492,137],{"class":126},[109,63494,63495,63497,63499,63501,63503],{"class":111,"line":18004},[109,63496,56097],{"class":133},[109,63498,52612],{"class":126},[109,63500,2081],{"class":133},[109,63502,52667],{"class":122},[109,63504,137],{"class":126},[109,63506,63507,63510,63512,63515],{"class":111,"line":18018},[109,63508,63509],{"class":133},"      font-weight",[109,63511,52612],{"class":126},[109,63513,63514],{"class":133},"bold",[109,63516,137],{"class":126},[109,63518,63519],{"class":111,"line":18023},[109,63520,1361],{"class":126},[109,63522,63523],{"class":111,"line":18028},[109,63524,158],{"emptyLinePlaceholder":157},[109,63526,63527,63529,63531,63534],{"class":111,"line":18042},[109,63528,63298],{"class":211},[109,63530,63349],{"class":211},[109,63532,63533],{"class":211}," .text",[109,63535,16745],{"class":126},[109,63537,63538,63540,63542,63545],{"class":111,"line":18054},[109,63539,58591],{"class":133},[109,63541,52612],{"class":126},[109,63543,63544],{"class":133},"#333",[109,63546,137],{"class":126},[109,63548,63549,63551,63553,63555,63557,63559],{"class":111,"line":18059},[109,63550,55870],{"class":133},[109,63552,52612],{"class":126},[109,63554,1008],{"class":133},[109,63556,52667],{"class":122},[109,63558,734],{"class":133},[109,63560,137],{"class":126},[109,63562,63563],{"class":111,"line":18072},[109,63564,1361],{"class":126},[109,63566,63567],{"class":111,"line":18077},[109,63568,158],{"emptyLinePlaceholder":157},[109,63570,63571,63573,63575,63578],{"class":111,"line":18082},[109,63572,63298],{"class":211},[109,63574,63349],{"class":211},[109,63576,63577],{"class":211}," .time",[109,63579,16745],{"class":126},[109,63581,63582,63584,63586,63588],{"class":111,"line":18087},[109,63583,58591],{"class":133},[109,63585,52612],{"class":126},[109,63587,63245],{"class":133},[109,63589,137],{"class":126},[109,63591,63592,63594,63596,63598,63600],{"class":111,"line":18100},[109,63593,56097],{"class":133},[109,63595,52612],{"class":126},[109,63597,2030],{"class":133},[109,63599,52667],{"class":122},[109,63601,137],{"class":126},[109,63603,63604],{"class":111,"line":18105},[109,63605,1361],{"class":126},[109,63607,63608,63610,63612],{"class":111,"line":33808},[109,63609,53592],{"class":126},[109,63611,1467],{"class":52475},[109,63613,52482],{"class":126},[109,63615,63616,63618,63620],{"class":111,"line":33814},[109,63617,52960],{"class":126},[109,63619,52509],{"class":52475},[109,63621,52482],{"class":126},[109,63623,63624],{"class":111,"line":33820},[109,63625,158],{"emptyLinePlaceholder":157},[109,63627,63628,63630,63632],{"class":111,"line":33826},[109,63629,1320],{"class":126},[109,63631,52975],{"class":52475},[109,63633,52482],{"class":126},[109,63635,63636,63638,63640,63642,63644,63647],{"class":111,"line":33832},[109,63637,53319],{"class":126},[109,63639,52786],{"class":52475},[109,63641,54661],{"class":211},[109,63643,130],{"class":126},[109,63645,63646],{"class":278},"\"wrapper\"",[109,63648,52482],{"class":126},[109,63650,63651,63653,63655,63657,63659,63662,63664,63666],{"class":111,"line":33843},[109,63652,52516],{"class":126},[109,63654,1345],{"class":52475},[109,63656,54661],{"class":211},[109,63658,130],{"class":126},[109,63660,63661],{"class":278},"\"avatar\"",[109,63663,56489],{"class":126},[109,63665,1345],{"class":52475},[109,63667,52482],{"class":126},[109,63669,63670,63672,63674,63676,63678,63681,63683,63685,63688,63690,63692,63694,63697,63699,63702,63704,63706],{"class":111,"line":33849},[109,63671,52516],{"class":126},[109,63673,55463],{"class":52475},[109,63675,16132],{"class":211},[109,63677,130],{"class":126},[109,63679,63680],{"class":278},"\"tx\"",[109,63682,62195],{"class":211},[109,63684,130],{"class":126},[109,63686,63687],{"class":278},"\"发一条友善的评论\"",[109,63689,55486],{"class":211},[109,63691,130],{"class":126},[109,63693,5044],{"class":278},[109,63695,63696],{"class":211}," maxlength",[109,63698,130],{"class":126},[109,63700,63701],{"class":278},"\"200\"",[109,63703,56489],{"class":126},[109,63705,55463],{"class":52475},[109,63707,52482],{"class":126},[109,63709,63710,63712,63714,63717,63719],{"class":111,"line":33869},[109,63711,52516],{"class":126},[109,63713,55062],{"class":52475},[109,63715,63716],{"class":126},">发布\u003C\u002F",[109,63718,55062],{"class":52475},[109,63720,52482],{"class":126},[109,63722,63723,63725,63727],{"class":111,"line":33875},[109,63724,53592],{"class":126},[109,63726,52786],{"class":52475},[109,63728,52482],{"class":126},[109,63730,63731,63733,63735,63737,63739,63741],{"class":111,"line":33886},[109,63732,53319],{"class":126},[109,63734,52786],{"class":52475},[109,63736,54661],{"class":211},[109,63738,130],{"class":126},[109,63740,63646],{"class":278},[109,63742,52482],{"class":126},[109,63744,63745,63747,63749,63751,63753,63756,63759,63761],{"class":111,"line":33892},[109,63746,52516],{"class":126},[109,63748,109],{"class":52475},[109,63750,54661],{"class":211},[109,63752,130],{"class":126},[109,63754,63755],{"class":278},"\"total\"",[109,63757,63758],{"class":126},">0\u002F200字\u003C\u002F",[109,63760,109],{"class":52475},[109,63762,52482],{"class":126},[109,63764,63765,63767,63769],{"class":111,"line":33898},[109,63766,53592],{"class":126},[109,63768,52786],{"class":52475},[109,63770,52482],{"class":126},[109,63772,63773,63775,63777,63779,63781,63784],{"class":111,"line":33904},[109,63774,53319],{"class":126},[109,63776,52786],{"class":52475},[109,63778,54661],{"class":211},[109,63780,130],{"class":126},[109,63782,63783],{"class":278},"\"list\"",[109,63785,52482],{"class":126},[109,63787,63788,63790,63792,63794,63796,63799,63802,63804,63807],{"class":111,"line":33910},[109,63789,52516],{"class":126},[109,63791,52786],{"class":52475},[109,63793,54661],{"class":211},[109,63795,130],{"class":126},[109,63797,63798],{"class":278},"\"item\"",[109,63800,63801],{"class":211}," style",[109,63803,130],{"class":126},[109,63805,63806],{"class":278},"\"display: none;\"",[109,63808,52482],{"class":126},[109,63810,63811,63813,63815,63817,63819,63821,63823,63825],{"class":111,"line":33916},[109,63812,56409],{"class":126},[109,63814,1345],{"class":52475},[109,63816,54661],{"class":211},[109,63818,130],{"class":126},[109,63820,63661],{"class":278},[109,63822,56489],{"class":126},[109,63824,1345],{"class":52475},[109,63826,52482],{"class":126},[109,63828,63829,63831,63833,63835,63837,63840],{"class":111,"line":33922},[109,63830,56409],{"class":126},[109,63832,52786],{"class":52475},[109,63834,54661],{"class":211},[109,63836,130],{"class":126},[109,63838,63839],{"class":278},"\"info\"",[109,63841,52482],{"class":126},[109,63843,63844,63846,63848,63850,63852,63855,63858,63860],{"class":111,"line":33928},[109,63845,56477],{"class":126},[109,63847,19],{"class":52475},[109,63849,54661],{"class":211},[109,63851,130],{"class":126},[109,63853,63854],{"class":278},"\"name\"",[109,63856,63857],{"class":126},">清风徐来\u003C\u002F",[109,63859,19],{"class":52475},[109,63861,52482],{"class":126},[109,63863,63864,63866,63868,63870,63872,63875,63878,63880],{"class":111,"line":33948},[109,63865,56477],{"class":126},[109,63867,19],{"class":52475},[109,63869,54661],{"class":211},[109,63871,130],{"class":126},[109,63873,63874],{"class":278},"\"text\"",[109,63876,63877],{"class":126},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[109,63879,19],{"class":52475},[109,63881,52482],{"class":126},[109,63883,63884,63886,63888,63890,63892,63895,63898,63900],{"class":111,"line":33954},[109,63885,56477],{"class":126},[109,63887,19],{"class":52475},[109,63889,54661],{"class":211},[109,63891,130],{"class":126},[109,63893,63894],{"class":278},"\"time\"",[109,63896,63897],{"class":126},">2022-10-10 20:29:21\u003C\u002F",[109,63899,19],{"class":52475},[109,63901,52482],{"class":126},[109,63903,63904,63906,63908],{"class":111,"line":33970},[109,63905,56582],{"class":126},[109,63907,52786],{"class":52475},[109,63909,52482],{"class":126},[109,63911,63912,63914,63916],{"class":111,"line":33976},[109,63913,52951],{"class":126},[109,63915,52786],{"class":52475},[109,63917,52482],{"class":126},[109,63919,63920,63922,63924],{"class":111,"line":33990},[109,63921,53592],{"class":126},[109,63923,52786],{"class":52475},[109,63925,52482],{"class":126},[109,63927,63928,63930,63932],{"class":111,"line":33996},[109,63929,53319],{"class":126},[109,63931,52988],{"class":52475},[109,63933,52482],{"class":126},[109,63935,63936,63938,63941,63943,63945,63947,63949,63952],{"class":111,"line":34011},[109,63937,619],{"class":122},[109,63939,63940],{"class":133}," tx",[109,63942,14737],{"class":122},[109,63944,55571],{"class":126},[109,63946,55574],{"class":211},[109,63948,714],{"class":126},[109,63950,63951],{"class":278},"'#tx'",[109,63953,1330],{"class":126},[109,63955,63956,63958,63961,63963,63965,63967,63969,63972],{"class":111,"line":34017},[109,63957,619],{"class":122},[109,63959,63960],{"class":133}," total",[109,63962,14737],{"class":122},[109,63964,55571],{"class":126},[109,63966,55574],{"class":211},[109,63968,714],{"class":126},[109,63970,63971],{"class":278},"'.total'",[109,63973,1330],{"class":126},[109,63975,63976],{"class":111,"line":34026},[109,63977,63978],{"class":115},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[109,63980,63981,63984,63986,63988,63990,63992,63994],{"class":111,"line":34032},[109,63982,63983],{"class":126},"    tx.",[109,63985,58988],{"class":211},[109,63987,714],{"class":126},[109,63989,62502],{"class":278},[109,63991,13608],{"class":126},[109,63993,55624],{"class":122},[109,63995,55627],{"class":126},[109,63997,63998,64001,64003],{"class":111,"line":34041},[109,63999,64000],{"class":126},"      total.style.opacity ",[109,64002,130],{"class":122},[109,64004,56874],{"class":133},[109,64006,64007],{"class":111,"line":34047},[109,64008,34636],{"class":126},[109,64010,64011],{"class":111,"line":34053},[109,64012,64013],{"class":115},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[109,64015,64016,64018,64020,64022,64024,64026,64028],{"class":111,"line":34062},[109,64017,63983],{"class":126},[109,64019,58988],{"class":211},[109,64021,714],{"class":126},[109,64023,62563],{"class":278},[109,64025,13608],{"class":126},[109,64027,55624],{"class":122},[109,64029,55627],{"class":126},[109,64031,64032,64034,64036],{"class":111,"line":34068},[109,64033,64000],{"class":126},[109,64035,130],{"class":122},[109,64037,48508],{"class":133},[109,64039,64040],{"class":111,"line":34079},[109,64041,34636],{"class":126},[109,64043,64044],{"class":111,"line":34085},[109,64045,64046],{"class":115},"    \u002F\u002F 3. 检测用户输入\n",[109,64048,64049,64051,64053,64055,64058,64060,64062],{"class":111,"line":34104},[109,64050,63983],{"class":126},[109,64052,58988],{"class":211},[109,64054,714],{"class":126},[109,64056,64057],{"class":278},"'input'",[109,64059,13608],{"class":126},[109,64061,55624],{"class":122},[109,64063,55627],{"class":126},[109,64065,64066],{"class":111,"line":34110},[109,64067,64068],{"class":115},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[109,64070,64071,64074,64076,64079,64082,64084,64087,64089,64091],{"class":111,"line":34121},[109,64072,64073],{"class":126},"      total.innerHTML ",[109,64075,130],{"class":122},[109,64077,64078],{"class":278}," `${",[109,64080,64081],{"class":126},"tx",[109,64083,2090],{"class":278},[109,64085,64086],{"class":126},"value",[109,64088,2090],{"class":278},[109,64090,53143],{"class":133},[109,64092,64093],{"class":278},"}\u002F200字`\n",[109,64095,64096],{"class":111,"line":34127},[109,64097,34636],{"class":126},[109,64099,64100],{"class":111,"line":34147},[109,64101,158],{"emptyLinePlaceholder":157},[109,64103,64104],{"class":111,"line":34163},[109,64105,64106],{"class":115},"    \u002F\u002F const str = 'andy'\n",[109,64108,64109],{"class":111,"line":34169},[109,64110,64111],{"class":115},"    \u002F\u002F console.log(str.length)\n",[109,64113,64114,64116,64118],{"class":111,"line":34183},[109,64115,53592],{"class":126},[109,64117,52988],{"class":52475},[109,64119,52482],{"class":126},[109,64121,64122,64124,64126],{"class":111,"line":34189},[109,64123,52960],{"class":126},[109,64125,52975],{"class":52475},[109,64127,52482],{"class":126},[109,64129,64130],{"class":111,"line":34195},[109,64131,158],{"emptyLinePlaceholder":157},[109,64133,64134,64136,64138],{"class":111,"line":34206},[109,64135,52960],{"class":126},[109,64137,51810],{"class":52475},[109,64139,52482],{"class":126},[23171,64141,64143],{"id":64142},"_3254-change事件","3.2.5.4 change事件",[19,64145,64146],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64148,64149],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64151,64152],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[99,64154,64156],{"className":51808,"code":64155,"language":51810,"meta":104,"style":104},"\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",[106,64157,64158,64168,64182,64186,64194,64208,64228,64240,64248,64252,64260,64274,64282,64300,64318,64330,64334,64342,64350,64354],{"__ignoreMap":104},[109,64159,64160,64162,64164,64166],{"class":111,"line":112},[109,64161,52472],{"class":126},[109,64163,52476],{"class":52475},[109,64165,52479],{"class":211},[109,64167,52482],{"class":126},[109,64169,64170,64172,64174,64176,64178,64180],{"class":111,"line":119},[109,64171,1320],{"class":126},[109,64173,51810],{"class":52475},[109,64175,52491],{"class":211},[109,64177,130],{"class":126},[109,64179,52496],{"class":278},[109,64181,52482],{"class":126},[109,64183,64184],{"class":111,"line":140},[109,64185,158],{"emptyLinePlaceholder":157},[109,64187,64188,64190,64192],{"class":111,"line":154},[109,64189,1320],{"class":126},[109,64191,52509],{"class":52475},[109,64193,52482],{"class":126},[109,64195,64196,64198,64200,64202,64204,64206],{"class":111,"line":161},[109,64197,53319],{"class":126},[109,64199,52519],{"class":52475},[109,64201,52522],{"class":211},[109,64203,130],{"class":126},[109,64205,52527],{"class":278},[109,64207,52482],{"class":126},[109,64209,64210,64212,64214,64216,64218,64220,64222,64224,64226],{"class":111,"line":167},[109,64211,53319],{"class":126},[109,64213,52519],{"class":52475},[109,64215,16093],{"class":211},[109,64217,130],{"class":126},[109,64219,52566],{"class":278},[109,64221,52546],{"class":211},[109,64223,130],{"class":126},[109,64225,52573],{"class":278},[109,64227,52482],{"class":126},[109,64229,64230,64232,64234,64236,64238],{"class":111,"line":185},[109,64231,53319],{"class":126},[109,64233,52582],{"class":52475},[109,64235,52585],{"class":126},[109,64237,52582],{"class":52475},[109,64239,52482],{"class":126},[109,64241,64242,64244,64246],{"class":111,"line":201},[109,64243,52960],{"class":126},[109,64245,52509],{"class":52475},[109,64247,52482],{"class":126},[109,64249,64250],{"class":111,"line":206},[109,64251,158],{"emptyLinePlaceholder":157},[109,64253,64254,64256,64258],{"class":111,"line":218},[109,64255,1320],{"class":126},[109,64257,52975],{"class":52475},[109,64259,52482],{"class":126},[109,64261,64262,64264,64266,64268,64270,64272],{"class":111,"line":223},[109,64263,53319],{"class":126},[109,64265,54996],{"class":52475},[109,64267,54999],{"class":211},[109,64269,130],{"class":126},[109,64271,63874],{"class":278},[109,64273,52482],{"class":126},[109,64275,64276,64278,64280],{"class":111,"line":229},[109,64277,53319],{"class":126},[109,64279,52988],{"class":52475},[109,64281,52482],{"class":126},[109,64283,64284,64286,64288,64290,64292,64294,64296,64298],{"class":111,"line":244},[109,64285,619],{"class":122},[109,64287,61780],{"class":133},[109,64289,14737],{"class":122},[109,64291,55571],{"class":126},[109,64293,55574],{"class":211},[109,64295,714],{"class":126},[109,64297,64057],{"class":278},[109,64299,1330],{"class":126},[109,64301,64302,64305,64307,64309,64312,64314,64316],{"class":111,"line":258},[109,64303,64304],{"class":126},"    input.",[109,64306,58988],{"class":211},[109,64308,714],{"class":126},[109,64310,64311],{"class":278},"'change'",[109,64313,13608],{"class":126},[109,64315,55624],{"class":122},[109,64317,55627],{"class":126},[109,64319,64320,64322,64324,64326,64328],{"class":111,"line":263},[109,64321,59419],{"class":126},[109,64323,59422],{"class":211},[109,64325,714],{"class":126},[109,64327,2125],{"class":133},[109,64329,1330],{"class":126},[109,64331,64332],{"class":111,"line":269},[109,64333,34636],{"class":126},[109,64335,64336,64338,64340],{"class":111,"line":304},[109,64337,53592],{"class":126},[109,64339,52988],{"class":52475},[109,64341,52482],{"class":126},[109,64343,64344,64346,64348],{"class":111,"line":331},[109,64345,52960],{"class":126},[109,64347,52975],{"class":52475},[109,64349,52482],{"class":126},[109,64351,64352],{"class":111,"line":336},[109,64353,158],{"emptyLinePlaceholder":157},[109,64355,64356,64358,64360],{"class":111,"line":364},[109,64357,52960],{"class":126},[109,64359,51810],{"class":52475},[109,64361,52482],{"class":126},[19,64363,64364],{},"总结：内容发生改变才回去触发",[51,64366,64368],{"id":64367},"_326-事件对象","3.2.6 事件对象",[23171,64370,64372],{"id":64371},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64374,64375],{},[938,64376],{"alt":104,"src":64377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64379,64380],{},[938,64381],{"alt":104,"src":64382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64384,64385],{},"点击一次，就输出了事件对象，它是个对象",[19,64387,64388],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64390,64391],{},[938,64392],{"alt":104,"src":64393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23171,64395,64397],{"id":64396},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64399,64400],{},[938,64401],{"alt":104,"src":64402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64404,64405],{},"实现按特殊字符才是实现打印输出效果：",[99,64407,64409],{"className":54242,"code":64408,"language":54244,"meta":104,"style":104},"\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",[106,64410,64411,64419,64424,64438,64446,64451,64456,64461,64466,64471,64476,64481,64486,64491,64495,64499,64507],{"__ignoreMap":104},[109,64412,64413,64415,64417],{"class":111,"line":112},[109,64414,1320],{"class":126},[109,64416,52975],{"class":52475},[109,64418,52482],{"class":126},[109,64420,64421],{"class":111,"line":119},[109,64422,64423],{"class":115},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[109,64425,64426,64428,64430,64432,64434,64436],{"class":111,"line":140},[109,64427,53319],{"class":126},[109,64429,54996],{"class":52475},[109,64431,54999],{"class":211},[109,64433,130],{"class":126},[109,64435,63874],{"class":278},[109,64437,52482],{"class":126},[109,64439,64440,64442,64444],{"class":111,"line":154},[109,64441,53319],{"class":126},[109,64443,52988],{"class":52475},[109,64445,52482],{"class":126},[109,64447,64448],{"class":111,"line":161},[109,64449,64450],{"class":126},"    \u002F\u002F const btn = document.querySelector('button')\n",[109,64452,64453],{"class":111,"line":167},[109,64454,64455],{"class":126},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[109,64457,64458],{"class":111,"line":185},[109,64459,64460],{"class":126},"    \u002F\u002F   console.log(e);\n",[109,64462,64463],{"class":111,"line":201},[109,64464,64465],{"class":126},"    \u002F\u002F })\n",[109,64467,64468],{"class":111,"line":206},[109,64469,64470],{"class":126},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[109,64472,64473],{"class":111,"line":218},[109,64474,64475],{"class":126},"    const input = document.querySelector('input')\n",[109,64477,64478],{"class":111,"line":223},[109,64479,64480],{"class":126},"    input.addEventListener('keyup', function (e) {\n",[109,64482,64483],{"class":111,"line":229},[109,64484,64485],{"class":126},"      if (e.key === 'Enter') {\n",[109,64487,64488],{"class":111,"line":244},[109,64489,64490],{"class":126},"        console.log('我按下了回车键')\n",[109,64492,64493],{"class":111,"line":258},[109,64494,53573],{"class":126},[109,64496,64497],{"class":111,"line":263},[109,64498,34636],{"class":126},[109,64500,64501,64503,64505],{"class":111,"line":269},[109,64502,53592],{"class":126},[109,64504,52988],{"class":52475},[109,64506,52482],{"class":126},[109,64508,64509,64511,64513],{"class":111,"line":304},[109,64510,52960],{"class":126},[109,64512,52975],{"class":52475},[109,64514,52482],{"class":126},[23171,64516,64518],{"id":64517},"_3263-trim方法","3.2.6.3 trim方法",[19,64520,64521],{},[938,64522],{"alt":104,"src":64523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64525,64526],{},[938,64527],{"alt":104,"src":64528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64530,64531],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64533,64534],{},"str.trim()",[51,64536,64538],{"id":64537},"_327-环境对象","3.2.7 环境对象",[19,64540,64541],{},[938,64542],{"alt":104,"src":64543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64545,64546],{},[938,64547],{"alt":104,"src":64548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64550,64551],{},[938,64552],{"alt":104,"src":64553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64555,64556],{},"实际函数调用是window.fn()",[19,64558,64559],{},"普通函数里面this指向的是window",[27,64561,64562,64565,64568],{},[30,64563,64564],{},"在普通函数下，this指向的是window",[30,64566,64567],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[30,64569,64570],{},"箭头函数没有this",[19,64572,64573],{},"粗略记法就是：谁调用，this就指向谁",[19,64575,64576],{},[938,64577],{"alt":104,"src":64578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64580,64581],{},[938,64582],{"alt":104,"src":64583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64585,64586],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64588,64589],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[99,64591,64593],{"className":54242,"code":64592,"language":54244,"meta":104,"style":104},"\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",[106,64594,64595,64603,64615,64623,64628,64633,64638,64643,64647,64655],{"__ignoreMap":104},[109,64596,64597,64599,64601],{"class":111,"line":112},[109,64598,1320],{"class":126},[109,64600,52975],{"class":52475},[109,64602,52482],{"class":126},[109,64604,64605,64607,64609,64611,64613],{"class":111,"line":119},[109,64606,53319],{"class":126},[109,64608,55062],{"class":52475},[109,64610,55068],{"class":126},[109,64612,55062],{"class":52475},[109,64614,52482],{"class":126},[109,64616,64617,64619,64621],{"class":111,"line":140},[109,64618,53319],{"class":126},[109,64620,52988],{"class":52475},[109,64622,52482],{"class":126},[109,64624,64625],{"class":111,"line":154},[109,64626,64627],{"class":126},"    const button = document.querySelector('button')\n",[109,64629,64630],{"class":111,"line":161},[109,64631,64632],{"class":126},"    button.addEventListener('click', function () {\n",[109,64634,64635],{"class":111,"line":167},[109,64636,64637],{"class":126},"      \u002F\u002F console.log(this);\n",[109,64639,64640],{"class":111,"line":185},[109,64641,64642],{"class":126},"      this.style.color = 'pink'\n",[109,64644,64645],{"class":111,"line":201},[109,64646,34636],{"class":126},[109,64648,64649,64651,64653],{"class":111,"line":206},[109,64650,53592],{"class":126},[109,64652,52988],{"class":52475},[109,64654,52482],{"class":126},[109,64656,64657,64659,64661],{"class":111,"line":218},[109,64658,52960],{"class":126},[109,64660,52975],{"class":52475},[109,64662,52482],{"class":126},[51,64664,64666],{"id":64665},"_328-回调函数","3.2.8 回调函数",[19,64668,64669],{},[938,64670],{"alt":104,"src":64671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64673,64674],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64676,745],{},[27,64678,64679,64682,64685],{},[30,64680,64681],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[30,64683,64684],{},"回调函数本质还是函数，只不过把它当成参数使用",[30,64686,64687],{},"使用匿名函数做为回调函数比较常见",[51,64689,64691],{"id":64690},"_329-tab栏切换","3.2.9 tab栏切换",[19,64693,64694],{},[938,64695],{"alt":104,"src":64696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[99,64698,64700],{"className":51808,"code":64699,"language":51810,"meta":104,"style":104},"\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",[106,64701,64702,64712,64726,64730,64738,64752,64772,64792,64805,64813,64819,64829,64839,64843,64847,64854,64867,64880,64892,64908,64912,64916,64923,64935,64947,64959,64969,64979,64983,64987,64996,65008,65019,65031,65035,65039,65047,65057,65067,65077,65081,65085,65095,65109,65121,65125,65129,65141,65152,65169,65179,65183,65187,65202,65213,65223,65227,65231,65238,65253,65257,65261,65269,65279,65283,65287,65296,65306,65310,65318,65326,65330,65338,65353,65368,65381,65389,65423,65450,65477,65504,65531,65539,65547,65562,65599,65634,65669,65704,65739,65747,65755,65763,65768,65773,65793,65798,65827,65832,65837,65855,65860,65865,65870,65892,65897,65913,65917,65922,65927,65948,65953,65982,65986,65991,65995,66003,66011,66015],{"__ignoreMap":104},[109,64703,64704,64706,64708,64710],{"class":111,"line":112},[109,64705,52472],{"class":126},[109,64707,52476],{"class":52475},[109,64709,52479],{"class":211},[109,64711,52482],{"class":126},[109,64713,64714,64716,64718,64720,64722,64724],{"class":111,"line":119},[109,64715,1320],{"class":126},[109,64717,51810],{"class":52475},[109,64719,52491],{"class":211},[109,64721,130],{"class":126},[109,64723,52496],{"class":278},[109,64725,52482],{"class":126},[109,64727,64728],{"class":111,"line":140},[109,64729,158],{"emptyLinePlaceholder":157},[109,64731,64732,64734,64736],{"class":111,"line":154},[109,64733,1320],{"class":126},[109,64735,52509],{"class":52475},[109,64737,52482],{"class":126},[109,64739,64740,64742,64744,64746,64748,64750],{"class":111,"line":161},[109,64741,53319],{"class":126},[109,64743,52519],{"class":52475},[109,64745,52522],{"class":211},[109,64747,130],{"class":126},[109,64749,52527],{"class":278},[109,64751,60302],{"class":126},[109,64753,64754,64756,64758,64760,64762,64764,64766,64768,64770],{"class":111,"line":167},[109,64755,53319],{"class":126},[109,64757,52519],{"class":52475},[109,64759,52538],{"class":211},[109,64761,130],{"class":126},[109,64763,52543],{"class":278},[109,64765,52546],{"class":211},[109,64767,130],{"class":126},[109,64769,52551],{"class":278},[109,64771,60302],{"class":126},[109,64773,64774,64776,64778,64780,64782,64784,64786,64788,64790],{"class":111,"line":185},[109,64775,53319],{"class":126},[109,64777,52519],{"class":52475},[109,64779,16093],{"class":211},[109,64781,130],{"class":126},[109,64783,52566],{"class":278},[109,64785,52546],{"class":211},[109,64787,130],{"class":126},[109,64789,52573],{"class":278},[109,64791,60302],{"class":126},[109,64793,64794,64796,64798,64801,64803],{"class":111,"line":201},[109,64795,53319],{"class":126},[109,64797,52582],{"class":52475},[109,64799,64800],{"class":126},">tab栏切换\u003C\u002F",[109,64802,52582],{"class":52475},[109,64804,52482],{"class":126},[109,64806,64807,64809,64811],{"class":111,"line":206},[109,64808,53319],{"class":126},[109,64810,1467],{"class":52475},[109,64812,52482],{"class":126},[109,64814,64815,64817],{"class":111,"line":218},[109,64816,7733],{"class":52475},[109,64818,16745],{"class":126},[109,64820,64821,64823,64825,64827],{"class":111,"line":223},[109,64822,55881],{"class":133},[109,64824,52612],{"class":126},[109,64826,1314],{"class":133},[109,64828,137],{"class":126},[109,64830,64831,64833,64835,64837],{"class":111,"line":229},[109,64832,55870],{"class":133},[109,64834,52612],{"class":126},[109,64836,1314],{"class":133},[109,64838,137],{"class":126},[109,64840,64841],{"class":111,"line":244},[109,64842,1361],{"class":126},[109,64844,64845],{"class":111,"line":258},[109,64846,158],{"emptyLinePlaceholder":157},[109,64848,64849,64852],{"class":111,"line":263},[109,64850,64851],{"class":211},"    .tab",[109,64853,16745],{"class":126},[109,64855,64856,64858,64860,64863,64865],{"class":111,"line":269},[109,64857,55946],{"class":133},[109,64859,52612],{"class":126},[109,64861,64862],{"class":133},"590",[109,64864,52667],{"class":122},[109,64866,137],{"class":126},[109,64868,64869,64871,64873,64876,64878],{"class":111,"line":304},[109,64870,55960],{"class":133},[109,64872,52612],{"class":126},[109,64874,64875],{"class":133},"340",[109,64877,52667],{"class":122},[109,64879,137],{"class":126},[109,64881,64882,64884,64886,64888,64890],{"class":111,"line":331},[109,64883,55881],{"class":133},[109,64885,52612],{"class":126},[109,64887,2232],{"class":133},[109,64889,52667],{"class":122},[109,64891,137],{"class":126},[109,64893,64894,64896,64898,64900,64902,64904,64906],{"class":111,"line":336},[109,64895,63152],{"class":133},[109,64897,52612],{"class":126},[109,64899,1755],{"class":133},[109,64901,52667],{"class":122},[109,64903,52696],{"class":133},[109,64905,63419],{"class":133},[109,64907,137],{"class":126},[109,64909,64910],{"class":111,"line":364},[109,64911,1361],{"class":126},[109,64913,64914],{"class":111,"line":391},[109,64915,158],{"emptyLinePlaceholder":157},[109,64917,64918,64921],{"class":111,"line":396},[109,64919,64920],{"class":211},"    .tab-nav",[109,64922,16745],{"class":126},[109,64924,64925,64927,64929,64931,64933],{"class":111,"line":402},[109,64926,55946],{"class":133},[109,64928,52612],{"class":126},[109,64930,1351],{"class":133},[109,64932,1865],{"class":122},[109,64934,137],{"class":126},[109,64936,64937,64939,64941,64943,64945],{"class":111,"line":419},[109,64938,55960],{"class":133},[109,64940,52612],{"class":126},[109,64942,2438],{"class":133},[109,64944,52667],{"class":122},[109,64946,137],{"class":126},[109,64948,64949,64951,64953,64955,64957],{"class":111,"line":435},[109,64950,58534],{"class":133},[109,64952,52612],{"class":126},[109,64954,2438],{"class":133},[109,64956,52667],{"class":122},[109,64958,137],{"class":126},[109,64960,64961,64963,64965,64967],{"class":111,"line":440},[109,64962,56184],{"class":133},[109,64964,52612],{"class":126},[109,64966,52652],{"class":133},[109,64968,137],{"class":126},[109,64970,64971,64973,64975,64977],{"class":111,"line":467},[109,64972,56195],{"class":133},[109,64974,52612],{"class":126},[109,64976,52843],{"class":133},[109,64978,137],{"class":126},[109,64980,64981],{"class":111,"line":494},[109,64982,1361],{"class":126},[109,64984,64985],{"class":111,"line":499},[109,64986,158],{"emptyLinePlaceholder":157},[109,64988,64989,64991,64994],{"class":111,"line":526},[109,64990,64920],{"class":211},[109,64992,64993],{"class":52475}," h3",[109,64995,16745],{"class":126},[109,64997,64998,65000,65002,65004,65006],{"class":111,"line":552},[109,64999,56097],{"class":133},[109,65001,52612],{"class":126},[109,65003,2332],{"class":133},[109,65005,52667],{"class":122},[109,65007,137],{"class":126},[109,65009,65010,65012,65014,65017],{"class":111,"line":557},[109,65011,63509],{"class":133},[109,65013,52612],{"class":126},[109,65015,65016],{"class":133},"normal",[109,65018,137],{"class":126},[109,65020,65021,65023,65025,65027,65029],{"class":111,"line":584},[109,65022,63175],{"class":133},[109,65024,52612],{"class":126},[109,65026,2232],{"class":133},[109,65028,52667],{"class":122},[109,65030,137],{"class":126},[109,65032,65033],{"class":111,"line":611},[109,65034,1361],{"class":126},[109,65036,65037],{"class":111,"line":616},[109,65038,158],{"emptyLinePlaceholder":157},[109,65040,65041,65043,65045],{"class":111,"line":633},[109,65042,64920],{"class":211},[109,65044,62467],{"class":52475},[109,65046,16745],{"class":126},[109,65048,65049,65051,65053,65055],{"class":111,"line":649},[109,65050,55907],{"class":133},[109,65052,52612],{"class":126},[109,65054,55912],{"class":133},[109,65056,137],{"class":126},[109,65058,65059,65061,65063,65065],{"class":111,"line":676},[109,65060,56184],{"class":133},[109,65062,52612],{"class":126},[109,65064,52652],{"class":133},[109,65066,137],{"class":126},[109,65068,65069,65071,65073,65075],{"class":111,"line":703},[109,65070,56195],{"class":133},[109,65072,52612],{"class":126},[109,65074,52755],{"class":133},[109,65076,137],{"class":126},[109,65078,65079],{"class":111,"line":708},[109,65080,1361],{"class":126},[109,65082,65083],{"class":111,"line":723},[109,65084,158],{"emptyLinePlaceholder":157},[109,65086,65087,65089,65091,65093],{"class":111,"line":728},[109,65088,64920],{"class":211},[109,65090,62467],{"class":52475},[109,65092,56250],{"class":52475},[109,65094,16745],{"class":126},[109,65096,65097,65099,65101,65103,65105,65107],{"class":111,"line":739},[109,65098,55881],{"class":133},[109,65100,52612],{"class":126},[109,65102,1314],{"class":133},[109,65104,10268],{"class":133},[109,65106,52667],{"class":122},[109,65108,137],{"class":126},[109,65110,65111,65113,65115,65117,65119],{"class":111,"line":9352},[109,65112,56097],{"class":133},[109,65114,52612],{"class":126},[109,65116,2081],{"class":133},[109,65118,52667],{"class":122},[109,65120,137],{"class":126},[109,65122,65123],{"class":111,"line":9364},[109,65124,1361],{"class":126},[109,65126,65127],{"class":111,"line":9376},[109,65128,158],{"emptyLinePlaceholder":157},[109,65130,65131,65133,65135,65137,65139],{"class":111,"line":11034},[109,65132,64920],{"class":211},[109,65134,62467],{"class":52475},[109,65136,56250],{"class":52475},[109,65138,2791],{"class":52475},[109,65140,16745],{"class":126},[109,65142,65143,65146,65148,65150],{"class":111,"line":11059},[109,65144,65145],{"class":133},"      text-decoration",[109,65147,52612],{"class":126},[109,65149,55912],{"class":133},[109,65151,137],{"class":126},[109,65153,65154,65156,65158,65160,65162,65164,65167],{"class":111,"line":11082},[109,65155,63407],{"class":133},[109,65157,52612],{"class":126},[109,65159,1618],{"class":133},[109,65161,52667],{"class":122},[109,65163,52696],{"class":133},[109,65165,65166],{"class":133}," transparent",[109,65168,137],{"class":126},[109,65170,65171,65173,65175,65177],{"class":111,"line":11106},[109,65172,58591],{"class":133},[109,65174,52612],{"class":126},[109,65176,63544],{"class":133},[109,65178,137],{"class":126},[109,65180,65181],{"class":111,"line":11111},[109,65182,1361],{"class":126},[109,65184,65185],{"class":111,"line":11116},[109,65186,158],{"emptyLinePlaceholder":157},[109,65188,65189,65191,65193,65195,65197,65200],{"class":111,"line":11121},[109,65190,64920],{"class":211},[109,65192,62467],{"class":52475},[109,65194,56250],{"class":52475},[109,65196,2791],{"class":52475},[109,65198,65199],{"class":211},".active",[109,65201,16745],{"class":126},[109,65203,65204,65206,65208,65211],{"class":111,"line":11130},[109,65205,62966],{"class":133},[109,65207,52612],{"class":126},[109,65209,65210],{"class":133},"#e1251b",[109,65212,137],{"class":126},[109,65214,65215,65217,65219,65221],{"class":111,"line":11135},[109,65216,58591],{"class":133},[109,65218,52612],{"class":126},[109,65220,65210],{"class":133},[109,65222,137],{"class":126},[109,65224,65225],{"class":111,"line":11141},[109,65226,1361],{"class":126},[109,65228,65229],{"class":111,"line":11162},[109,65230,158],{"emptyLinePlaceholder":157},[109,65232,65233,65236],{"class":111,"line":11168},[109,65234,65235],{"class":211},"    .tab-content",[109,65237,16745],{"class":126},[109,65239,65240,65242,65244,65246,65249,65251],{"class":111,"line":11182},[109,65241,55870],{"class":133},[109,65243,52612],{"class":126},[109,65245,1314],{"class":133},[109,65247,65248],{"class":133}," 16",[109,65250,52667],{"class":122},[109,65252,137],{"class":126},[109,65254,65255],{"class":111,"line":11188},[109,65256,1361],{"class":126},[109,65258,65259],{"class":111,"line":11215},[109,65260,158],{"emptyLinePlaceholder":157},[109,65262,65263,65265,65267],{"class":111,"line":11224},[109,65264,65235],{"class":211},[109,65266,63349],{"class":211},[109,65268,16745],{"class":126},[109,65270,65271,65273,65275,65277],{"class":111,"line":11230},[109,65272,56184],{"class":133},[109,65274,52612],{"class":126},[109,65276,55912],{"class":133},[109,65278,137],{"class":126},[109,65280,65281],{"class":111,"line":11238},[109,65282,1361],{"class":126},[109,65284,65285],{"class":111,"line":11243},[109,65286,158],{"emptyLinePlaceholder":157},[109,65288,65289,65291,65294],{"class":111,"line":17777},[109,65290,65235],{"class":211},[109,65292,65293],{"class":211}," .item.active",[109,65295,16745],{"class":126},[109,65297,65298,65300,65302,65304],{"class":111,"line":17783},[109,65299,56184],{"class":133},[109,65301,52612],{"class":126},[109,65303,62044],{"class":133},[109,65305,137],{"class":126},[109,65307,65308],{"class":111,"line":17806},[109,65309,1361],{"class":126},[109,65311,65312,65314,65316],{"class":111,"line":17812},[109,65313,53592],{"class":126},[109,65315,1467],{"class":52475},[109,65317,52482],{"class":126},[109,65319,65320,65322,65324],{"class":111,"line":17835},[109,65321,52960],{"class":126},[109,65323,52509],{"class":52475},[109,65325,52482],{"class":126},[109,65327,65328],{"class":111,"line":17849},[109,65329,158],{"emptyLinePlaceholder":157},[109,65331,65332,65334,65336],{"class":111,"line":17869},[109,65333,1320],{"class":126},[109,65335,52975],{"class":52475},[109,65337,52482],{"class":126},[109,65339,65340,65342,65344,65346,65348,65351],{"class":111,"line":17875},[109,65341,53319],{"class":126},[109,65343,52786],{"class":52475},[109,65345,54661],{"class":211},[109,65347,130],{"class":126},[109,65349,65350],{"class":278},"\"tab\"",[109,65352,52482],{"class":126},[109,65354,65355,65357,65359,65361,65363,65366],{"class":111,"line":17886},[109,65356,52516],{"class":126},[109,65358,52786],{"class":52475},[109,65360,54661],{"class":211},[109,65362,130],{"class":126},[109,65364,65365],{"class":278},"\"tab-nav\"",[109,65367,52482],{"class":126},[109,65369,65370,65372,65374,65377,65379],{"class":111,"line":17909},[109,65371,56409],{"class":126},[109,65373,51],{"class":52475},[109,65375,65376],{"class":126},">每日特价\u003C\u002F",[109,65378,51],{"class":52475},[109,65380,52482],{"class":126},[109,65382,65383,65385,65387],{"class":111,"line":17931},[109,65384,56409],{"class":126},[109,65386,27],{"class":52475},[109,65388,52482],{"class":126},[109,65390,65391,65393,65395,65397,65399,65401,65403,65405,65407,65409,65412,65415,65417,65419,65421],{"class":111,"line":17936},[109,65392,56477],{"class":126},[109,65394,30],{"class":52475},[109,65396,62227],{"class":126},[109,65398,1776],{"class":52475},[109,65400,54661],{"class":211},[109,65402,130],{"class":126},[109,65404,60881],{"class":278},[109,65406,62232],{"class":211},[109,65408,130],{"class":126},[109,65410,65411],{"class":278},"\"javascript:;\"",[109,65413,65414],{"class":126},">精选\u003C\u002F",[109,65416,1776],{"class":52475},[109,65418,56489],{"class":126},[109,65420,30],{"class":52475},[109,65422,52482],{"class":126},[109,65424,65425,65427,65429,65431,65433,65435,65437,65439,65442,65444,65446,65448],{"class":111,"line":17942},[109,65426,56477],{"class":126},[109,65428,30],{"class":52475},[109,65430,62227],{"class":126},[109,65432,1776],{"class":52475},[109,65434,62232],{"class":211},[109,65436,130],{"class":126},[109,65438,65411],{"class":278},[109,65440,65441],{"class":126},">美食\u003C\u002F",[109,65443,1776],{"class":52475},[109,65445,56489],{"class":126},[109,65447,30],{"class":52475},[109,65449,52482],{"class":126},[109,65451,65452,65454,65456,65458,65460,65462,65464,65466,65469,65471,65473,65475],{"class":111,"line":17956},[109,65453,56477],{"class":126},[109,65455,30],{"class":52475},[109,65457,62227],{"class":126},[109,65459,1776],{"class":52475},[109,65461,62232],{"class":211},[109,65463,130],{"class":126},[109,65465,65411],{"class":278},[109,65467,65468],{"class":126},">百货\u003C\u002F",[109,65470,1776],{"class":52475},[109,65472,56489],{"class":126},[109,65474,30],{"class":52475},[109,65476,52482],{"class":126},[109,65478,65479,65481,65483,65485,65487,65489,65491,65493,65496,65498,65500,65502],{"class":111,"line":17969},[109,65480,56477],{"class":126},[109,65482,30],{"class":52475},[109,65484,62227],{"class":126},[109,65486,1776],{"class":52475},[109,65488,62232],{"class":211},[109,65490,130],{"class":126},[109,65492,65411],{"class":278},[109,65494,65495],{"class":126},">个护\u003C\u002F",[109,65497,1776],{"class":52475},[109,65499,56489],{"class":126},[109,65501,30],{"class":52475},[109,65503,52482],{"class":126},[109,65505,65506,65508,65510,65512,65514,65516,65518,65520,65523,65525,65527,65529],{"class":111,"line":17974},[109,65507,56477],{"class":126},[109,65509,30],{"class":52475},[109,65511,62227],{"class":126},[109,65513,1776],{"class":52475},[109,65515,62232],{"class":211},[109,65517,130],{"class":126},[109,65519,65411],{"class":278},[109,65521,65522],{"class":126},">预告\u003C\u002F",[109,65524,1776],{"class":52475},[109,65526,56489],{"class":126},[109,65528,30],{"class":52475},[109,65530,52482],{"class":126},[109,65532,65533,65535,65537],{"class":111,"line":17988},[109,65534,56582],{"class":126},[109,65536,27],{"class":52475},[109,65538,52482],{"class":126},[109,65540,65541,65543,65545],{"class":111,"line":17993},[109,65542,52951],{"class":126},[109,65544,52786],{"class":52475},[109,65546,52482],{"class":126},[109,65548,65549,65551,65553,65555,65557,65560],{"class":111,"line":17999},[109,65550,52516],{"class":126},[109,65552,52786],{"class":52475},[109,65554,54661],{"class":211},[109,65556,130],{"class":126},[109,65558,65559],{"class":278},"\"tab-content\"",[109,65561,52482],{"class":126},[109,65563,65564,65566,65568,65570,65572,65575,65577,65579,65581,65583,65586,65588,65590,65592,65595,65597],{"class":111,"line":18004},[109,65565,56409],{"class":126},[109,65567,52786],{"class":52475},[109,65569,54661],{"class":211},[109,65571,130],{"class":126},[109,65573,65574],{"class":278},"\"item active\"",[109,65576,62227],{"class":126},[109,65578,938],{"class":52475},[109,65580,56414],{"class":211},[109,65582,130],{"class":126},[109,65584,65585],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[109,65587,56422],{"class":211},[109,65589,130],{"class":126},[109,65591,8978],{"class":278},[109,65593,65594],{"class":126}," \u002F>\u003C\u002F",[109,65596,52786],{"class":52475},[109,65598,52482],{"class":126},[109,65600,65601,65603,65605,65607,65609,65611,65613,65615,65617,65619,65622,65624,65626,65628,65630,65632],{"class":111,"line":18018},[109,65602,56409],{"class":126},[109,65604,52786],{"class":52475},[109,65606,54661],{"class":211},[109,65608,130],{"class":126},[109,65610,63798],{"class":278},[109,65612,62227],{"class":126},[109,65614,938],{"class":52475},[109,65616,56414],{"class":211},[109,65618,130],{"class":126},[109,65620,65621],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[109,65623,56422],{"class":211},[109,65625,130],{"class":126},[109,65627,8978],{"class":278},[109,65629,65594],{"class":126},[109,65631,52786],{"class":52475},[109,65633,52482],{"class":126},[109,65635,65636,65638,65640,65642,65644,65646,65648,65650,65652,65654,65657,65659,65661,65663,65665,65667],{"class":111,"line":18023},[109,65637,56409],{"class":126},[109,65639,52786],{"class":52475},[109,65641,54661],{"class":211},[109,65643,130],{"class":126},[109,65645,63798],{"class":278},[109,65647,62227],{"class":126},[109,65649,938],{"class":52475},[109,65651,56414],{"class":211},[109,65653,130],{"class":126},[109,65655,65656],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[109,65658,56422],{"class":211},[109,65660,130],{"class":126},[109,65662,8978],{"class":278},[109,65664,65594],{"class":126},[109,65666,52786],{"class":52475},[109,65668,52482],{"class":126},[109,65670,65671,65673,65675,65677,65679,65681,65683,65685,65687,65689,65692,65694,65696,65698,65700,65702],{"class":111,"line":18028},[109,65672,56409],{"class":126},[109,65674,52786],{"class":52475},[109,65676,54661],{"class":211},[109,65678,130],{"class":126},[109,65680,63798],{"class":278},[109,65682,62227],{"class":126},[109,65684,938],{"class":52475},[109,65686,56414],{"class":211},[109,65688,130],{"class":126},[109,65690,65691],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[109,65693,56422],{"class":211},[109,65695,130],{"class":126},[109,65697,8978],{"class":278},[109,65699,65594],{"class":126},[109,65701,52786],{"class":52475},[109,65703,52482],{"class":126},[109,65705,65706,65708,65710,65712,65714,65716,65718,65720,65722,65724,65727,65729,65731,65733,65735,65737],{"class":111,"line":18042},[109,65707,56409],{"class":126},[109,65709,52786],{"class":52475},[109,65711,54661],{"class":211},[109,65713,130],{"class":126},[109,65715,63798],{"class":278},[109,65717,62227],{"class":126},[109,65719,938],{"class":52475},[109,65721,56414],{"class":211},[109,65723,130],{"class":126},[109,65725,65726],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[109,65728,56422],{"class":211},[109,65730,130],{"class":126},[109,65732,8978],{"class":278},[109,65734,65594],{"class":126},[109,65736,52786],{"class":52475},[109,65738,52482],{"class":126},[109,65740,65741,65743,65745],{"class":111,"line":18054},[109,65742,52951],{"class":126},[109,65744,52786],{"class":52475},[109,65746,52482],{"class":126},[109,65748,65749,65751,65753],{"class":111,"line":18059},[109,65750,53592],{"class":126},[109,65752,52786],{"class":52475},[109,65754,52482],{"class":126},[109,65756,65757,65759,65761],{"class":111,"line":18072},[109,65758,53319],{"class":126},[109,65760,52988],{"class":52475},[109,65762,52482],{"class":126},[109,65764,65765],{"class":111,"line":18077},[109,65766,65767],{"class":115},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[109,65769,65770],{"class":111,"line":18082},[109,65771,65772],{"class":115},"    \u002F\u002F 1.1 获取 a 元素 \n",[109,65774,65775,65777,65780,65782,65784,65786,65788,65791],{"class":111,"line":18087},[109,65776,619],{"class":122},[109,65778,65779],{"class":133}," as",[109,65781,14737],{"class":122},[109,65783,55571],{"class":126},[109,65785,56856],{"class":211},[109,65787,714],{"class":126},[109,65789,65790],{"class":278},"'.tab-nav a'",[109,65792,1330],{"class":126},[109,65794,65795],{"class":111,"line":18100},[109,65796,65797],{"class":115},"    \u002F\u002F console.log(as) \n",[109,65799,65800,65802,65804,65806,65808,65810,65812,65814,65816,65819,65821,65823,65825],{"class":111,"line":18105},[109,65801,1302],{"class":122},[109,65803,285],{"class":126},[109,65805,53022],{"class":122},[109,65807,10756],{"class":126},[109,65809,130],{"class":122},[109,65811,734],{"class":133},[109,65813,10763],{"class":126},[109,65815,1320],{"class":122},[109,65817,65818],{"class":126}," as.",[109,65820,53143],{"class":133},[109,65822,4558],{"class":126},[109,65824,1327],{"class":122},[109,65826,13615],{"class":126},[109,65828,65829],{"class":111,"line":33808},[109,65830,65831],{"class":115},"      \u002F\u002F console.log(as[i])\n",[109,65833,65834],{"class":111,"line":33814},[109,65835,65836],{"class":115},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[109,65838,65839,65842,65844,65846,65849,65851,65853],{"class":111,"line":33820},[109,65840,65841],{"class":126},"      as[i].",[109,65843,58988],{"class":211},[109,65845,714],{"class":126},[109,65847,65848],{"class":278},"'mouseenter'",[109,65850,13608],{"class":126},[109,65852,55624],{"class":122},[109,65854,55627],{"class":126},[109,65856,65857],{"class":111,"line":33826},[109,65858,65859],{"class":115},"        \u002F\u002F console.log('鼠标经过')\n",[109,65861,65862],{"class":111,"line":33832},[109,65863,65864],{"class":115},"        \u002F\u002F 排他思想  \n",[109,65866,65867],{"class":111,"line":33843},[109,65868,65869],{"class":115},"        \u002F\u002F 干掉别人 移除类active\n",[109,65871,65872,65874,65876,65878,65881,65883,65885,65887,65890],{"class":111,"line":33849},[109,65873,53100],{"class":126},[109,65875,55574],{"class":211},[109,65877,714],{"class":126},[109,65879,65880],{"class":278},"'.tab-nav .active'",[109,65882,58178],{"class":126},[109,65884,58181],{"class":211},[109,65886,714],{"class":126},[109,65888,65889],{"class":278},"'active'",[109,65891,1330],{"class":126},[109,65893,65894],{"class":111,"line":33869},[109,65895,65896],{"class":115},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[109,65898,65899,65902,65905,65907,65909,65911],{"class":111,"line":33875},[109,65900,65901],{"class":133},"        this",[109,65903,65904],{"class":126},".classList.",[109,65906,6671],{"class":211},[109,65908,714],{"class":126},[109,65910,65889],{"class":278},[109,65912,1330],{"class":126},[109,65914,65915],{"class":111,"line":33886},[109,65916,158],{"emptyLinePlaceholder":157},[109,65918,65919],{"class":111,"line":33892},[109,65920,65921],{"class":115},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[109,65923,65924],{"class":111,"line":33898},[109,65925,65926],{"class":115},"        \u002F\u002F 干掉别人\n",[109,65928,65929,65931,65933,65935,65938,65940,65942,65944,65946],{"class":111,"line":33904},[109,65930,53100],{"class":126},[109,65932,55574],{"class":211},[109,65934,714],{"class":126},[109,65936,65937],{"class":278},"'.tab-content .active'",[109,65939,58178],{"class":126},[109,65941,58181],{"class":211},[109,65943,714],{"class":126},[109,65945,65889],{"class":278},[109,65947,1330],{"class":126},[109,65949,65950],{"class":111,"line":33910},[109,65951,65952],{"class":115},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[109,65954,65955,65957,65959,65961,65964,65966,65968,65970,65972,65974,65976,65978,65980],{"class":111,"line":33916},[109,65956,53100],{"class":126},[109,65958,55574],{"class":211},[109,65960,714],{"class":126},[109,65962,65963],{"class":278},"`.tab-content .item:nth-child(${",[109,65965,1345],{"class":126},[109,65967,46741],{"class":122},[109,65969,26293],{"class":133},[109,65971,58207],{"class":278},[109,65973,58178],{"class":126},[109,65975,6671],{"class":211},[109,65977,714],{"class":126},[109,65979,65889],{"class":278},[109,65981,1330],{"class":126},[109,65983,65984],{"class":111,"line":33922},[109,65985,158],{"emptyLinePlaceholder":157},[109,65987,65988],{"class":111,"line":33928},[109,65989,65990],{"class":126},"      })\n",[109,65992,65993],{"class":111,"line":33948},[109,65994,1361],{"class":126},[109,65996,65997,65999,66001],{"class":111,"line":33954},[109,65998,53592],{"class":126},[109,66000,52988],{"class":52475},[109,66002,52482],{"class":126},[109,66004,66005,66007,66009],{"class":111,"line":33970},[109,66006,52960],{"class":126},[109,66008,52975],{"class":52475},[109,66010,52482],{"class":126},[109,66012,66013],{"class":111,"line":33976},[109,66014,158],{"emptyLinePlaceholder":157},[109,66016,66017,66019,66021],{"class":111,"line":33990},[109,66018,52960],{"class":126},[109,66020,51810],{"class":52475},[109,66022,52482],{"class":126},[19,66024,66025],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66027,66028],{},"在监听事件中，this指向的就是他的调用者",[19,66030,66031],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66033,54895],{},[19,66035,66036],{},"(function () {",[19,66038,66039],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66041,66042],{},"list.addEventListener('click', function (e) {",[19,66044,66045],{},"if (e.target.tagName === 'A') {",[19,66047,66048],{},"\u002F\u002F 排他思想",[19,66050,66051],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66053,66054],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66056,66057],{},"\u002F\u002F console.log(old);",[19,66059,66060],{},"\u002F\u002F 判断",[19,66062,66063],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66065,66066],{},"if (old) old.classList.remove('active')",[19,66068,66069],{},"e.target.classList.add('active')",[19,66071,2476],{},[19,66073,53639],{},[19,66075,66076],{},"})();",[51,66078,66080],{"id":66079},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[99,66082,66084],{"className":51808,"code":66083,"language":51810,"meta":104,"style":104},"\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",[106,66085,66086,66096,66100,66108,66112,66126,66140,66152,66160,66166,66176,66186,66190,66194,66201,66213,66224,66241,66254,66268,66278,66282,66286,66293,66304,66322,66332,66344,66348,66352,66359,66376,66387,66399,66403,66407,66414,66426,66430,66438,66446,66450,66458,66466,66474,66489,66533,66541,66554,66567,66580,66588,66596,66604,66632,66640,66652,66665,66678,66686,66694,66702,66728,66736,66749,66761,66774,66782,66790,66798,66824,66832,66845,66857,66870,66878,66886,66894,66899,66919,66924,66944,66949,66966,66971,66979,66984,67013,67026,67030,67034,67039,67043,67071,67076,67093,67098,67103,67108,67113,67139,67143,67147,67155,67163,67167],{"__ignoreMap":104},[109,66087,66088,66090,66092,66094],{"class":111,"line":112},[109,66089,52472],{"class":126},[109,66091,52476],{"class":52475},[109,66093,52479],{"class":211},[109,66095,52482],{"class":126},[109,66097,66098],{"class":111,"line":119},[109,66099,158],{"emptyLinePlaceholder":157},[109,66101,66102,66104,66106],{"class":111,"line":140},[109,66103,1320],{"class":126},[109,66105,51810],{"class":52475},[109,66107,52482],{"class":126},[109,66109,66110],{"class":111,"line":154},[109,66111,158],{"emptyLinePlaceholder":157},[109,66113,66114,66116,66118,66120,66122,66124],{"class":111,"line":161},[109,66115,1320],{"class":126},[109,66117,52509],{"class":52475},[109,66119,52491],{"class":211},[109,66121,130],{"class":126},[109,66123,52496],{"class":278},[109,66125,52482],{"class":126},[109,66127,66128,66130,66132,66134,66136,66138],{"class":111,"line":167},[109,66129,53319],{"class":126},[109,66131,52519],{"class":52475},[109,66133,52522],{"class":211},[109,66135,130],{"class":126},[109,66137,52527],{"class":278},[109,66139,52482],{"class":126},[109,66141,66142,66144,66146,66148,66150],{"class":111,"line":185},[109,66143,53319],{"class":126},[109,66145,52582],{"class":52475},[109,66147,56489],{"class":126},[109,66149,52582],{"class":52475},[109,66151,52482],{"class":126},[109,66153,66154,66156,66158],{"class":111,"line":201},[109,66155,53319],{"class":126},[109,66157,1467],{"class":52475},[109,66159,52482],{"class":126},[109,66161,66162,66164],{"class":111,"line":206},[109,66163,7733],{"class":52475},[109,66165,16745],{"class":126},[109,66167,66168,66170,66172,66174],{"class":111,"line":218},[109,66169,55881],{"class":133},[109,66171,52612],{"class":126},[109,66173,1314],{"class":133},[109,66175,137],{"class":126},[109,66177,66178,66180,66182,66184],{"class":111,"line":223},[109,66179,55870],{"class":133},[109,66181,52612],{"class":126},[109,66183,1314],{"class":133},[109,66185,137],{"class":126},[109,66187,66188],{"class":111,"line":229},[109,66189,1361],{"class":126},[109,66191,66192],{"class":111,"line":244},[109,66193,158],{"emptyLinePlaceholder":157},[109,66195,66196,66199],{"class":111,"line":258},[109,66197,66198],{"class":52475},"    table",[109,66200,16745],{"class":126},[109,66202,66203,66206,66208,66211],{"class":111,"line":263},[109,66204,66205],{"class":133},"      border-collapse",[109,66207,52612],{"class":126},[109,66209,66210],{"class":133},"collapse",[109,66212,137],{"class":126},[109,66214,66215,66218,66220,66222],{"class":111,"line":269},[109,66216,66217],{"class":133},"      border-spacing",[109,66219,52612],{"class":126},[109,66221,1314],{"class":133},[109,66223,137],{"class":126},[109,66225,66226,66228,66230,66232,66234,66236,66239],{"class":111,"line":304},[109,66227,63152],{"class":133},[109,66229,52612],{"class":126},[109,66231,1755],{"class":133},[109,66233,52667],{"class":122},[109,66235,52696],{"class":133},[109,66237,66238],{"class":133}," #c0c0c0",[109,66240,137],{"class":126},[109,66242,66243,66245,66247,66250,66252],{"class":111,"line":331},[109,66244,55946],{"class":133},[109,66246,52612],{"class":126},[109,66248,66249],{"class":133},"500",[109,66251,52667],{"class":122},[109,66253,137],{"class":126},[109,66255,66256,66258,66260,66262,66264,66266],{"class":111,"line":336},[109,66257,55881],{"class":133},[109,66259,52612],{"class":126},[109,66261,1351],{"class":133},[109,66263,52667],{"class":122},[109,66265,52731],{"class":133},[109,66267,137],{"class":126},[109,66269,66270,66272,66274,66276],{"class":111,"line":364},[109,66271,58461],{"class":133},[109,66273,52612],{"class":126},[109,66275,52767],{"class":133},[109,66277,137],{"class":126},[109,66279,66280],{"class":111,"line":391},[109,66281,1361],{"class":126},[109,66283,66284],{"class":111,"line":396},[109,66285,158],{"emptyLinePlaceholder":157},[109,66287,66288,66291],{"class":111,"line":402},[109,66289,66290],{"class":52475},"    th",[109,66292,16745],{"class":126},[109,66294,66295,66297,66299,66302],{"class":111,"line":419},[109,66296,56059],{"class":133},[109,66298,52612],{"class":126},[109,66300,66301],{"class":133},"#09c",[109,66303,137],{"class":126},[109,66305,66306,66309,66311,66313,66315,66317,66320],{"class":111,"line":435},[109,66307,66308],{"class":133},"      font",[109,66310,52612],{"class":126},[109,66312,63514],{"class":133},[109,66314,65248],{"class":133},[109,66316,52667],{"class":122},[109,66318,66319],{"class":278}," \"微软雅黑\"",[109,66321,137],{"class":126},[109,66323,66324,66326,66328,66330],{"class":111,"line":440},[109,66325,58591],{"class":133},[109,66327,52612],{"class":126},[109,66329,62017],{"class":133},[109,66331,137],{"class":126},[109,66333,66334,66336,66338,66340,66342],{"class":111,"line":467},[109,66335,55960],{"class":133},[109,66337,52612],{"class":126},[109,66339,2332],{"class":133},[109,66341,52667],{"class":122},[109,66343,137],{"class":126},[109,66345,66346],{"class":111,"line":494},[109,66347,1361],{"class":126},[109,66349,66350],{"class":111,"line":499},[109,66351,158],{"emptyLinePlaceholder":157},[109,66353,66354,66357],{"class":111,"line":526},[109,66355,66356],{"class":52475},"    td",[109,66358,16745],{"class":126},[109,66360,66361,66363,66365,66367,66369,66371,66374],{"class":111,"line":552},[109,66362,63152],{"class":133},[109,66364,52612],{"class":126},[109,66366,1755],{"class":133},[109,66368,52667],{"class":122},[109,66370,52696],{"class":133},[109,66372,66373],{"class":133}," #d0d0d0",[109,66375,137],{"class":126},[109,66377,66378,66380,66382,66385],{"class":111,"line":557},[109,66379,58591],{"class":133},[109,66381,52612],{"class":126},[109,66383,66384],{"class":133},"#404060",[109,66386,137],{"class":126},[109,66388,66389,66391,66393,66395,66397],{"class":111,"line":584},[109,66390,55870],{"class":133},[109,66392,52612],{"class":126},[109,66394,1008],{"class":133},[109,66396,52667],{"class":122},[109,66398,137],{"class":126},[109,66400,66401],{"class":111,"line":611},[109,66402,1361],{"class":126},[109,66404,66405],{"class":111,"line":616},[109,66406,158],{"emptyLinePlaceholder":157},[109,66408,66409,66412],{"class":111,"line":633},[109,66410,66411],{"class":211},"    .allCheck",[109,66413,16745],{"class":126},[109,66415,66416,66418,66420,66422,66424],{"class":111,"line":649},[109,66417,55946],{"class":133},[109,66419,52612],{"class":126},[109,66421,2144],{"class":133},[109,66423,52667],{"class":122},[109,66425,137],{"class":126},[109,66427,66428],{"class":111,"line":676},[109,66429,1361],{"class":126},[109,66431,66432,66434,66436],{"class":111,"line":703},[109,66433,53592],{"class":126},[109,66435,1467],{"class":52475},[109,66437,52482],{"class":126},[109,66439,66440,66442,66444],{"class":111,"line":708},[109,66441,52960],{"class":126},[109,66443,52509],{"class":52475},[109,66445,52482],{"class":126},[109,66447,66448],{"class":111,"line":723},[109,66449,158],{"emptyLinePlaceholder":157},[109,66451,66452,66454,66456],{"class":111,"line":728},[109,66453,1320],{"class":126},[109,66455,52975],{"class":52475},[109,66457,52482],{"class":126},[109,66459,66460,66462,66464],{"class":111,"line":739},[109,66461,53319],{"class":126},[109,66463,1677],{"class":52475},[109,66465,52482],{"class":126},[109,66467,66468,66470,66472],{"class":111,"line":9352},[109,66469,52516],{"class":126},[109,66471,1683],{"class":52475},[109,66473,52482],{"class":126},[109,66475,66476,66478,66480,66482,66484,66487],{"class":111,"line":9364},[109,66477,56409],{"class":126},[109,66479,1686],{"class":52475},[109,66481,54661],{"class":211},[109,66483,130],{"class":126},[109,66485,66486],{"class":278},"\"allCheck\"",[109,66488,52482],{"class":126},[109,66490,66491,66493,66495,66497,66499,66501,66503,66505,66507,66509,66511,66514,66517,66519,66521,66523,66526,66529,66531],{"class":111,"line":9376},[109,66492,56477],{"class":126},[109,66494,54996],{"class":52475},[109,66496,54999],{"class":211},[109,66498,130],{"class":126},[109,66500,55004],{"class":278},[109,66502,16093],{"class":211},[109,66504,130],{"class":126},[109,66506,8978],{"class":278},[109,66508,16132],{"class":211},[109,66510,130],{"class":126},[109,66512,66513],{"class":278},"\"checkAll\"",[109,66515,66516],{"class":126},"> \u003C",[109,66518,109],{"class":52475},[109,66520,54661],{"class":211},[109,66522,130],{"class":126},[109,66524,66525],{"class":278},"\"all\"",[109,66527,66528],{"class":126},">全选\u003C\u002F",[109,66530,109],{"class":52475},[109,66532,52482],{"class":126},[109,66534,66535,66537,66539],{"class":111,"line":11034},[109,66536,56582],{"class":126},[109,66538,1686],{"class":52475},[109,66540,52482],{"class":126},[109,66542,66543,66545,66547,66550,66552],{"class":111,"line":11059},[109,66544,56409],{"class":126},[109,66546,1686],{"class":52475},[109,66548,66549],{"class":126},">商品\u003C\u002F",[109,66551,1686],{"class":52475},[109,66553,52482],{"class":126},[109,66555,66556,66558,66560,66563,66565],{"class":111,"line":11082},[109,66557,56409],{"class":126},[109,66559,1686],{"class":52475},[109,66561,66562],{"class":126},">商家\u003C\u002F",[109,66564,1686],{"class":52475},[109,66566,52482],{"class":126},[109,66568,66569,66571,66573,66576,66578],{"class":111,"line":11106},[109,66570,56409],{"class":126},[109,66572,1686],{"class":52475},[109,66574,66575],{"class":126},">价格\u003C\u002F",[109,66577,1686],{"class":52475},[109,66579,52482],{"class":126},[109,66581,66582,66584,66586],{"class":111,"line":11111},[109,66583,52951],{"class":126},[109,66585,1683],{"class":52475},[109,66587,52482],{"class":126},[109,66589,66590,66592,66594],{"class":111,"line":11116},[109,66591,52516],{"class":126},[109,66593,1683],{"class":52475},[109,66595,52482],{"class":126},[109,66597,66598,66600,66602],{"class":111,"line":11121},[109,66599,56409],{"class":126},[109,66601,1728],{"class":52475},[109,66603,52482],{"class":126},[109,66605,66606,66608,66610,66612,66614,66616,66618,66620,66623,66625,66627,66630],{"class":111,"line":11130},[109,66607,56477],{"class":126},[109,66609,54996],{"class":52475},[109,66611,54999],{"class":211},[109,66613,130],{"class":126},[109,66615,55004],{"class":278},[109,66617,16093],{"class":211},[109,66619,130],{"class":126},[109,66621,66622],{"class":278},"\"check\"",[109,66624,54661],{"class":211},[109,66626,130],{"class":126},[109,66628,66629],{"class":278},"\"ck\"",[109,66631,52482],{"class":126},[109,66633,66634,66636,66638],{"class":111,"line":11135},[109,66635,56582],{"class":126},[109,66637,1728],{"class":52475},[109,66639,52482],{"class":126},[109,66641,66642,66644,66646,66648,66650],{"class":111,"line":11141},[109,66643,56409],{"class":126},[109,66645,1728],{"class":52475},[109,66647,62348],{"class":126},[109,66649,1728],{"class":52475},[109,66651,52482],{"class":126},[109,66653,66654,66656,66658,66661,66663],{"class":111,"line":11162},[109,66655,56409],{"class":126},[109,66657,1728],{"class":52475},[109,66659,66660],{"class":126},">小米\u003C\u002F",[109,66662,1728],{"class":52475},[109,66664,52482],{"class":126},[109,66666,66667,66669,66671,66674,66676],{"class":111,"line":11168},[109,66668,56409],{"class":126},[109,66670,1728],{"class":52475},[109,66672,66673],{"class":126},">￥1999\u003C\u002F",[109,66675,1728],{"class":52475},[109,66677,52482],{"class":126},[109,66679,66680,66682,66684],{"class":111,"line":11182},[109,66681,52951],{"class":126},[109,66683,1683],{"class":52475},[109,66685,52482],{"class":126},[109,66687,66688,66690,66692],{"class":111,"line":11188},[109,66689,52516],{"class":126},[109,66691,1683],{"class":52475},[109,66693,52482],{"class":126},[109,66695,66696,66698,66700],{"class":111,"line":11215},[109,66697,56409],{"class":126},[109,66699,1728],{"class":52475},[109,66701,52482],{"class":126},[109,66703,66704,66706,66708,66710,66712,66714,66716,66718,66720,66722,66724,66726],{"class":111,"line":11224},[109,66705,56477],{"class":126},[109,66707,54996],{"class":52475},[109,66709,54999],{"class":211},[109,66711,130],{"class":126},[109,66713,55004],{"class":278},[109,66715,16093],{"class":211},[109,66717,130],{"class":126},[109,66719,66622],{"class":278},[109,66721,54661],{"class":211},[109,66723,130],{"class":126},[109,66725,66629],{"class":278},[109,66727,52482],{"class":126},[109,66729,66730,66732,66734],{"class":111,"line":11230},[109,66731,56582],{"class":126},[109,66733,1728],{"class":52475},[109,66735,52482],{"class":126},[109,66737,66738,66740,66742,66745,66747],{"class":111,"line":11238},[109,66739,56409],{"class":126},[109,66741,1728],{"class":52475},[109,66743,66744],{"class":126},">小米净水器\u003C\u002F",[109,66746,1728],{"class":52475},[109,66748,52482],{"class":126},[109,66750,66751,66753,66755,66757,66759],{"class":111,"line":11243},[109,66752,56409],{"class":126},[109,66754,1728],{"class":52475},[109,66756,66660],{"class":126},[109,66758,1728],{"class":52475},[109,66760,52482],{"class":126},[109,66762,66763,66765,66767,66770,66772],{"class":111,"line":17777},[109,66764,56409],{"class":126},[109,66766,1728],{"class":52475},[109,66768,66769],{"class":126},">￥4999\u003C\u002F",[109,66771,1728],{"class":52475},[109,66773,52482],{"class":126},[109,66775,66776,66778,66780],{"class":111,"line":17783},[109,66777,52951],{"class":126},[109,66779,1683],{"class":52475},[109,66781,52482],{"class":126},[109,66783,66784,66786,66788],{"class":111,"line":17806},[109,66785,52516],{"class":126},[109,66787,1683],{"class":52475},[109,66789,52482],{"class":126},[109,66791,66792,66794,66796],{"class":111,"line":17812},[109,66793,56409],{"class":126},[109,66795,1728],{"class":52475},[109,66797,52482],{"class":126},[109,66799,66800,66802,66804,66806,66808,66810,66812,66814,66816,66818,66820,66822],{"class":111,"line":17835},[109,66801,56477],{"class":126},[109,66803,54996],{"class":52475},[109,66805,54999],{"class":211},[109,66807,130],{"class":126},[109,66809,55004],{"class":278},[109,66811,16093],{"class":211},[109,66813,130],{"class":126},[109,66815,66622],{"class":278},[109,66817,54661],{"class":211},[109,66819,130],{"class":126},[109,66821,66629],{"class":278},[109,66823,52482],{"class":126},[109,66825,66826,66828,66830],{"class":111,"line":17849},[109,66827,56582],{"class":126},[109,66829,1728],{"class":52475},[109,66831,52482],{"class":126},[109,66833,66834,66836,66838,66841,66843],{"class":111,"line":17869},[109,66835,56409],{"class":126},[109,66837,1728],{"class":52475},[109,66839,66840],{"class":126},">小米电视\u003C\u002F",[109,66842,1728],{"class":52475},[109,66844,52482],{"class":126},[109,66846,66847,66849,66851,66853,66855],{"class":111,"line":17875},[109,66848,56409],{"class":126},[109,66850,1728],{"class":52475},[109,66852,66660],{"class":126},[109,66854,1728],{"class":52475},[109,66856,52482],{"class":126},[109,66858,66859,66861,66863,66866,66868],{"class":111,"line":17886},[109,66860,56409],{"class":126},[109,66862,1728],{"class":52475},[109,66864,66865],{"class":126},">￥5999\u003C\u002F",[109,66867,1728],{"class":52475},[109,66869,52482],{"class":126},[109,66871,66872,66874,66876],{"class":111,"line":17909},[109,66873,52951],{"class":126},[109,66875,1683],{"class":52475},[109,66877,52482],{"class":126},[109,66879,66880,66882,66884],{"class":111,"line":17931},[109,66881,53592],{"class":126},[109,66883,1677],{"class":52475},[109,66885,52482],{"class":126},[109,66887,66888,66890,66892],{"class":111,"line":17936},[109,66889,53319],{"class":126},[109,66891,52988],{"class":52475},[109,66893,52482],{"class":126},[109,66895,66896],{"class":111,"line":17942},[109,66897,66898],{"class":115},"    \u002F\u002F 1. 获取大复选框\n",[109,66900,66901,66903,66906,66908,66910,66912,66914,66917],{"class":111,"line":17956},[109,66902,619],{"class":122},[109,66904,66905],{"class":133}," checkAll",[109,66907,14737],{"class":122},[109,66909,55571],{"class":126},[109,66911,55574],{"class":211},[109,66913,714],{"class":126},[109,66915,66916],{"class":278},"'#checkAll'",[109,66918,1330],{"class":126},[109,66920,66921],{"class":111,"line":17969},[109,66922,66923],{"class":115},"    \u002F\u002F 2. 获取所有的小复选框\n",[109,66925,66926,66928,66931,66933,66935,66937,66939,66942],{"class":111,"line":17974},[109,66927,619],{"class":122},[109,66929,66930],{"class":133}," cks",[109,66932,14737],{"class":122},[109,66934,55571],{"class":126},[109,66936,56856],{"class":211},[109,66938,714],{"class":126},[109,66940,66941],{"class":278},"'.ck'",[109,66943,1330],{"class":126},[109,66945,66946],{"class":111,"line":17988},[109,66947,66948],{"class":115},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[109,66950,66951,66954,66956,66958,66960,66962,66964],{"class":111,"line":17993},[109,66952,66953],{"class":126},"    checkAll.",[109,66955,58988],{"class":211},[109,66957,714],{"class":126},[109,66959,58993],{"class":278},[109,66961,13608],{"class":126},[109,66963,55624],{"class":122},[109,66965,55627],{"class":126},[109,66967,66968],{"class":111,"line":17999},[109,66969,66970],{"class":115},"      \u002F\u002F 得到当前大复选框的选中状态\n",[109,66972,66973,66976],{"class":111,"line":18004},[109,66974,66975],{"class":115},"      \u002F\u002F console.log(checkAll.checked)",[109,66977,66978],{"class":115},"  \u002F\u002F 得到 是 true 或者是 false\n",[109,66980,66981],{"class":111,"line":18018},[109,66982,66983],{"class":115},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[109,66985,66986,66988,66990,66992,66994,66996,66998,67000,67002,67005,67007,67009,67011],{"class":111,"line":18023},[109,66987,53459],{"class":122},[109,66989,285],{"class":126},[109,66991,53022],{"class":122},[109,66993,10756],{"class":126},[109,66995,130],{"class":122},[109,66997,734],{"class":133},[109,66999,10763],{"class":126},[109,67001,1320],{"class":122},[109,67003,67004],{"class":126}," cks.",[109,67006,53143],{"class":133},[109,67008,4558],{"class":126},[109,67010,1327],{"class":122},[109,67012,13615],{"class":126},[109,67014,67015,67018,67020,67023],{"class":111,"line":18028},[109,67016,67017],{"class":126},"        cks[i].checked ",[109,67019,130],{"class":122},[109,67021,67022],{"class":133}," this",[109,67024,67025],{"class":126},".checked\n",[109,67027,67028],{"class":111,"line":18042},[109,67029,53573],{"class":126},[109,67031,67032],{"class":111,"line":18054},[109,67033,34636],{"class":126},[109,67035,67036],{"class":111,"line":18059},[109,67037,67038],{"class":115},"    \u002F\u002F 5. 小复选框控制大复选框\n",[109,67040,67041],{"class":111,"line":18072},[109,67042,158],{"emptyLinePlaceholder":157},[109,67044,67045,67047,67049,67051,67053,67055,67057,67059,67061,67063,67065,67067,67069],{"class":111,"line":18077},[109,67046,1302],{"class":122},[109,67048,285],{"class":126},[109,67050,53022],{"class":122},[109,67052,10756],{"class":126},[109,67054,130],{"class":122},[109,67056,734],{"class":133},[109,67058,10763],{"class":126},[109,67060,1320],{"class":122},[109,67062,67004],{"class":126},[109,67064,53143],{"class":133},[109,67066,4558],{"class":126},[109,67068,1327],{"class":122},[109,67070,13615],{"class":126},[109,67072,67073],{"class":111,"line":18082},[109,67074,67075],{"class":115},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[109,67077,67078,67081,67083,67085,67087,67089,67091],{"class":111,"line":18087},[109,67079,67080],{"class":126},"      cks[i].",[109,67082,58988],{"class":211},[109,67084,714],{"class":126},[109,67086,58993],{"class":278},[109,67088,13608],{"class":126},[109,67090,55624],{"class":122},[109,67092,55627],{"class":126},[109,67094,67095],{"class":111,"line":18100},[109,67096,67097],{"class":115},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[109,67099,67100],{"class":111,"line":18105},[109,67101,67102],{"class":115},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[109,67104,67105],{"class":111,"line":33808},[109,67106,67107],{"class":115},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[109,67109,67110],{"class":111,"line":33814},[109,67111,67112],{"class":115},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[109,67114,67115,67118,67120,67122,67124,67126,67129,67131,67133,67135,67137],{"class":111,"line":33820},[109,67116,67117],{"class":126},"        checkAll.checked ",[109,67119,130],{"class":122},[109,67121,55571],{"class":126},[109,67123,56856],{"class":211},[109,67125,714],{"class":126},[109,67127,67128],{"class":278},"'.ck:checked'",[109,67130,32001],{"class":126},[109,67132,53143],{"class":133},[109,67134,59081],{"class":122},[109,67136,67004],{"class":126},[109,67138,57006],{"class":133},[109,67140,67141],{"class":111,"line":33826},[109,67142,65990],{"class":126},[109,67144,67145],{"class":111,"line":33832},[109,67146,1361],{"class":126},[109,67148,67149,67151,67153],{"class":111,"line":33843},[109,67150,53592],{"class":126},[109,67152,52988],{"class":52475},[109,67154,52482],{"class":126},[109,67156,67157,67159,67161],{"class":111,"line":33849},[109,67158,52960],{"class":126},[109,67160,52975],{"class":52475},[109,67162,52482],{"class":126},[109,67164,67165],{"class":111,"line":33869},[109,67166,158],{"emptyLinePlaceholder":157},[109,67168,67169,67171,67173],{"class":111,"line":33875},[109,67170,52960],{"class":126},[109,67172,51810],{"class":52475},[109,67174,52482],{"class":126},[19,67176,67177],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67179,67180],{},"用好之间比较得到的布尔值！！！",[19,67182,67183,67184,67187,67188,285,67191,2116,67193,67196],{},"在 JS 里访问的时候，",[106,67185,67186],{},"checkbox.checked"," 是一个 ",[23,67189,67190],{},"布尔值",[106,67192,2755],{},[106,67194,67195],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67198,67199,67200,67203,67204],{},"HTML 的 ",[106,67201,67202],{},"checked=\"checked\""," 只是 ",[23,67205,67206,67207,67210],{},"初始值；JS 的 ",[106,67208,67209],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67212,67213],{},"：checked是一个伪类选择器",[19,67215,67216],{},[938,67217],{"alt":104,"src":67218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67220,67221,67224],{},[67222,67223],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67226,67227],{},[938,67228],{"alt":104,"src":67229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67231,67233],{"id":67232},"_33-dom事件进阶","3.3 DOM事件进阶",[51,67235,67237],{"id":67236},"_331-事件流","3.3.1 事件流",[19,67239,67240],{},[938,67241],{"alt":104,"src":67242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23171,67244,67246],{"id":67245},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67248,67249],{},[938,67250],{"alt":104,"src":67251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[99,67253,67255],{"className":51808,"code":67254,"language":51810,"meta":104,"style":104},"\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",[106,67256,67257,67267,67281,67285,67293,67307,67327,67339,67347,67354,67366,67378,67388,67392,67396,67403,67415,67427,67437,67441,67449,67457,67461,67469,67484,67503,67511,67519,67539,67559,67575,67586,67594,67611,67622,67630,67647,67658,67666,67674,67682,67686],{"__ignoreMap":104},[109,67258,67259,67261,67263,67265],{"class":111,"line":112},[109,67260,52472],{"class":126},[109,67262,52476],{"class":52475},[109,67264,52479],{"class":211},[109,67266,52482],{"class":126},[109,67268,67269,67271,67273,67275,67277,67279],{"class":111,"line":119},[109,67270,1320],{"class":126},[109,67272,51810],{"class":52475},[109,67274,52491],{"class":211},[109,67276,130],{"class":126},[109,67278,52496],{"class":278},[109,67280,52482],{"class":126},[109,67282,67283],{"class":111,"line":140},[109,67284,158],{"emptyLinePlaceholder":157},[109,67286,67287,67289,67291],{"class":111,"line":154},[109,67288,1320],{"class":126},[109,67290,52509],{"class":52475},[109,67292,52482],{"class":126},[109,67294,67295,67297,67299,67301,67303,67305],{"class":111,"line":161},[109,67296,53319],{"class":126},[109,67298,52519],{"class":52475},[109,67300,52522],{"class":211},[109,67302,130],{"class":126},[109,67304,52527],{"class":278},[109,67306,52482],{"class":126},[109,67308,67309,67311,67313,67315,67317,67319,67321,67323,67325],{"class":111,"line":167},[109,67310,53319],{"class":126},[109,67312,52519],{"class":52475},[109,67314,16093],{"class":211},[109,67316,130],{"class":126},[109,67318,52566],{"class":278},[109,67320,52546],{"class":211},[109,67322,130],{"class":126},[109,67324,52573],{"class":278},[109,67326,52482],{"class":126},[109,67328,67329,67331,67333,67335,67337],{"class":111,"line":185},[109,67330,53319],{"class":126},[109,67332,52582],{"class":52475},[109,67334,52585],{"class":126},[109,67336,52582],{"class":52475},[109,67338,52482],{"class":126},[109,67340,67341,67343,67345],{"class":111,"line":201},[109,67342,53319],{"class":126},[109,67344,1467],{"class":52475},[109,67346,52482],{"class":126},[109,67348,67349,67352],{"class":111,"line":206},[109,67350,67351],{"class":211},"    .father",[109,67353,16745],{"class":126},[109,67355,67356,67358,67360,67362,67364],{"class":111,"line":218},[109,67357,55946],{"class":133},[109,67359,52612],{"class":126},[109,67361,66249],{"class":133},[109,67363,52667],{"class":122},[109,67365,137],{"class":126},[109,67367,67368,67370,67372,67374,67376],{"class":111,"line":223},[109,67369,55960],{"class":133},[109,67371,52612],{"class":126},[109,67373,66249],{"class":133},[109,67375,52667],{"class":122},[109,67377,137],{"class":126},[109,67379,67380,67382,67384,67386],{"class":111,"line":229},[109,67381,56059],{"class":133},[109,67383,52612],{"class":126},[109,67385,52820],{"class":133},[109,67387,137],{"class":126},[109,67389,67390],{"class":111,"line":244},[109,67391,1361],{"class":126},[109,67393,67394],{"class":111,"line":258},[109,67395,158],{"emptyLinePlaceholder":157},[109,67397,67398,67401],{"class":111,"line":263},[109,67399,67400],{"class":211},"    .son",[109,67402,16745],{"class":126},[109,67404,67405,67407,67409,67411,67413],{"class":111,"line":269},[109,67406,55946],{"class":133},[109,67408,52612],{"class":126},[109,67410,3098],{"class":133},[109,67412,52667],{"class":122},[109,67414,137],{"class":126},[109,67416,67417,67419,67421,67423,67425],{"class":111,"line":304},[109,67418,55960],{"class":133},[109,67420,52612],{"class":126},[109,67422,3098],{"class":133},[109,67424,52667],{"class":122},[109,67426,137],{"class":126},[109,67428,67429,67431,67433,67435],{"class":111,"line":331},[109,67430,56059],{"class":133},[109,67432,52612],{"class":126},[109,67434,56064],{"class":133},[109,67436,137],{"class":126},[109,67438,67439],{"class":111,"line":336},[109,67440,1361],{"class":126},[109,67442,67443,67445,67447],{"class":111,"line":364},[109,67444,53592],{"class":126},[109,67446,1467],{"class":52475},[109,67448,52482],{"class":126},[109,67450,67451,67453,67455],{"class":111,"line":391},[109,67452,52960],{"class":126},[109,67454,52509],{"class":52475},[109,67456,52482],{"class":126},[109,67458,67459],{"class":111,"line":396},[109,67460,158],{"emptyLinePlaceholder":157},[109,67462,67463,67465,67467],{"class":111,"line":402},[109,67464,1320],{"class":126},[109,67466,52975],{"class":52475},[109,67468,52482],{"class":126},[109,67470,67471,67473,67475,67477,67479,67482],{"class":111,"line":419},[109,67472,53319],{"class":126},[109,67474,52786],{"class":52475},[109,67476,54661],{"class":211},[109,67478,130],{"class":126},[109,67480,67481],{"class":278},"\"father\"",[109,67483,52482],{"class":126},[109,67485,67486,67488,67490,67492,67494,67497,67499,67501],{"class":111,"line":435},[109,67487,52516],{"class":126},[109,67489,52786],{"class":52475},[109,67491,54661],{"class":211},[109,67493,130],{"class":126},[109,67495,67496],{"class":278},"\"son\"",[109,67498,56489],{"class":126},[109,67500,52786],{"class":52475},[109,67502,52482],{"class":126},[109,67504,67505,67507,67509],{"class":111,"line":440},[109,67506,53592],{"class":126},[109,67508,52786],{"class":52475},[109,67510,52482],{"class":126},[109,67512,67513,67515,67517],{"class":111,"line":467},[109,67514,53319],{"class":126},[109,67516,52988],{"class":52475},[109,67518,52482],{"class":126},[109,67520,67521,67523,67526,67528,67530,67532,67534,67537],{"class":111,"line":494},[109,67522,619],{"class":122},[109,67524,67525],{"class":133}," fa",[109,67527,14737],{"class":122},[109,67529,55571],{"class":126},[109,67531,55574],{"class":211},[109,67533,714],{"class":126},[109,67535,67536],{"class":278},"'.father'",[109,67538,1330],{"class":126},[109,67540,67541,67543,67546,67548,67550,67552,67554,67557],{"class":111,"line":499},[109,67542,619],{"class":122},[109,67544,67545],{"class":133}," son",[109,67547,14737],{"class":122},[109,67549,55571],{"class":126},[109,67551,55574],{"class":211},[109,67553,714],{"class":126},[109,67555,67556],{"class":278},"'.son'",[109,67558,1330],{"class":126},[109,67560,67561,67563,67565,67567,67569,67571,67573],{"class":111,"line":526},[109,67562,53582],{"class":126},[109,67564,58988],{"class":211},[109,67566,714],{"class":126},[109,67568,58993],{"class":278},[109,67570,13608],{"class":126},[109,67572,55624],{"class":122},[109,67574,55627],{"class":126},[109,67576,67577,67579,67581,67584],{"class":111,"line":552},[109,67578,60100],{"class":211},[109,67580,714],{"class":126},[109,67582,67583],{"class":278},"'woshiu1'",[109,67585,1330],{"class":126},[109,67587,67588,67590,67592],{"class":111,"line":557},[109,67589,55710],{"class":126},[109,67591,2755],{"class":133},[109,67593,1330],{"class":126},[109,67595,67596,67599,67601,67603,67605,67607,67609],{"class":111,"line":584},[109,67597,67598],{"class":126},"    fa.",[109,67600,58988],{"class":211},[109,67602,714],{"class":126},[109,67604,58993],{"class":278},[109,67606,13608],{"class":126},[109,67608,55624],{"class":122},[109,67610,55627],{"class":126},[109,67612,67613,67615,67617,67620],{"class":111,"line":611},[109,67614,60100],{"class":211},[109,67616,714],{"class":126},[109,67618,67619],{"class":278},"'1'",[109,67621,1330],{"class":126},[109,67623,67624,67626,67628],{"class":111,"line":616},[109,67625,55710],{"class":126},[109,67627,2755],{"class":133},[109,67629,1330],{"class":126},[109,67631,67632,67635,67637,67639,67641,67643,67645],{"class":111,"line":633},[109,67633,67634],{"class":126},"    son.",[109,67636,58988],{"class":211},[109,67638,714],{"class":126},[109,67640,58993],{"class":278},[109,67642,13608],{"class":126},[109,67644,55624],{"class":122},[109,67646,55627],{"class":126},[109,67648,67649,67651,67653,67656],{"class":111,"line":649},[109,67650,60100],{"class":211},[109,67652,714],{"class":126},[109,67654,67655],{"class":278},"'2'",[109,67657,1330],{"class":126},[109,67659,67660,67662,67664],{"class":111,"line":676},[109,67661,55710],{"class":126},[109,67663,2755],{"class":133},[109,67665,1330],{"class":126},[109,67667,67668,67670,67672],{"class":111,"line":703},[109,67669,53592],{"class":126},[109,67671,52988],{"class":52475},[109,67673,52482],{"class":126},[109,67675,67676,67678,67680],{"class":111,"line":708},[109,67677,52960],{"class":126},[109,67679,52975],{"class":52475},[109,67681,52482],{"class":126},[109,67683,67684],{"class":111,"line":723},[109,67685,158],{"emptyLinePlaceholder":157},[109,67687,67688,67690,67692],{"class":111,"line":728},[109,67689,52960],{"class":126},[109,67691,51810],{"class":52475},[109,67693,52482],{"class":126},[19,67695,67696],{},[938,67697],{"alt":104,"src":67698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67700,67701],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23171,67703,67705],{"id":67704},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67707,67708],{},[938,67709],{"alt":104,"src":67710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67712,67713],{},"反着来",[19,67715,67716],{},"注意是同名事件，比如都是‘click’",[23171,67718,67720],{"id":67719},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67722,67723],{},[938,67724],{"alt":104,"src":67725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23171,67727,67729],{"id":67728},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67731,67732],{},[938,67733],{"alt":104,"src":67734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67736,67737],{},[938,67738],{"alt":104,"src":67739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23171,67741,67743],{"id":67742},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[765,67745,67746],{},[30,67747,67748],{},"事件类型的区别",[19,67750,67751],{},[938,67752],{"alt":104,"src":67753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67755,67756],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[765,67758,67759],{"start":119},[30,67760,67761],{},"注册事件的区别",[19,67763,67764],{},[938,67765],{"alt":104,"src":67766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23171,67768,67770],{"id":67769},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67772,67773],{},[938,67774],{"alt":104,"src":67775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67777,67778],{},[938,67779],{"alt":104,"src":67780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[99,67782,67784],{"className":54242,"code":67783,"language":54244,"meta":104,"style":104},"\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",[106,67785,67786,67794,67811,67834,67842,67847,67852,67857,67861,67869,67877],{"__ignoreMap":104},[109,67787,67788,67790,67792],{"class":111,"line":112},[109,67789,1320],{"class":126},[109,67791,52975],{"class":52475},[109,67793,52482],{"class":126},[109,67795,67796,67798,67801,67804,67806,67809],{"class":111,"line":119},[109,67797,53319],{"class":126},[109,67799,67800],{"class":52475},"form",[109,67802,67803],{"class":211}," action",[109,67805,130],{"class":126},[109,67807,67808],{"class":278},"\"http:\u002F\u002Fwww.itcast.cn\"",[109,67810,52482],{"class":126},[109,67812,67813,67815,67817,67819,67821,67824,67827,67829,67832],{"class":111,"line":140},[109,67814,52516],{"class":126},[109,67816,54996],{"class":52475},[109,67818,54999],{"class":211},[109,67820,130],{"class":126},[109,67822,67823],{"class":278},"\"submit\"",[109,67825,67826],{"class":211}," value",[109,67828,130],{"class":126},[109,67830,67831],{"class":278},"\"免费注册\"",[109,67833,52482],{"class":126},[109,67835,67836,67838,67840],{"class":111,"line":154},[109,67837,52516],{"class":126},[109,67839,52988],{"class":52475},[109,67841,52482],{"class":126},[109,67843,67844],{"class":111,"line":161},[109,67845,67846],{"class":126},"      const form = document.querySelector('form')\n",[109,67848,67849],{"class":111,"line":167},[109,67850,67851],{"class":126},"      form.addEventListener('submit', function (e) {\n",[109,67853,67854],{"class":111,"line":185},[109,67855,67856],{"class":126},"        e.preventDefault()\n",[109,67858,67859],{"class":111,"line":201},[109,67860,65990],{"class":126},[109,67862,67863,67865,67867],{"class":111,"line":206},[109,67864,52951],{"class":126},[109,67866,52988],{"class":52475},[109,67868,52482],{"class":126},[109,67870,67871,67873,67875],{"class":111,"line":218},[109,67872,53592],{"class":126},[109,67874,67800],{"class":52475},[109,67876,52482],{"class":126},[109,67878,67879,67881,67883],{"class":111,"line":223},[109,67880,52960],{"class":126},[109,67882,52975],{"class":52475},[109,67884,52482],{"class":126},[19,67886,67887],{},"点击不在跳转！！！",[51,67889,67891],{"id":67890},"_332-事件委托","3.3.2 事件委托",[19,67893,67894],{},[938,67895],{"alt":104,"src":67896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[99,67898,67900],{"className":51808,"code":67899,"language":51810,"meta":104,"style":104},"\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",[106,67901,67902,67912,67926,67930,67938,67952,67972,67984,67992,67996,68004,68012,68024,68036,68048,68060,68072,68085,68093,68101,68106,68125,68146,68151,68156,68161,68166,68175,68179,68189,68193,68198,68203,68217,68227,68231,68235,68243,68251,68255],{"__ignoreMap":104},[109,67903,67904,67906,67908,67910],{"class":111,"line":112},[109,67905,52472],{"class":126},[109,67907,52476],{"class":52475},[109,67909,52479],{"class":211},[109,67911,52482],{"class":126},[109,67913,67914,67916,67918,67920,67922,67924],{"class":111,"line":119},[109,67915,1320],{"class":126},[109,67917,51810],{"class":52475},[109,67919,52491],{"class":211},[109,67921,130],{"class":126},[109,67923,52496],{"class":278},[109,67925,52482],{"class":126},[109,67927,67928],{"class":111,"line":140},[109,67929,158],{"emptyLinePlaceholder":157},[109,67931,67932,67934,67936],{"class":111,"line":154},[109,67933,1320],{"class":126},[109,67935,52509],{"class":52475},[109,67937,52482],{"class":126},[109,67939,67940,67942,67944,67946,67948,67950],{"class":111,"line":161},[109,67941,53319],{"class":126},[109,67943,52519],{"class":52475},[109,67945,52522],{"class":211},[109,67947,130],{"class":126},[109,67949,52527],{"class":278},[109,67951,52482],{"class":126},[109,67953,67954,67956,67958,67960,67962,67964,67966,67968,67970],{"class":111,"line":167},[109,67955,53319],{"class":126},[109,67957,52519],{"class":52475},[109,67959,16093],{"class":211},[109,67961,130],{"class":126},[109,67963,52566],{"class":278},[109,67965,52546],{"class":211},[109,67967,130],{"class":126},[109,67969,52573],{"class":278},[109,67971,52482],{"class":126},[109,67973,67974,67976,67978,67980,67982],{"class":111,"line":185},[109,67975,53319],{"class":126},[109,67977,52582],{"class":52475},[109,67979,52585],{"class":126},[109,67981,52582],{"class":52475},[109,67983,52482],{"class":126},[109,67985,67986,67988,67990],{"class":111,"line":201},[109,67987,52960],{"class":126},[109,67989,52509],{"class":52475},[109,67991,52482],{"class":126},[109,67993,67994],{"class":111,"line":206},[109,67995,158],{"emptyLinePlaceholder":157},[109,67997,67998,68000,68002],{"class":111,"line":218},[109,67999,1320],{"class":126},[109,68001,52975],{"class":52475},[109,68003,52482],{"class":126},[109,68005,68006,68008,68010],{"class":111,"line":223},[109,68007,53319],{"class":126},[109,68009,27],{"class":52475},[109,68011,52482],{"class":126},[109,68013,68014,68016,68018,68020,68022],{"class":111,"line":229},[109,68015,52516],{"class":126},[109,68017,30],{"class":52475},[109,68019,55141],{"class":126},[109,68021,30],{"class":52475},[109,68023,52482],{"class":126},[109,68025,68026,68028,68030,68032,68034],{"class":111,"line":244},[109,68027,52516],{"class":126},[109,68029,30],{"class":52475},[109,68031,55160],{"class":126},[109,68033,30],{"class":52475},[109,68035,52482],{"class":126},[109,68037,68038,68040,68042,68044,68046],{"class":111,"line":258},[109,68039,52516],{"class":126},[109,68041,30],{"class":52475},[109,68043,55179],{"class":126},[109,68045,30],{"class":52475},[109,68047,52482],{"class":126},[109,68049,68050,68052,68054,68056,68058],{"class":111,"line":263},[109,68051,52516],{"class":126},[109,68053,30],{"class":52475},[109,68055,55198],{"class":126},[109,68057,30],{"class":52475},[109,68059,52482],{"class":126},[109,68061,68062,68064,68066,68068,68070],{"class":111,"line":269},[109,68063,52516],{"class":126},[109,68065,30],{"class":52475},[109,68067,55217],{"class":126},[109,68069,30],{"class":52475},[109,68071,52482],{"class":126},[109,68073,68074,68076,68078,68081,68083],{"class":111,"line":304},[109,68075,52516],{"class":126},[109,68077,19],{"class":52475},[109,68079,68080],{"class":126},">我不需要变色\u003C\u002F",[109,68082,19],{"class":52475},[109,68084,52482],{"class":126},[109,68086,68087,68089,68091],{"class":111,"line":331},[109,68088,53592],{"class":126},[109,68090,27],{"class":52475},[109,68092,52482],{"class":126},[109,68094,68095,68097,68099],{"class":111,"line":336},[109,68096,53319],{"class":126},[109,68098,52988],{"class":52475},[109,68100,52482],{"class":126},[109,68102,68103],{"class":111,"line":364},[109,68104,68105],{"class":115},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[109,68107,68108,68110,68112,68114,68116,68118,68120,68123],{"class":111,"line":391},[109,68109,619],{"class":122},[109,68111,62467],{"class":133},[109,68113,14737],{"class":122},[109,68115,55571],{"class":126},[109,68117,55574],{"class":211},[109,68119,714],{"class":126},[109,68121,68122],{"class":278},"'ul'",[109,68124,1330],{"class":126},[109,68126,68127,68130,68132,68134,68136,68138,68140,68142,68144],{"class":111,"line":396},[109,68128,68129],{"class":126},"    ul.",[109,68131,58988],{"class":211},[109,68133,714],{"class":126},[109,68135,58993],{"class":278},[109,68137,13608],{"class":126},[109,68139,55624],{"class":122},[109,68141,285],{"class":126},[109,68143,1615],{"class":6553},[109,68145,13615],{"class":126},[109,68147,68148],{"class":111,"line":402},[109,68149,68150],{"class":115},"      \u002F\u002F alert(1)\n",[109,68152,68153],{"class":111,"line":419},[109,68154,68155],{"class":115},"      \u002F\u002F e.target就是我们点击的对象\n",[109,68157,68158],{"class":111,"line":435},[109,68159,68160],{"class":115},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[109,68162,68163],{"class":111,"line":440},[109,68164,68165],{"class":115},"      \u002F\u002F e.target.style.color = 'red'\n",[109,68167,68168,68170,68172],{"class":111,"line":467},[109,68169,59419],{"class":126},[109,68171,59422],{"class":211},[109,68173,68174],{"class":126},"(e)\n",[109,68176,68177],{"class":111,"line":494},[109,68178,158],{"emptyLinePlaceholder":157},[109,68180,68181,68183,68186],{"class":111,"line":499},[109,68182,59419],{"class":126},[109,68184,68185],{"class":211},"dir",[109,68187,68188],{"class":126},"(e.target)\n",[109,68190,68191],{"class":111,"line":526},[109,68192,158],{"emptyLinePlaceholder":157},[109,68194,68195],{"class":111,"line":552},[109,68196,68197],{"class":115},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[109,68199,68200],{"class":111,"line":557},[109,68201,68202],{"class":115},"      \u002F\u002F 通过tagName来进行判断\n",[109,68204,68205,68207,68210,68212,68215],{"class":111,"line":584},[109,68206,55655],{"class":122},[109,68208,68209],{"class":126}," (e.target.tagName ",[109,68211,55661],{"class":122},[109,68213,68214],{"class":278}," 'LI'",[109,68216,13615],{"class":126},[109,68218,68219,68222,68224],{"class":111,"line":611},[109,68220,68221],{"class":126},"        e.target.style.color ",[109,68223,130],{"class":122},[109,68225,68226],{"class":278}," 'red'\n",[109,68228,68229],{"class":111,"line":616},[109,68230,53573],{"class":126},[109,68232,68233],{"class":111,"line":633},[109,68234,34636],{"class":126},[109,68236,68237,68239,68241],{"class":111,"line":649},[109,68238,53592],{"class":126},[109,68240,52988],{"class":52475},[109,68242,52482],{"class":126},[109,68244,68245,68247,68249],{"class":111,"line":676},[109,68246,52960],{"class":126},[109,68248,52975],{"class":52475},[109,68250,52482],{"class":126},[109,68252,68253],{"class":111,"line":703},[109,68254,158],{"emptyLinePlaceholder":157},[109,68256,68257,68259,68261],{"class":111,"line":708},[109,68258,52960],{"class":126},[109,68260,51810],{"class":52475},[109,68262,52482],{"class":126},[19,68264,68265],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68267,68268],{},"if(e.target.ragName==='P') {}",[19,68270,68271],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68273,68274],{},"通过事件委托的方式实现tab栏切换改造：",[19,68276,68277],{},"一定要记住自定义属性！！！！！！",[19,68279,68280],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68282,68283],{},"id是自定义的属性名",[19,68285,68286],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[99,68288,68290],{"className":51808,"code":68289,"language":51810,"meta":104,"style":104},"\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",[106,68291,68292,68302,68316,68320,68328,68342,68362,68382,68394,68402,68408,68418,68428,68432,68436,68442,68454,68466,68478,68494,68498,68502,68508,68520,68532,68544,68554,68564,68568,68572,68580,68592,68602,68614,68618,68622,68630,68640,68650,68660,68664,68668,68678,68692,68704,68708,68712,68724,68734,68750,68760,68764,68768,68782,68792,68802,68806,68810,68816,68830,68834,68838,68846,68856,68860,68864,68873,68883,68887,68895,68903,68907,68915,68929,68943,68955,68963,69002,69034,69066,69098,69130,69138,69146,69160,69194,69228,69262,69296,69330,69338,69346,69354,69359,69364,69383,69388,69408,69416,69421,69434,69455,69468,69472,69477,69482,69495,69515,69543,69547,69551,69555,69563,69571,69575],{"__ignoreMap":104},[109,68293,68294,68296,68298,68300],{"class":111,"line":112},[109,68295,52472],{"class":126},[109,68297,52476],{"class":52475},[109,68299,52479],{"class":211},[109,68301,52482],{"class":126},[109,68303,68304,68306,68308,68310,68312,68314],{"class":111,"line":119},[109,68305,1320],{"class":126},[109,68307,51810],{"class":52475},[109,68309,52491],{"class":211},[109,68311,130],{"class":126},[109,68313,52496],{"class":278},[109,68315,52482],{"class":126},[109,68317,68318],{"class":111,"line":140},[109,68319,158],{"emptyLinePlaceholder":157},[109,68321,68322,68324,68326],{"class":111,"line":154},[109,68323,1320],{"class":126},[109,68325,52509],{"class":52475},[109,68327,52482],{"class":126},[109,68329,68330,68332,68334,68336,68338,68340],{"class":111,"line":161},[109,68331,53319],{"class":126},[109,68333,52519],{"class":52475},[109,68335,52522],{"class":211},[109,68337,130],{"class":126},[109,68339,52527],{"class":278},[109,68341,60302],{"class":126},[109,68343,68344,68346,68348,68350,68352,68354,68356,68358,68360],{"class":111,"line":167},[109,68345,53319],{"class":126},[109,68347,52519],{"class":52475},[109,68349,52538],{"class":211},[109,68351,130],{"class":126},[109,68353,52543],{"class":278},[109,68355,52546],{"class":211},[109,68357,130],{"class":126},[109,68359,52551],{"class":278},[109,68361,60302],{"class":126},[109,68363,68364,68366,68368,68370,68372,68374,68376,68378,68380],{"class":111,"line":185},[109,68365,53319],{"class":126},[109,68367,52519],{"class":52475},[109,68369,16093],{"class":211},[109,68371,130],{"class":126},[109,68373,52566],{"class":278},[109,68375,52546],{"class":211},[109,68377,130],{"class":126},[109,68379,52573],{"class":278},[109,68381,60302],{"class":126},[109,68383,68384,68386,68388,68390,68392],{"class":111,"line":201},[109,68385,53319],{"class":126},[109,68387,52582],{"class":52475},[109,68389,64800],{"class":126},[109,68391,52582],{"class":52475},[109,68393,52482],{"class":126},[109,68395,68396,68398,68400],{"class":111,"line":206},[109,68397,53319],{"class":126},[109,68399,1467],{"class":52475},[109,68401,52482],{"class":126},[109,68403,68404,68406],{"class":111,"line":218},[109,68405,7733],{"class":52475},[109,68407,16745],{"class":126},[109,68409,68410,68412,68414,68416],{"class":111,"line":223},[109,68411,55881],{"class":133},[109,68413,52612],{"class":126},[109,68415,1314],{"class":133},[109,68417,137],{"class":126},[109,68419,68420,68422,68424,68426],{"class":111,"line":229},[109,68421,55870],{"class":133},[109,68423,52612],{"class":126},[109,68425,1314],{"class":133},[109,68427,137],{"class":126},[109,68429,68430],{"class":111,"line":244},[109,68431,1361],{"class":126},[109,68433,68434],{"class":111,"line":258},[109,68435,158],{"emptyLinePlaceholder":157},[109,68437,68438,68440],{"class":111,"line":263},[109,68439,64851],{"class":211},[109,68441,16745],{"class":126},[109,68443,68444,68446,68448,68450,68452],{"class":111,"line":269},[109,68445,55946],{"class":133},[109,68447,52612],{"class":126},[109,68449,64862],{"class":133},[109,68451,52667],{"class":122},[109,68453,137],{"class":126},[109,68455,68456,68458,68460,68462,68464],{"class":111,"line":304},[109,68457,55960],{"class":133},[109,68459,52612],{"class":126},[109,68461,64875],{"class":133},[109,68463,52667],{"class":122},[109,68465,137],{"class":126},[109,68467,68468,68470,68472,68474,68476],{"class":111,"line":331},[109,68469,55881],{"class":133},[109,68471,52612],{"class":126},[109,68473,2232],{"class":133},[109,68475,52667],{"class":122},[109,68477,137],{"class":126},[109,68479,68480,68482,68484,68486,68488,68490,68492],{"class":111,"line":336},[109,68481,63152],{"class":133},[109,68483,52612],{"class":126},[109,68485,1755],{"class":133},[109,68487,52667],{"class":122},[109,68489,52696],{"class":133},[109,68491,63419],{"class":133},[109,68493,137],{"class":126},[109,68495,68496],{"class":111,"line":364},[109,68497,1361],{"class":126},[109,68499,68500],{"class":111,"line":391},[109,68501,158],{"emptyLinePlaceholder":157},[109,68503,68504,68506],{"class":111,"line":396},[109,68505,64920],{"class":211},[109,68507,16745],{"class":126},[109,68509,68510,68512,68514,68516,68518],{"class":111,"line":402},[109,68511,55946],{"class":133},[109,68513,52612],{"class":126},[109,68515,1351],{"class":133},[109,68517,1865],{"class":122},[109,68519,137],{"class":126},[109,68521,68522,68524,68526,68528,68530],{"class":111,"line":419},[109,68523,55960],{"class":133},[109,68525,52612],{"class":126},[109,68527,2438],{"class":133},[109,68529,52667],{"class":122},[109,68531,137],{"class":126},[109,68533,68534,68536,68538,68540,68542],{"class":111,"line":435},[109,68535,58534],{"class":133},[109,68537,52612],{"class":126},[109,68539,2438],{"class":133},[109,68541,52667],{"class":122},[109,68543,137],{"class":126},[109,68545,68546,68548,68550,68552],{"class":111,"line":440},[109,68547,56184],{"class":133},[109,68549,52612],{"class":126},[109,68551,52652],{"class":133},[109,68553,137],{"class":126},[109,68555,68556,68558,68560,68562],{"class":111,"line":467},[109,68557,56195],{"class":133},[109,68559,52612],{"class":126},[109,68561,52843],{"class":133},[109,68563,137],{"class":126},[109,68565,68566],{"class":111,"line":494},[109,68567,1361],{"class":126},[109,68569,68570],{"class":111,"line":499},[109,68571,158],{"emptyLinePlaceholder":157},[109,68573,68574,68576,68578],{"class":111,"line":526},[109,68575,64920],{"class":211},[109,68577,64993],{"class":52475},[109,68579,16745],{"class":126},[109,68581,68582,68584,68586,68588,68590],{"class":111,"line":552},[109,68583,56097],{"class":133},[109,68585,52612],{"class":126},[109,68587,2332],{"class":133},[109,68589,52667],{"class":122},[109,68591,137],{"class":126},[109,68593,68594,68596,68598,68600],{"class":111,"line":557},[109,68595,63509],{"class":133},[109,68597,52612],{"class":126},[109,68599,65016],{"class":133},[109,68601,137],{"class":126},[109,68603,68604,68606,68608,68610,68612],{"class":111,"line":584},[109,68605,63175],{"class":133},[109,68607,52612],{"class":126},[109,68609,2232],{"class":133},[109,68611,52667],{"class":122},[109,68613,137],{"class":126},[109,68615,68616],{"class":111,"line":611},[109,68617,1361],{"class":126},[109,68619,68620],{"class":111,"line":616},[109,68621,158],{"emptyLinePlaceholder":157},[109,68623,68624,68626,68628],{"class":111,"line":633},[109,68625,64920],{"class":211},[109,68627,62467],{"class":52475},[109,68629,16745],{"class":126},[109,68631,68632,68634,68636,68638],{"class":111,"line":649},[109,68633,55907],{"class":133},[109,68635,52612],{"class":126},[109,68637,55912],{"class":133},[109,68639,137],{"class":126},[109,68641,68642,68644,68646,68648],{"class":111,"line":676},[109,68643,56184],{"class":133},[109,68645,52612],{"class":126},[109,68647,52652],{"class":133},[109,68649,137],{"class":126},[109,68651,68652,68654,68656,68658],{"class":111,"line":703},[109,68653,56195],{"class":133},[109,68655,52612],{"class":126},[109,68657,52755],{"class":133},[109,68659,137],{"class":126},[109,68661,68662],{"class":111,"line":708},[109,68663,1361],{"class":126},[109,68665,68666],{"class":111,"line":723},[109,68667,158],{"emptyLinePlaceholder":157},[109,68669,68670,68672,68674,68676],{"class":111,"line":728},[109,68671,64920],{"class":211},[109,68673,62467],{"class":52475},[109,68675,56250],{"class":52475},[109,68677,16745],{"class":126},[109,68679,68680,68682,68684,68686,68688,68690],{"class":111,"line":739},[109,68681,55881],{"class":133},[109,68683,52612],{"class":126},[109,68685,1314],{"class":133},[109,68687,10268],{"class":133},[109,68689,52667],{"class":122},[109,68691,137],{"class":126},[109,68693,68694,68696,68698,68700,68702],{"class":111,"line":9352},[109,68695,56097],{"class":133},[109,68697,52612],{"class":126},[109,68699,2081],{"class":133},[109,68701,52667],{"class":122},[109,68703,137],{"class":126},[109,68705,68706],{"class":111,"line":9364},[109,68707,1361],{"class":126},[109,68709,68710],{"class":111,"line":9376},[109,68711,158],{"emptyLinePlaceholder":157},[109,68713,68714,68716,68718,68720,68722],{"class":111,"line":11034},[109,68715,64920],{"class":211},[109,68717,62467],{"class":52475},[109,68719,56250],{"class":52475},[109,68721,2791],{"class":52475},[109,68723,16745],{"class":126},[109,68725,68726,68728,68730,68732],{"class":111,"line":11059},[109,68727,65145],{"class":133},[109,68729,52612],{"class":126},[109,68731,55912],{"class":133},[109,68733,137],{"class":126},[109,68735,68736,68738,68740,68742,68744,68746,68748],{"class":111,"line":11082},[109,68737,63407],{"class":133},[109,68739,52612],{"class":126},[109,68741,1618],{"class":133},[109,68743,52667],{"class":122},[109,68745,52696],{"class":133},[109,68747,65166],{"class":133},[109,68749,137],{"class":126},[109,68751,68752,68754,68756,68758],{"class":111,"line":11106},[109,68753,58591],{"class":133},[109,68755,52612],{"class":126},[109,68757,63544],{"class":133},[109,68759,137],{"class":126},[109,68761,68762],{"class":111,"line":11111},[109,68763,1361],{"class":126},[109,68765,68766],{"class":111,"line":11116},[109,68767,158],{"emptyLinePlaceholder":157},[109,68769,68770,68772,68774,68776,68778,68780],{"class":111,"line":11121},[109,68771,64920],{"class":211},[109,68773,62467],{"class":52475},[109,68775,56250],{"class":52475},[109,68777,2791],{"class":52475},[109,68779,65199],{"class":211},[109,68781,16745],{"class":126},[109,68783,68784,68786,68788,68790],{"class":111,"line":11130},[109,68785,62966],{"class":133},[109,68787,52612],{"class":126},[109,68789,65210],{"class":133},[109,68791,137],{"class":126},[109,68793,68794,68796,68798,68800],{"class":111,"line":11135},[109,68795,58591],{"class":133},[109,68797,52612],{"class":126},[109,68799,65210],{"class":133},[109,68801,137],{"class":126},[109,68803,68804],{"class":111,"line":11141},[109,68805,1361],{"class":126},[109,68807,68808],{"class":111,"line":11162},[109,68809,158],{"emptyLinePlaceholder":157},[109,68811,68812,68814],{"class":111,"line":11168},[109,68813,65235],{"class":211},[109,68815,16745],{"class":126},[109,68817,68818,68820,68822,68824,68826,68828],{"class":111,"line":11182},[109,68819,55870],{"class":133},[109,68821,52612],{"class":126},[109,68823,1314],{"class":133},[109,68825,65248],{"class":133},[109,68827,52667],{"class":122},[109,68829,137],{"class":126},[109,68831,68832],{"class":111,"line":11188},[109,68833,1361],{"class":126},[109,68835,68836],{"class":111,"line":11215},[109,68837,158],{"emptyLinePlaceholder":157},[109,68839,68840,68842,68844],{"class":111,"line":11224},[109,68841,65235],{"class":211},[109,68843,63349],{"class":211},[109,68845,16745],{"class":126},[109,68847,68848,68850,68852,68854],{"class":111,"line":11230},[109,68849,56184],{"class":133},[109,68851,52612],{"class":126},[109,68853,55912],{"class":133},[109,68855,137],{"class":126},[109,68857,68858],{"class":111,"line":11238},[109,68859,1361],{"class":126},[109,68861,68862],{"class":111,"line":11243},[109,68863,158],{"emptyLinePlaceholder":157},[109,68865,68866,68868,68871],{"class":111,"line":17777},[109,68867,65235],{"class":211},[109,68869,68870],{"class":211}," .active",[109,68872,16745],{"class":126},[109,68874,68875,68877,68879,68881],{"class":111,"line":17783},[109,68876,56184],{"class":133},[109,68878,52612],{"class":126},[109,68880,62044],{"class":133},[109,68882,137],{"class":126},[109,68884,68885],{"class":111,"line":17806},[109,68886,1361],{"class":126},[109,68888,68889,68891,68893],{"class":111,"line":17812},[109,68890,53592],{"class":126},[109,68892,1467],{"class":52475},[109,68894,52482],{"class":126},[109,68896,68897,68899,68901],{"class":111,"line":17835},[109,68898,52960],{"class":126},[109,68900,52509],{"class":52475},[109,68902,52482],{"class":126},[109,68904,68905],{"class":111,"line":17849},[109,68906,158],{"emptyLinePlaceholder":157},[109,68908,68909,68911,68913],{"class":111,"line":17869},[109,68910,1320],{"class":126},[109,68912,52975],{"class":52475},[109,68914,52482],{"class":126},[109,68916,68917,68919,68921,68923,68925,68927],{"class":111,"line":17875},[109,68918,53319],{"class":126},[109,68920,52786],{"class":52475},[109,68922,54661],{"class":211},[109,68924,130],{"class":126},[109,68926,65350],{"class":278},[109,68928,52482],{"class":126},[109,68930,68931,68933,68935,68937,68939,68941],{"class":111,"line":17886},[109,68932,52516],{"class":126},[109,68934,52786],{"class":52475},[109,68936,54661],{"class":211},[109,68938,130],{"class":126},[109,68940,65365],{"class":278},[109,68942,52482],{"class":126},[109,68944,68945,68947,68949,68951,68953],{"class":111,"line":17909},[109,68946,56409],{"class":126},[109,68948,51],{"class":52475},[109,68950,65376],{"class":126},[109,68952,51],{"class":52475},[109,68954,52482],{"class":126},[109,68956,68957,68959,68961],{"class":111,"line":17931},[109,68958,56409],{"class":126},[109,68960,27],{"class":52475},[109,68962,52482],{"class":126},[109,68964,68965,68967,68969,68971,68973,68975,68977,68979,68981,68983,68985,68987,68989,68992,68994,68996,68998,69000],{"class":111,"line":17936},[109,68966,56477],{"class":126},[109,68968,30],{"class":52475},[109,68970,62227],{"class":126},[109,68972,1776],{"class":52475},[109,68974,54661],{"class":211},[109,68976,130],{"class":126},[109,68978,60881],{"class":278},[109,68980,62232],{"class":211},[109,68982,130],{"class":126},[109,68984,65411],{"class":278},[109,68986,55126],{"class":211},[109,68988,130],{"class":126},[109,68990,68991],{"class":278},"\"0\"",[109,68993,65414],{"class":126},[109,68995,1776],{"class":52475},[109,68997,56489],{"class":126},[109,68999,30],{"class":52475},[109,69001,52482],{"class":126},[109,69003,69004,69006,69008,69010,69012,69014,69016,69018,69020,69022,69024,69026,69028,69030,69032],{"class":111,"line":17942},[109,69005,56477],{"class":126},[109,69007,30],{"class":52475},[109,69009,62227],{"class":126},[109,69011,1776],{"class":52475},[109,69013,62232],{"class":211},[109,69015,130],{"class":126},[109,69017,65411],{"class":278},[109,69019,55126],{"class":211},[109,69021,130],{"class":126},[109,69023,5021],{"class":278},[109,69025,65441],{"class":126},[109,69027,1776],{"class":52475},[109,69029,56489],{"class":126},[109,69031,30],{"class":52475},[109,69033,52482],{"class":126},[109,69035,69036,69038,69040,69042,69044,69046,69048,69050,69052,69054,69056,69058,69060,69062,69064],{"class":111,"line":17956},[109,69037,56477],{"class":126},[109,69039,30],{"class":52475},[109,69041,62227],{"class":126},[109,69043,1776],{"class":52475},[109,69045,62232],{"class":211},[109,69047,130],{"class":126},[109,69049,65411],{"class":278},[109,69051,55126],{"class":211},[109,69053,130],{"class":126},[109,69055,5044],{"class":278},[109,69057,65468],{"class":126},[109,69059,1776],{"class":52475},[109,69061,56489],{"class":126},[109,69063,30],{"class":52475},[109,69065,52482],{"class":126},[109,69067,69068,69070,69072,69074,69076,69078,69080,69082,69084,69086,69088,69090,69092,69094,69096],{"class":111,"line":17969},[109,69069,56477],{"class":126},[109,69071,30],{"class":52475},[109,69073,62227],{"class":126},[109,69075,1776],{"class":52475},[109,69077,62232],{"class":211},[109,69079,130],{"class":126},[109,69081,65411],{"class":278},[109,69083,55126],{"class":211},[109,69085,130],{"class":126},[109,69087,5057],{"class":278},[109,69089,65495],{"class":126},[109,69091,1776],{"class":52475},[109,69093,56489],{"class":126},[109,69095,30],{"class":52475},[109,69097,52482],{"class":126},[109,69099,69100,69102,69104,69106,69108,69110,69112,69114,69116,69118,69120,69122,69124,69126,69128],{"class":111,"line":17974},[109,69101,56477],{"class":126},[109,69103,30],{"class":52475},[109,69105,62227],{"class":126},[109,69107,1776],{"class":52475},[109,69109,62232],{"class":211},[109,69111,130],{"class":126},[109,69113,65411],{"class":278},[109,69115,55126],{"class":211},[109,69117,130],{"class":126},[109,69119,5070],{"class":278},[109,69121,65522],{"class":126},[109,69123,1776],{"class":52475},[109,69125,56489],{"class":126},[109,69127,30],{"class":52475},[109,69129,52482],{"class":126},[109,69131,69132,69134,69136],{"class":111,"line":17988},[109,69133,56582],{"class":126},[109,69135,27],{"class":52475},[109,69137,52482],{"class":126},[109,69139,69140,69142,69144],{"class":111,"line":17993},[109,69141,52951],{"class":126},[109,69143,52786],{"class":52475},[109,69145,52482],{"class":126},[109,69147,69148,69150,69152,69154,69156,69158],{"class":111,"line":17999},[109,69149,52516],{"class":126},[109,69151,52786],{"class":52475},[109,69153,54661],{"class":211},[109,69155,130],{"class":126},[109,69157,65559],{"class":278},[109,69159,52482],{"class":126},[109,69161,69162,69164,69166,69168,69170,69172,69174,69176,69178,69180,69182,69184,69186,69188,69190,69192],{"class":111,"line":18004},[109,69163,56409],{"class":126},[109,69165,52786],{"class":52475},[109,69167,54661],{"class":211},[109,69169,130],{"class":126},[109,69171,65574],{"class":278},[109,69173,62227],{"class":126},[109,69175,938],{"class":52475},[109,69177,56414],{"class":211},[109,69179,130],{"class":126},[109,69181,65585],{"class":278},[109,69183,56422],{"class":211},[109,69185,130],{"class":126},[109,69187,8978],{"class":278},[109,69189,65594],{"class":126},[109,69191,52786],{"class":52475},[109,69193,52482],{"class":126},[109,69195,69196,69198,69200,69202,69204,69206,69208,69210,69212,69214,69216,69218,69220,69222,69224,69226],{"class":111,"line":18018},[109,69197,56409],{"class":126},[109,69199,52786],{"class":52475},[109,69201,54661],{"class":211},[109,69203,130],{"class":126},[109,69205,63798],{"class":278},[109,69207,62227],{"class":126},[109,69209,938],{"class":52475},[109,69211,56414],{"class":211},[109,69213,130],{"class":126},[109,69215,65621],{"class":278},[109,69217,56422],{"class":211},[109,69219,130],{"class":126},[109,69221,8978],{"class":278},[109,69223,65594],{"class":126},[109,69225,52786],{"class":52475},[109,69227,52482],{"class":126},[109,69229,69230,69232,69234,69236,69238,69240,69242,69244,69246,69248,69250,69252,69254,69256,69258,69260],{"class":111,"line":18023},[109,69231,56409],{"class":126},[109,69233,52786],{"class":52475},[109,69235,54661],{"class":211},[109,69237,130],{"class":126},[109,69239,63798],{"class":278},[109,69241,62227],{"class":126},[109,69243,938],{"class":52475},[109,69245,56414],{"class":211},[109,69247,130],{"class":126},[109,69249,65656],{"class":278},[109,69251,56422],{"class":211},[109,69253,130],{"class":126},[109,69255,8978],{"class":278},[109,69257,65594],{"class":126},[109,69259,52786],{"class":52475},[109,69261,52482],{"class":126},[109,69263,69264,69266,69268,69270,69272,69274,69276,69278,69280,69282,69284,69286,69288,69290,69292,69294],{"class":111,"line":18028},[109,69265,56409],{"class":126},[109,69267,52786],{"class":52475},[109,69269,54661],{"class":211},[109,69271,130],{"class":126},[109,69273,63798],{"class":278},[109,69275,62227],{"class":126},[109,69277,938],{"class":52475},[109,69279,56414],{"class":211},[109,69281,130],{"class":126},[109,69283,65691],{"class":278},[109,69285,56422],{"class":211},[109,69287,130],{"class":126},[109,69289,8978],{"class":278},[109,69291,65594],{"class":126},[109,69293,52786],{"class":52475},[109,69295,52482],{"class":126},[109,69297,69298,69300,69302,69304,69306,69308,69310,69312,69314,69316,69318,69320,69322,69324,69326,69328],{"class":111,"line":18042},[109,69299,56409],{"class":126},[109,69301,52786],{"class":52475},[109,69303,54661],{"class":211},[109,69305,130],{"class":126},[109,69307,63798],{"class":278},[109,69309,62227],{"class":126},[109,69311,938],{"class":52475},[109,69313,56414],{"class":211},[109,69315,130],{"class":126},[109,69317,65726],{"class":278},[109,69319,56422],{"class":211},[109,69321,130],{"class":126},[109,69323,8978],{"class":278},[109,69325,65594],{"class":126},[109,69327,52786],{"class":52475},[109,69329,52482],{"class":126},[109,69331,69332,69334,69336],{"class":111,"line":18054},[109,69333,52951],{"class":126},[109,69335,52786],{"class":52475},[109,69337,52482],{"class":126},[109,69339,69340,69342,69344],{"class":111,"line":18059},[109,69341,53592],{"class":126},[109,69343,52786],{"class":52475},[109,69345,52482],{"class":126},[109,69347,69348,69350,69352],{"class":111,"line":18072},[109,69349,53319],{"class":126},[109,69351,52988],{"class":52475},[109,69353,52482],{"class":126},[109,69355,69356],{"class":111,"line":18077},[109,69357,69358],{"class":115},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[109,69360,69361],{"class":111,"line":18082},[109,69362,69363],{"class":115},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[109,69365,69366,69368,69370,69372,69374,69376,69378,69381],{"class":111,"line":18087},[109,69367,619],{"class":122},[109,69369,62467],{"class":133},[109,69371,14737],{"class":122},[109,69373,55571],{"class":126},[109,69375,55574],{"class":211},[109,69377,714],{"class":126},[109,69379,69380],{"class":278},"'.tab-nav ul'",[109,69382,1330],{"class":126},[109,69384,69385],{"class":111,"line":18100},[109,69386,69387],{"class":115},"    \u002F\u002F 2.添加事件\n",[109,69389,69390,69392,69394,69396,69398,69400,69402,69404,69406],{"class":111,"line":18105},[109,69391,68129],{"class":126},[109,69393,58988],{"class":211},[109,69395,714],{"class":126},[109,69397,58993],{"class":278},[109,69399,13608],{"class":126},[109,69401,55624],{"class":122},[109,69403,285],{"class":126},[109,69405,1615],{"class":6553},[109,69407,13615],{"class":126},[109,69409,69410,69412,69414],{"class":111,"line":33808},[109,69411,59419],{"class":126},[109,69413,68185],{"class":211},[109,69415,68188],{"class":126},[109,69417,69418],{"class":111,"line":33814},[109,69419,69420],{"class":115},"      \u002F\u002Fe.targer是我们点击的对象\n",[109,69422,69423,69425,69427,69429,69432],{"class":111,"line":33820},[109,69424,55655],{"class":122},[109,69426,68209],{"class":126},[109,69428,55661],{"class":122},[109,69430,69431],{"class":278}," 'A'",[109,69433,13615],{"class":126},[109,69435,69436,69438,69440,69442,69445,69447,69449,69451,69453],{"class":111,"line":33826},[109,69437,53100],{"class":126},[109,69439,55574],{"class":211},[109,69441,714],{"class":126},[109,69443,69444],{"class":278},"'.active'",[109,69446,58178],{"class":126},[109,69448,58181],{"class":211},[109,69450,714],{"class":126},[109,69452,65889],{"class":278},[109,69454,1330],{"class":126},[109,69456,69457,69460,69462,69464,69466],{"class":111,"line":33832},[109,69458,69459],{"class":126},"        e.target.classList.",[109,69461,6671],{"class":211},[109,69463,714],{"class":126},[109,69465,65889],{"class":278},[109,69467,1330],{"class":126},[109,69469,69470],{"class":111,"line":33843},[109,69471,158],{"emptyLinePlaceholder":157},[109,69473,69474],{"class":111,"line":33849},[109,69475,69476],{"class":115},"        \u002F\u002F 下面大盒子模块\n",[109,69478,69479],{"class":111,"line":33869},[109,69480,69481],{"class":115},"        \u002F\u002F console.log(e.target.dataset.id)\n",[109,69483,69484,69486,69488,69490,69492],{"class":111,"line":33875},[109,69485,62445],{"class":122},[109,69487,1309],{"class":133},[109,69489,14737],{"class":122},[109,69491,46741],{"class":122},[109,69493,69494],{"class":126},"e.target.dataset.id\n",[109,69496,69497,69499,69501,69503,69505,69507,69509,69511,69513],{"class":111,"line":33886},[109,69498,53100],{"class":126},[109,69500,55574],{"class":211},[109,69502,714],{"class":126},[109,69504,65937],{"class":278},[109,69506,58178],{"class":126},[109,69508,58181],{"class":211},[109,69510,714],{"class":126},[109,69512,65889],{"class":278},[109,69514,1330],{"class":126},[109,69516,69517,69519,69521,69523,69525,69527,69529,69531,69533,69535,69537,69539,69541],{"class":111,"line":33892},[109,69518,53100],{"class":126},[109,69520,55574],{"class":211},[109,69522,714],{"class":126},[109,69524,65963],{"class":278},[109,69526,1345],{"class":126},[109,69528,46741],{"class":122},[109,69530,26293],{"class":133},[109,69532,58207],{"class":278},[109,69534,58178],{"class":126},[109,69536,6671],{"class":211},[109,69538,714],{"class":126},[109,69540,65889],{"class":278},[109,69542,1330],{"class":126},[109,69544,69545],{"class":111,"line":33898},[109,69546,158],{"emptyLinePlaceholder":157},[109,69548,69549],{"class":111,"line":33904},[109,69550,53573],{"class":126},[109,69552,69553],{"class":111,"line":33910},[109,69554,34636],{"class":126},[109,69556,69557,69559,69561],{"class":111,"line":33916},[109,69558,53592],{"class":126},[109,69560,52988],{"class":52475},[109,69562,52482],{"class":126},[109,69564,69565,69567,69569],{"class":111,"line":33922},[109,69566,52960],{"class":126},[109,69568,52975],{"class":52475},[109,69570,52482],{"class":126},[109,69572,69573],{"class":111,"line":33928},[109,69574,158],{"emptyLinePlaceholder":157},[109,69576,69577,69579,69581],{"class":111,"line":33948},[109,69578,52960],{"class":126},[109,69580,51810],{"class":52475},[109,69582,52482],{"class":126},[51,69584,69586],{"id":69585},"_333-页面加载事件","3.3.3 页面加载事件",[765,69588,69589],{},[30,69590,69591],{},"load",[19,69593,69594],{},[938,69595],{"alt":104,"src":69596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69598,69599],{},"window代表整个窗口，比document还要大",[19,69601,69602],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69604,69605],{},"img.addEventListener('load', function () {",[19,69607,69608],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69610,53639],{},[765,69612,69613],{"start":119},[30,69614,69615],{},"DOMContentLoaded",[19,69617,69618],{},[938,69619],{"alt":104,"src":69620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69622,69623],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[51,69625,69627],{"id":69626},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69629,69630],{},[938,69631],{"alt":104,"src":69632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69634,69635],{},[938,69636],{"alt":104,"src":69637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69639,69640],{},[938,69641],{"alt":104,"src":69642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69644,69645],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69647,69648],{},"获得的是数字型数据，不带单位",[19,69650,69651],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69653,69654],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69656,69657],{},"它是通过document.documentElement来获取",[19,69659,69660],{},[938,69661],{"alt":104,"src":69662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69664,69665],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[51,69667,69669],{"id":69668},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69671,69672],{},[938,69673],{"alt":104,"src":69674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69676,69677],{},[938,69678],{"alt":104,"src":69679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[51,69681,69683],{"id":69682},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69685,69686],{},[938,69687],{"alt":104,"src":69688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69690,69691],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69693,69694],{},[938,69695],{"alt":104,"src":69696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69698,69699],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69701,69702],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69704,69705],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69707,69708],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69710,69711],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69713,69714],{},[938,69715],{"alt":104,"src":69716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69718,69719],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69721,69722],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69724,69725],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69727,69728],{},"e.pageX-box.getBoundingClientRect()",[51,69730,69732],{"id":69731},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69734,69735],{},[938,69736],{"alt":104,"src":69737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69739,69740],{},"这个是相对于视口来说的，它是个方法，不是属性值",[51,69742,69744],{"id":69743},"_338-总结","3.3.8 总结",[19,69746,69747],{},[938,69748],{"alt":104,"src":69749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69751,69752],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69754,69755],{},"修改盒子的宽高只能通过width和height来实现",[51,69757,69759],{"id":69758},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[99,69761,69763],{"className":51808,"code":69762,"language":51810,"meta":104,"style":104},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[106,69764,69765,69770,69775,69780,69785],{"__ignoreMap":104},[109,69766,69767],{"class":111,"line":112},[109,69768,69769],{"class":126},"\u002F* 页面滑动 *\u002F\n",[109,69771,69772],{"class":111,"line":119},[109,69773,69774],{"class":126},"html {\n",[109,69776,69777],{"class":111,"line":140},[109,69778,69779],{"class":126},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[109,69781,69782],{"class":111,"line":154},[109,69783,69784],{"class":126},"  scroll-behavior: smooth;\n",[109,69786,69787],{"class":111,"line":161},[109,69788,742],{"class":126},[19,69790,69791],{},"默认是auto",[51,69793,69795],{"id":69794},"_3310-日期对象","3.3.10 日期对象",[23171,69797,69799],{"id":69798},"_33101-实例化","3.3.10.1 实例化",[19,69801,69802],{},[938,69803],{"alt":104,"src":69804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23171,69806,69808],{"id":69807},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69810,69811],{},[938,69812],{"alt":104,"src":69813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69815,69816],{},"月份+1",[19,69818,69819],{},"老外认为第一天为0，星期天",[19,69821,69822],{},"方法使用的时候必须要跟括号",[19,69824,69825],{},"快速获得日期",[19,69827,69828],{},"\u002F\u002F 得到年月日",[19,69830,69831],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69833,69834],{},"\u002F\u002F 得到当地日期",[19,69836,69837],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69839,69840],{},"\u002F\u002F 得到当地时间",[19,69842,69843],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69845,69846],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69848,69849],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52988,69851,69852],{},"\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,69854,69855],{},"学会去封装函数！",[23171,69857,69859],{"id":69858},"_33103-时间戳","3.3.10.3 时间戳",[19,69861,69862],{},[938,69863],{"alt":104,"src":69864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69866,69867],{},[938,69868],{"alt":104,"src":69869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69871,69872],{},"三种方法记住一个就可以",[51,69874,69876],{"id":69875},"_3311-节点操作","3.3.11 节点操作",[23171,69878,69880],{"id":69879},"_33111-dom节点","3.3.11.1 DOM节点",[19,69882,69883],{},[938,69884],{"alt":104,"src":69885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69887,69888],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23171,69890,69892],{"id":69891},"_33112-查找节点","3.3.11.2 查找节点",[19,69894,69895],{},"前边的document.querySelector()是获取的元素",[19,69897,69898],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69900,69901],{},[938,69902],{"alt":104,"src":69903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[765,69905,69906],{},[30,69907,69908],{},"父节点",[19,69910,69911],{},[938,69912],{"alt":104,"src":69913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[765,69915,69916],{"start":119},[30,69917,69918],{},"子节点",[19,69920,69921],{},[938,69922],{"alt":104,"src":69923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69925,69926],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69928,69929],{},"children获得的是伪数组，是亲儿子",[765,69931,69932],{"start":140},[30,69933,69934],{},"兄弟节点",[19,69936,69937],{},[938,69938],{"alt":104,"src":69939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23171,69941,69943],{"id":69942},"_33113-增加节点","3.3.11.3 增加节点",[19,69945,69946],{},[938,69947],{"alt":104,"src":69948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69950,69951],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69953,69954],{},[938,69955],{"alt":104,"src":69956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69958,69959],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69961,69962],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69964,69965],{},"例：",[52988,69967,69968],{},"\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,69970,69971],{},[938,69972],{"alt":104,"src":69973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69975,69976],{},"false只克隆标签，里边的内容不会克隆过来",[99,69978,69980],{"className":51808,"code":69979,"language":51810,"meta":104,"style":104},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[106,69981,69982],{"__ignoreMap":104},[109,69983,69984],{"class":111,"line":112},[109,69985,69979],{"class":126},[23171,69987,69989],{"id":69988},"_33114-删除节点","3.3.11.4 删除节点",[19,69991,69992],{},[938,69993],{"alt":104,"src":69994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69996,69997],{},"父亲删儿子",[19,69999,70000],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[51,70002,70004],{"id":70003},"_3312-m端事件","3.3.12 M端事件",[19,70006,70007],{},"M端就是移动端",[19,70009,70010],{},[938,70011],{"alt":104,"src":70012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[51,70014,70016],{"id":70015},"_3313-插件","3.3.13 插件",[19,70018,70019],{},"要熟悉官网！！！",[19,70021,70022],{},[1776,70023,70024],{"href":70024,"rel":70025},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25039],[19,70027,70028],{},[1776,70029,70030],{"href":70030,"rel":70031},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25039],[51,70033,70035],{"id":70034},"_3314-学生信息表","3.3.14 学生信息表",[765,70037,70038,70041,70044,70047,70050,70053,70056,70059],{},[30,70039,70040],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[30,70042,70043],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[30,70045,70046],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[30,70048,70049],{},"用好表单元素自带的属性，value,name等",[30,70051,70052],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[30,70054,70055],{},"不要忘记事件对象",[30,70057,70058],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[30,70060,70061],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70063,70064],{},"结构：",[99,70066,70068],{"className":51808,"code":70067,"language":51810,"meta":104,"style":104},"\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",[106,70069,70070,70080,70094,70098,70106,70120,70140,70161,70174,70198,70206,70210,70218,70231,70252,70280,70308,70313,70335,70355,70374,70382,70410,70432,70452,70472,70492,70512,70532,70540,70560,70568,70572,70585,70593,70601,70609,70622,70635,70648,70661,70674,70687,70700,70708,70716,70724,70729,70734,70739,70744,70749,70754,70759,70764,70769,70774,70779,70784,70789,70797,70805,70813,70817,70837,70856,70876,70896,70916,70936,70940,70945,70965,70970,70980,70985,70990,71010,71032,71037,71047,71051,71055,71060,71065,71094,71108,71123,71127,71131,71135,71140,71151,71164,71169,71174,71179,71184,71189,71193,71198,71203,71212,71217,71222,71234,71239,71246,71250,71255,71265,71270,71280,71285,71313,71334,71344,71364,71382,71399,71416,71433,71450,71454,71464,71469,71474,71479,71490,71494,71498,71502,71507,71512,71533,71545,71550,71555,71560,71574,71579,71586,71590,71594,71602,71606,71614,71618],{"__ignoreMap":104},[109,70071,70072,70074,70076,70078],{"class":111,"line":112},[109,70073,52472],{"class":126},[109,70075,52476],{"class":52475},[109,70077,52479],{"class":211},[109,70079,52482],{"class":126},[109,70081,70082,70084,70086,70088,70090,70092],{"class":111,"line":119},[109,70083,1320],{"class":126},[109,70085,51810],{"class":52475},[109,70087,52491],{"class":211},[109,70089,130],{"class":126},[109,70091,52496],{"class":278},[109,70093,52482],{"class":126},[109,70095,70096],{"class":111,"line":140},[109,70097,158],{"emptyLinePlaceholder":157},[109,70099,70100,70102,70104],{"class":111,"line":154},[109,70101,1320],{"class":126},[109,70103,52509],{"class":52475},[109,70105,52482],{"class":126},[109,70107,70108,70110,70112,70114,70116,70118],{"class":111,"line":161},[109,70109,53319],{"class":126},[109,70111,52519],{"class":52475},[109,70113,52522],{"class":211},[109,70115,130],{"class":126},[109,70117,52527],{"class":278},[109,70119,60302],{"class":126},[109,70121,70122,70124,70126,70128,70130,70132,70134,70136,70138],{"class":111,"line":167},[109,70123,53319],{"class":126},[109,70125,52519],{"class":52475},[109,70127,16093],{"class":211},[109,70129,130],{"class":126},[109,70131,52566],{"class":278},[109,70133,52546],{"class":211},[109,70135,130],{"class":126},[109,70137,52573],{"class":278},[109,70139,60302],{"class":126},[109,70141,70142,70144,70146,70148,70150,70152,70154,70156,70159],{"class":111,"line":185},[109,70143,53319],{"class":126},[109,70145,52519],{"class":52475},[109,70147,52538],{"class":211},[109,70149,130],{"class":126},[109,70151,52543],{"class":278},[109,70153,52546],{"class":211},[109,70155,130],{"class":126},[109,70157,70158],{"class":278},"\"ie=edge\"",[109,70160,60302],{"class":126},[109,70162,70163,70165,70167,70170,70172],{"class":111,"line":201},[109,70164,53319],{"class":126},[109,70166,52582],{"class":52475},[109,70168,70169],{"class":126},">学生信息管理\u003C\u002F",[109,70171,52582],{"class":52475},[109,70173,52482],{"class":126},[109,70175,70176,70178,70181,70184,70186,70189,70191,70193,70196],{"class":111,"line":206},[109,70177,53319],{"class":126},[109,70179,70180],{"class":52475},"link",[109,70182,70183],{"class":211}," rel",[109,70185,130],{"class":126},[109,70187,70188],{"class":278},"\"stylesheet\"",[109,70190,62232],{"class":211},[109,70192,130],{"class":126},[109,70194,70195],{"class":278},"\"css\u002Findex.css\"",[109,70197,60302],{"class":126},[109,70199,70200,70202,70204],{"class":111,"line":218},[109,70201,52960],{"class":126},[109,70203,52509],{"class":52475},[109,70205,52482],{"class":126},[109,70207,70208],{"class":111,"line":223},[109,70209,158],{"emptyLinePlaceholder":157},[109,70211,70212,70214,70216],{"class":111,"line":229},[109,70213,1320],{"class":126},[109,70215,52975],{"class":52475},[109,70217,52482],{"class":126},[109,70219,70220,70222,70224,70227,70229],{"class":111,"line":244},[109,70221,53319],{"class":126},[109,70223,10],{"class":52475},[109,70225,70226],{"class":126},">新增学员\u003C\u002F",[109,70228,10],{"class":52475},[109,70230,52482],{"class":126},[109,70232,70233,70235,70237,70239,70241,70243,70246,70248,70250],{"class":111,"line":258},[109,70234,53319],{"class":126},[109,70236,67800],{"class":52475},[109,70238,54661],{"class":211},[109,70240,130],{"class":126},[109,70242,63839],{"class":278},[109,70244,70245],{"class":211}," autocomplete",[109,70247,130],{"class":126},[109,70249,32951],{"class":278},[109,70251,52482],{"class":126},[109,70253,70254,70257,70259,70261,70263,70265,70267,70269,70272,70274,70276,70278],{"class":111,"line":263},[109,70255,70256],{"class":126},"    姓名：\u003C",[109,70258,54996],{"class":52475},[109,70260,54999],{"class":211},[109,70262,130],{"class":126},[109,70264,63874],{"class":278},[109,70266,54661],{"class":211},[109,70268,130],{"class":126},[109,70270,70271],{"class":278},"\"uname\"",[109,70273,16093],{"class":211},[109,70275,130],{"class":126},[109,70277,70271],{"class":278},[109,70279,60302],{"class":126},[109,70281,70282,70285,70287,70289,70291,70293,70295,70297,70300,70302,70304,70306],{"class":111,"line":269},[109,70283,70284],{"class":126},"    年龄：\u003C",[109,70286,54996],{"class":52475},[109,70288,54999],{"class":211},[109,70290,130],{"class":126},[109,70292,63874],{"class":278},[109,70294,54661],{"class":211},[109,70296,130],{"class":126},[109,70298,70299],{"class":278},"\"age\"",[109,70301,16093],{"class":211},[109,70303,130],{"class":126},[109,70305,70299],{"class":278},[109,70307,60302],{"class":126},[109,70309,70310],{"class":111,"line":304},[109,70311,70312],{"class":126},"    性别:\n",[109,70314,70315,70317,70320,70322,70324,70327,70329,70331,70333],{"class":111,"line":331},[109,70316,52516],{"class":126},[109,70318,70319],{"class":52475},"select",[109,70321,16093],{"class":211},[109,70323,130],{"class":126},[109,70325,70326],{"class":278},"\"gender\"",[109,70328,54661],{"class":211},[109,70330,130],{"class":126},[109,70332,70326],{"class":278},[109,70334,52482],{"class":126},[109,70336,70337,70339,70342,70344,70346,70348,70351,70353],{"class":111,"line":336},[109,70338,56409],{"class":126},[109,70340,70341],{"class":52475},"option",[109,70343,67826],{"class":211},[109,70345,130],{"class":126},[109,70347,11279],{"class":278},[109,70349,70350],{"class":126},">男\u003C\u002F",[109,70352,70341],{"class":52475},[109,70354,52482],{"class":126},[109,70356,70357,70359,70361,70363,70365,70367,70370,70372],{"class":111,"line":364},[109,70358,56409],{"class":126},[109,70360,70341],{"class":52475},[109,70362,67826],{"class":211},[109,70364,130],{"class":126},[109,70366,11348],{"class":278},[109,70368,70369],{"class":126},">女\u003C\u002F",[109,70371,70341],{"class":52475},[109,70373,52482],{"class":126},[109,70375,70376,70378,70380],{"class":111,"line":391},[109,70377,52951],{"class":126},[109,70379,70319],{"class":52475},[109,70381,52482],{"class":126},[109,70383,70384,70387,70389,70391,70393,70395,70397,70399,70402,70404,70406,70408],{"class":111,"line":396},[109,70385,70386],{"class":126},"    薪资：\u003C",[109,70388,54996],{"class":52475},[109,70390,54999],{"class":211},[109,70392,130],{"class":126},[109,70394,63874],{"class":278},[109,70396,54661],{"class":211},[109,70398,130],{"class":126},[109,70400,70401],{"class":278},"\"salary\"",[109,70403,16093],{"class":211},[109,70405,130],{"class":126},[109,70407,70401],{"class":278},[109,70409,60302],{"class":126},[109,70411,70412,70415,70417,70419,70421,70424,70426,70428,70430],{"class":111,"line":402},[109,70413,70414],{"class":126},"    就业城市：\u003C",[109,70416,70319],{"class":52475},[109,70418,16093],{"class":211},[109,70420,130],{"class":126},[109,70422,70423],{"class":278},"\"city\"",[109,70425,54661],{"class":211},[109,70427,130],{"class":126},[109,70429,70423],{"class":278},[109,70431,52482],{"class":126},[109,70433,70434,70436,70438,70440,70442,70445,70448,70450],{"class":111,"line":419},[109,70435,56409],{"class":126},[109,70437,70341],{"class":52475},[109,70439,67826],{"class":211},[109,70441,130],{"class":126},[109,70443,70444],{"class":278},"\"北京\"",[109,70446,70447],{"class":126},">北京\u003C\u002F",[109,70449,70341],{"class":52475},[109,70451,52482],{"class":126},[109,70453,70454,70456,70458,70460,70462,70465,70468,70470],{"class":111,"line":435},[109,70455,56409],{"class":126},[109,70457,70341],{"class":52475},[109,70459,67826],{"class":211},[109,70461,130],{"class":126},[109,70463,70464],{"class":278},"\"上海\"",[109,70466,70467],{"class":126},">上海\u003C\u002F",[109,70469,70341],{"class":52475},[109,70471,52482],{"class":126},[109,70473,70474,70476,70478,70480,70482,70485,70488,70490],{"class":111,"line":440},[109,70475,56409],{"class":126},[109,70477,70341],{"class":52475},[109,70479,67826],{"class":211},[109,70481,130],{"class":126},[109,70483,70484],{"class":278},"\"广州\"",[109,70486,70487],{"class":126},">广州\u003C\u002F",[109,70489,70341],{"class":52475},[109,70491,52482],{"class":126},[109,70493,70494,70496,70498,70500,70502,70505,70508,70510],{"class":111,"line":467},[109,70495,56409],{"class":126},[109,70497,70341],{"class":52475},[109,70499,67826],{"class":211},[109,70501,130],{"class":126},[109,70503,70504],{"class":278},"\"深圳\"",[109,70506,70507],{"class":126},">深圳\u003C\u002F",[109,70509,70341],{"class":52475},[109,70511,52482],{"class":126},[109,70513,70514,70516,70518,70520,70522,70525,70528,70530],{"class":111,"line":494},[109,70515,56409],{"class":126},[109,70517,70341],{"class":52475},[109,70519,67826],{"class":211},[109,70521,130],{"class":126},[109,70523,70524],{"class":278},"\"曹县\"",[109,70526,70527],{"class":126},">曹县\u003C\u002F",[109,70529,70341],{"class":52475},[109,70531,52482],{"class":126},[109,70533,70534,70536,70538],{"class":111,"line":499},[109,70535,52951],{"class":126},[109,70537,70319],{"class":52475},[109,70539,52482],{"class":126},[109,70541,70542,70544,70546,70548,70550,70553,70556,70558],{"class":111,"line":526},[109,70543,52516],{"class":126},[109,70545,55062],{"class":52475},[109,70547,54661],{"class":211},[109,70549,130],{"class":126},[109,70551,70552],{"class":278},"\"add\"",[109,70554,70555],{"class":126},">录入\u003C\u002F",[109,70557,55062],{"class":52475},[109,70559,52482],{"class":126},[109,70561,70562,70564,70566],{"class":111,"line":552},[109,70563,53592],{"class":126},[109,70565,67800],{"class":52475},[109,70567,52482],{"class":126},[109,70569,70570],{"class":111,"line":557},[109,70571,158],{"emptyLinePlaceholder":157},[109,70573,70574,70576,70578,70581,70583],{"class":111,"line":584},[109,70575,53319],{"class":126},[109,70577,10],{"class":52475},[109,70579,70580],{"class":126},">就业榜\u003C\u002F",[109,70582,10],{"class":52475},[109,70584,52482],{"class":126},[109,70586,70587,70589,70591],{"class":111,"line":611},[109,70588,53319],{"class":126},[109,70590,1677],{"class":52475},[109,70592,52482],{"class":126},[109,70594,70595,70597,70599],{"class":111,"line":616},[109,70596,52516],{"class":126},[109,70598,1680],{"class":52475},[109,70600,52482],{"class":126},[109,70602,70603,70605,70607],{"class":111,"line":633},[109,70604,56409],{"class":126},[109,70606,1683],{"class":52475},[109,70608,52482],{"class":126},[109,70610,70611,70613,70615,70618,70620],{"class":111,"line":649},[109,70612,56477],{"class":126},[109,70614,1686],{"class":52475},[109,70616,70617],{"class":126},">序号\u003C\u002F",[109,70619,1686],{"class":52475},[109,70621,52482],{"class":126},[109,70623,70624,70626,70628,70631,70633],{"class":111,"line":676},[109,70625,56477],{"class":126},[109,70627,1686],{"class":52475},[109,70629,70630],{"class":126},">姓名\u003C\u002F",[109,70632,1686],{"class":52475},[109,70634,52482],{"class":126},[109,70636,70637,70639,70641,70644,70646],{"class":111,"line":703},[109,70638,56477],{"class":126},[109,70640,1686],{"class":52475},[109,70642,70643],{"class":126},">年龄\u003C\u002F",[109,70645,1686],{"class":52475},[109,70647,52482],{"class":126},[109,70649,70650,70652,70654,70657,70659],{"class":111,"line":708},[109,70651,56477],{"class":126},[109,70653,1686],{"class":52475},[109,70655,70656],{"class":126},">性别\u003C\u002F",[109,70658,1686],{"class":52475},[109,70660,52482],{"class":126},[109,70662,70663,70665,70667,70670,70672],{"class":111,"line":723},[109,70664,56477],{"class":126},[109,70666,1686],{"class":52475},[109,70668,70669],{"class":126},">薪资\u003C\u002F",[109,70671,1686],{"class":52475},[109,70673,52482],{"class":126},[109,70675,70676,70678,70680,70683,70685],{"class":111,"line":728},[109,70677,56477],{"class":126},[109,70679,1686],{"class":52475},[109,70681,70682],{"class":126},">就业城市\u003C\u002F",[109,70684,1686],{"class":52475},[109,70686,52482],{"class":126},[109,70688,70689,70691,70693,70696,70698],{"class":111,"line":739},[109,70690,56477],{"class":126},[109,70692,1686],{"class":52475},[109,70694,70695],{"class":126},">操作\u003C\u002F",[109,70697,1686],{"class":52475},[109,70699,52482],{"class":126},[109,70701,70702,70704,70706],{"class":111,"line":9352},[109,70703,56582],{"class":126},[109,70705,1683],{"class":52475},[109,70707,52482],{"class":126},[109,70709,70710,70712,70714],{"class":111,"line":9364},[109,70711,52951],{"class":126},[109,70713,1680],{"class":52475},[109,70715,52482],{"class":126},[109,70717,70718,70720,70722],{"class":111,"line":9376},[109,70719,52516],{"class":126},[109,70721,1723],{"class":52475},[109,70723,52482],{"class":126},[109,70725,70726],{"class":111,"line":11034},[109,70727,70728],{"class":115},"      \u003C!-- \n",[109,70730,70731],{"class":111,"line":11059},[109,70732,70733],{"class":115},"        \u003Ctr>\n",[109,70735,70736],{"class":111,"line":11082},[109,70737,70738],{"class":115},"          \u003Ctd>1001\u003C\u002Ftd>\n",[109,70740,70741],{"class":111,"line":11106},[109,70742,70743],{"class":115},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[109,70745,70746],{"class":111,"line":11111},[109,70747,70748],{"class":115},"          \u003Ctd>19\u003C\u002Ftd>\n",[109,70750,70751],{"class":111,"line":11116},[109,70752,70753],{"class":115},"          \u003Ctd>男\u003C\u002Ftd>\n",[109,70755,70756],{"class":111,"line":11121},[109,70757,70758],{"class":115},"          \u003Ctd>15000\u003C\u002Ftd>\n",[109,70760,70761],{"class":111,"line":11130},[109,70762,70763],{"class":115},"          \u003Ctd>上海\u003C\u002Ftd>\n",[109,70765,70766],{"class":111,"line":11135},[109,70767,70768],{"class":115},"          \u003Ctd>\n",[109,70770,70771],{"class":111,"line":11141},[109,70772,70773],{"class":115},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[109,70775,70776],{"class":111,"line":11162},[109,70777,70778],{"class":115},"          \u003C\u002Ftd>\n",[109,70780,70781],{"class":111,"line":11168},[109,70782,70783],{"class":115},"        \u003C\u002Ftr> \n",[109,70785,70786],{"class":111,"line":11182},[109,70787,70788],{"class":115},"        -->\n",[109,70790,70791,70793,70795],{"class":111,"line":11188},[109,70792,52951],{"class":126},[109,70794,1723],{"class":52475},[109,70796,52482],{"class":126},[109,70798,70799,70801,70803],{"class":111,"line":11215},[109,70800,53592],{"class":126},[109,70802,1677],{"class":52475},[109,70804,52482],{"class":126},[109,70806,70807,70809,70811],{"class":111,"line":11224},[109,70808,53319],{"class":126},[109,70810,52988],{"class":52475},[109,70812,52482],{"class":126},[109,70814,70815],{"class":111,"line":11230},[109,70816,61133],{"class":115},[109,70818,70819,70821,70824,70826,70828,70830,70832,70835],{"class":111,"line":11238},[109,70820,619],{"class":122},[109,70822,70823],{"class":133}," uname",[109,70825,14737],{"class":122},[109,70827,55571],{"class":126},[109,70829,55574],{"class":211},[109,70831,714],{"class":126},[109,70833,70834],{"class":278},"'.uname'",[109,70836,1330],{"class":126},[109,70838,70839,70841,70843,70845,70847,70849,70851,70854],{"class":111,"line":11243},[109,70840,619],{"class":122},[109,70842,16862],{"class":133},[109,70844,14737],{"class":122},[109,70846,55571],{"class":126},[109,70848,55574],{"class":211},[109,70850,714],{"class":126},[109,70852,70853],{"class":278},"'.age'",[109,70855,1330],{"class":126},[109,70857,70858,70860,70863,70865,70867,70869,70871,70874],{"class":111,"line":17777},[109,70859,619],{"class":122},[109,70861,70862],{"class":133}," gender",[109,70864,14737],{"class":122},[109,70866,55571],{"class":126},[109,70868,55574],{"class":211},[109,70870,714],{"class":126},[109,70872,70873],{"class":278},"'.gender'",[109,70875,1330],{"class":126},[109,70877,70878,70880,70883,70885,70887,70889,70891,70894],{"class":111,"line":17783},[109,70879,619],{"class":122},[109,70881,70882],{"class":133}," salary",[109,70884,14737],{"class":122},[109,70886,55571],{"class":126},[109,70888,55574],{"class":211},[109,70890,714],{"class":126},[109,70892,70893],{"class":278},"'.salary'",[109,70895,1330],{"class":126},[109,70897,70898,70900,70903,70905,70907,70909,70911,70914],{"class":111,"line":17806},[109,70899,619],{"class":122},[109,70901,70902],{"class":133}," city",[109,70904,14737],{"class":122},[109,70906,55571],{"class":126},[109,70908,55574],{"class":211},[109,70910,714],{"class":126},[109,70912,70913],{"class":278},"'.city'",[109,70915,1330],{"class":126},[109,70917,70918,70920,70923,70925,70927,70929,70931,70934],{"class":111,"line":17812},[109,70919,619],{"class":122},[109,70921,70922],{"class":133}," tbody",[109,70924,14737],{"class":122},[109,70926,55571],{"class":126},[109,70928,55574],{"class":211},[109,70930,714],{"class":126},[109,70932,70933],{"class":278},"'tbody'",[109,70935,1330],{"class":126},[109,70937,70938],{"class":111,"line":17835},[109,70939,158],{"emptyLinePlaceholder":157},[109,70941,70942],{"class":111,"line":17849},[109,70943,70944],{"class":115},"    \u002F\u002F 获取所有带有name属性的元素\n",[109,70946,70947,70949,70952,70954,70956,70958,70960,70963],{"class":111,"line":17869},[109,70948,619],{"class":122},[109,70950,70951],{"class":133}," items",[109,70953,14737],{"class":122},[109,70955,55571],{"class":126},[109,70957,56856],{"class":211},[109,70959,714],{"class":126},[109,70961,70962],{"class":278},"'[name]'",[109,70964,1330],{"class":126},[109,70966,70967],{"class":111,"line":17875},[109,70968,70969],{"class":115},"    \u002F\u002F 声明一个空的数组\n",[109,70971,70972,70974,70976,70978],{"class":111,"line":17886},[109,70973,619],{"class":122},[109,70975,58870],{"class":133},[109,70977,14737],{"class":122},[109,70979,53013],{"class":126},[109,70981,70982],{"class":111,"line":17909},[109,70983,70984],{"class":115},"    \u002F\u002F 1.录入模块\n",[109,70986,70987],{"class":111,"line":17931},[109,70988,70989],{"class":115},"    \u002F\u002F 1.1这是一个表单提交事件\n",[109,70991,70992,70994,70997,70999,71001,71003,71005,71008],{"class":111,"line":17936},[109,70993,619],{"class":122},[109,70995,70996],{"class":133}," info",[109,70998,14737],{"class":122},[109,71000,55571],{"class":126},[109,71002,55574],{"class":211},[109,71004,714],{"class":126},[109,71006,71007],{"class":278},"'.info'",[109,71009,1330],{"class":126},[109,71011,71012,71015,71017,71019,71022,71024,71026,71028,71030],{"class":111,"line":17942},[109,71013,71014],{"class":126},"    info.",[109,71016,58988],{"class":211},[109,71018,714],{"class":126},[109,71020,71021],{"class":278},"'submit'",[109,71023,13608],{"class":126},[109,71025,55624],{"class":122},[109,71027,285],{"class":126},[109,71029,1615],{"class":6553},[109,71031,13615],{"class":126},[109,71033,71034],{"class":111,"line":17956},[109,71035,71036],{"class":115},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[109,71038,71039,71042,71045],{"class":111,"line":17969},[109,71040,71041],{"class":126},"      e.",[109,71043,71044],{"class":211},"preventDefault",[109,71046,803],{"class":126},[109,71048,71049],{"class":111,"line":17974},[109,71050,61187],{"class":115},[109,71052,71053],{"class":111,"line":17988},[109,71054,158],{"emptyLinePlaceholder":157},[109,71056,71057],{"class":111,"line":17993},[109,71058,71059],{"class":115},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[109,71061,71062],{"class":111,"line":17999},[109,71063,71064],{"class":115},"      \u002F\u002F 先遍历循环\n",[109,71066,71067,71069,71071,71073,71075,71077,71079,71081,71083,71086,71088,71090,71092],{"class":111,"line":18004},[109,71068,53459],{"class":122},[109,71070,285],{"class":126},[109,71072,53022],{"class":122},[109,71074,10756],{"class":126},[109,71076,130],{"class":122},[109,71078,734],{"class":133},[109,71080,10763],{"class":126},[109,71082,1320],{"class":122},[109,71084,71085],{"class":126}," items.",[109,71087,53143],{"class":133},[109,71089,4558],{"class":126},[109,71091,1327],{"class":122},[109,71093,13615],{"class":126},[109,71095,71096,71098,71101,71103,71106],{"class":111,"line":18018},[109,71097,3852],{"class":122},[109,71099,71100],{"class":126}," (items[i].value ",[109,71102,55661],{"class":122},[109,71104,71105],{"class":278}," ''",[109,71107,13615],{"class":126},[109,71109,71110,71113,71116,71118,71121],{"class":111,"line":18023},[109,71111,71112],{"class":122},"          return",[109,71114,71115],{"class":211}," alert",[109,71117,714],{"class":126},[109,71119,71120],{"class":278},"'输入内容不能为空'",[109,71122,1330],{"class":126},[109,71124,71125],{"class":111,"line":18028},[109,71126,3884],{"class":126},[109,71128,71129],{"class":111,"line":18042},[109,71130,53573],{"class":126},[109,71132,71133],{"class":111,"line":18054},[109,71134,158],{"emptyLinePlaceholder":157},[109,71136,71137],{"class":111,"line":18059},[109,71138,71139],{"class":115},"      \u002F\u002F 创建新的对象\n",[109,71141,71142,71144,71147,71149],{"class":111,"line":18072},[109,71143,59403],{"class":122},[109,71145,71146],{"class":133}," obj",[109,71148,14737],{"class":122},[109,71150,16745],{"class":126},[109,71152,71153,71156,71158,71160,71162],{"class":111,"line":18077},[109,71154,71155],{"class":126},"        stuID: arr.",[109,71157,53143],{"class":133},[109,71159,46741],{"class":122},[109,71161,26293],{"class":133},[109,71163,32641],{"class":126},[109,71165,71166],{"class":111,"line":18082},[109,71167,71168],{"class":126},"        uname: uname.value,\n",[109,71170,71171],{"class":111,"line":18087},[109,71172,71173],{"class":126},"        age: age.value,\n",[109,71175,71176],{"class":111,"line":18100},[109,71177,71178],{"class":126},"        gender: gender.value,\n",[109,71180,71181],{"class":111,"line":18105},[109,71182,71183],{"class":126},"        salary: salary.value,\n",[109,71185,71186],{"class":111,"line":33808},[109,71187,71188],{"class":126},"        city: city.value\n",[109,71190,71191],{"class":111,"line":33814},[109,71192,53573],{"class":126},[109,71194,71195],{"class":111,"line":33820},[109,71196,71197],{"class":115},"      \u002F\u002F console.log(obj);\n",[109,71199,71200],{"class":111,"line":33826},[109,71201,71202],{"class":115},"      \u002F\u002F 追加到数组里面\n",[109,71204,71205,71207,71209],{"class":111,"line":33832},[109,71206,59182],{"class":126},[109,71208,53059],{"class":211},[109,71210,71211],{"class":126},"(obj)\n",[109,71213,71214],{"class":111,"line":33843},[109,71215,71216],{"class":115},"      \u002F\u002F console.log(arr);\n",[109,71218,71219],{"class":111,"line":33849},[109,71220,71221],{"class":115},"      \u002F\u002F 清空表单  reset重置表单\n",[109,71223,71224,71227,71229,71232],{"class":111,"line":33869},[109,71225,71226],{"class":133},"      this",[109,71228,2090],{"class":126},[109,71230,71231],{"class":211},"reset",[109,71233,803],{"class":126},[109,71235,71236],{"class":111,"line":33875},[109,71237,71238],{"class":115},"      \u002F\u002F 调用渲染函数\n",[109,71240,71241,71244],{"class":111,"line":33886},[109,71242,71243],{"class":211},"      render",[109,71245,803],{"class":126},[109,71247,71248],{"class":111,"line":33892},[109,71249,34636],{"class":126},[109,71251,71252],{"class":111,"line":33898},[109,71253,71254],{"class":115},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[109,71256,71257,71260,71263],{"class":111,"line":33904},[109,71258,71259],{"class":122},"    function",[109,71261,71262],{"class":211}," render",[109,71264,215],{"class":126},[109,71266,71267],{"class":111,"line":33910},[109,71268,71269],{"class":115},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[109,71271,71272,71275,71277],{"class":111,"line":33916},[109,71273,71274],{"class":126},"      tbody.innerHTML ",[109,71276,130],{"class":122},[109,71278,71279],{"class":278}," ''\n",[109,71281,71282],{"class":111,"line":33922},[109,71283,71284],{"class":115},"      \u002F\u002F 遍历数组\n",[109,71286,71287,71289,71291,71293,71295,71297,71299,71301,71303,71305,71307,71309,71311],{"class":111,"line":33928},[109,71288,53459],{"class":122},[109,71290,285],{"class":126},[109,71292,53022],{"class":122},[109,71294,10756],{"class":126},[109,71296,130],{"class":122},[109,71298,734],{"class":133},[109,71300,10763],{"class":126},[109,71302,1320],{"class":122},[109,71304,53140],{"class":126},[109,71306,53143],{"class":133},[109,71308,4558],{"class":126},[109,71310,1327],{"class":122},[109,71312,13615],{"class":126},[109,71314,71315,71317,71320,71322,71324,71327,71329,71332],{"class":111,"line":33948},[109,71316,62445],{"class":122},[109,71318,71319],{"class":133}," tr",[109,71321,14737],{"class":122},[109,71323,55571],{"class":126},[109,71325,71326],{"class":211},"createElement",[109,71328,714],{"class":126},[109,71330,71331],{"class":278},"'tr'",[109,71333,1330],{"class":126},[109,71335,71336,71339,71341],{"class":111,"line":33954},[109,71337,71338],{"class":126},"        tr.innerHTML ",[109,71340,130],{"class":122},[109,71342,71343],{"class":278}," `\n",[109,71345,71346,71349,71351,71353,71355,71358,71361],{"class":111,"line":33970},[109,71347,71348],{"class":278},"        \u003Ctd>${",[109,71350,1282],{"class":126},[109,71352,1289],{"class":278},[109,71354,1345],{"class":126},[109,71356,71357],{"class":278},"].",[109,71359,71360],{"class":126},"stuID",[109,71362,71363],{"class":278},"}\u003C\u002Ftd>\n",[109,71365,71366,71369,71371,71373,71375,71377,71380],{"class":111,"line":33976},[109,71367,71368],{"class":278},"          \u003Ctd>${",[109,71370,1282],{"class":126},[109,71372,1289],{"class":278},[109,71374,1345],{"class":126},[109,71376,71357],{"class":278},[109,71378,71379],{"class":126},"uname",[109,71381,71363],{"class":278},[109,71383,71384,71386,71388,71390,71392,71394,71397],{"class":111,"line":33990},[109,71385,71368],{"class":278},[109,71387,1282],{"class":126},[109,71389,1289],{"class":278},[109,71391,1345],{"class":126},[109,71393,71357],{"class":278},[109,71395,71396],{"class":126},"age",[109,71398,71363],{"class":278},[109,71400,71401,71403,71405,71407,71409,71411,71414],{"class":111,"line":33996},[109,71402,71368],{"class":278},[109,71404,1282],{"class":126},[109,71406,1289],{"class":278},[109,71408,1345],{"class":126},[109,71410,71357],{"class":278},[109,71412,71413],{"class":126},"gender",[109,71415,71363],{"class":278},[109,71417,71418,71420,71422,71424,71426,71428,71431],{"class":111,"line":34011},[109,71419,71368],{"class":278},[109,71421,1282],{"class":126},[109,71423,1289],{"class":278},[109,71425,1345],{"class":126},[109,71427,71357],{"class":278},[109,71429,71430],{"class":126},"salary",[109,71432,71363],{"class":278},[109,71434,71435,71437,71439,71441,71443,71445,71448],{"class":111,"line":34017},[109,71436,71368],{"class":278},[109,71438,1282],{"class":126},[109,71440,1289],{"class":278},[109,71442,1345],{"class":126},[109,71444,71357],{"class":278},[109,71446,71447],{"class":126},"city",[109,71449,71363],{"class":278},[109,71451,71452],{"class":111,"line":34026},[109,71453,70768],{"class":278},[109,71455,71456,71459,71461],{"class":111,"line":34032},[109,71457,71458],{"class":278},"            \u003Ca href=\"javascript:\" data-id=${",[109,71460,1345],{"class":126},[109,71462,71463],{"class":278},"}>删除\u003C\u002Fa>\n",[109,71465,71466],{"class":111,"line":34041},[109,71467,71468],{"class":278},"          \u003C\u002Ftd> \n",[109,71470,71471],{"class":111,"line":34047},[109,71472,71473],{"class":278},"          `\n",[109,71475,71476],{"class":111,"line":34053},[109,71477,71478],{"class":115},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[109,71480,71481,71484,71487],{"class":111,"line":34062},[109,71482,71483],{"class":126},"        tbody.",[109,71485,71486],{"class":211},"appendChild",[109,71488,71489],{"class":126},"(tr)\n",[109,71491,71492],{"class":111,"line":34068},[109,71493,53573],{"class":126},[109,71495,71496],{"class":111,"line":34079},[109,71497,1361],{"class":126},[109,71499,71500],{"class":111,"line":34085},[109,71501,158],{"emptyLinePlaceholder":157},[109,71503,71504],{"class":111,"line":34104},[109,71505,71506],{"class":115},"    \u002F\u002F 3.删除委托\n",[109,71508,71509],{"class":111,"line":34110},[109,71510,71511],{"class":115},"    \u002F\u002F 3.1 事件委托 tbody\n",[109,71513,71514,71517,71519,71521,71523,71525,71527,71529,71531],{"class":111,"line":34121},[109,71515,71516],{"class":126},"    tbody.",[109,71518,58988],{"class":211},[109,71520,714],{"class":126},[109,71522,58993],{"class":278},[109,71524,13608],{"class":126},[109,71526,55624],{"class":122},[109,71528,285],{"class":126},[109,71530,1615],{"class":6553},[109,71532,13615],{"class":126},[109,71534,71535,71537,71539,71541,71543],{"class":111,"line":34127},[109,71536,55655],{"class":122},[109,71538,68209],{"class":126},[109,71540,55661],{"class":122},[109,71542,69431],{"class":278},[109,71544,13615],{"class":126},[109,71546,71547],{"class":111,"line":34147},[109,71548,71549],{"class":115},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[109,71551,71552],{"class":111,"line":34163},[109,71553,71554],{"class":115},"        \u002F\u002F console.log(e.target.dataset.id);\n",[109,71556,71557],{"class":111,"line":34169},[109,71558,71559],{"class":115},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[109,71561,71562,71565,71567,71570,71572],{"class":111,"line":34183},[109,71563,71564],{"class":126},"        arr.",[109,71566,59185],{"class":211},[109,71568,71569],{"class":126},"(e.target.dataset.id, ",[109,71571,1755],{"class":133},[109,71573,1330],{"class":126},[109,71575,71576],{"class":111,"line":34189},[109,71577,71578],{"class":115},"        \u002F\u002F 重新渲染一次\n",[109,71580,71581,71584],{"class":111,"line":34195},[109,71582,71583],{"class":211},"        render",[109,71585,803],{"class":126},[109,71587,71588],{"class":111,"line":34206},[109,71589,53573],{"class":126},[109,71591,71592],{"class":111,"line":34212},[109,71593,34636],{"class":126},[109,71595,71596,71598,71600],{"class":111,"line":34218},[109,71597,53592],{"class":126},[109,71599,52988],{"class":52475},[109,71601,52482],{"class":126},[109,71603,71604],{"class":111,"line":34228},[109,71605,158],{"emptyLinePlaceholder":157},[109,71607,71608,71610,71612],{"class":111,"line":34234},[109,71609,52960],{"class":126},[109,71611,52975],{"class":52475},[109,71613,52482],{"class":126},[109,71615,71616],{"class":111,"line":34245},[109,71617,158],{"emptyLinePlaceholder":157},[109,71619,71620,71622,71624],{"class":111,"line":34251},[109,71621,52960],{"class":126},[109,71623,51810],{"class":52475},[109,71625,52482],{"class":126},[19,71627,71628],{},"样式：",[99,71630,71634],{"className":71631,"code":71632,"language":71633,"meta":104,"style":104},"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",[106,71635,71636,71641,71651,71660,71664,71668,71673,71683,71688,71692,71697,71707,71712,71721,71725,71729,71734,71739,71749,71759,71764,71768,71773,71782,71792,71797,71807,71817,71821,71826,71834,71838,71843,71848,71853,71861,71870,71874,71879,71888,71892,71897,71906,71910,71915,71924,71933,71941,71945,71950,71959,71969,71978,71988,71994,72003,72013,72023,72027,72032,72041,72049,72059,72067,72076,72085,72095,72103,72107,72112,72121],{"__ignoreMap":104},[109,71637,71638],{"class":111,"line":112},[109,71639,71640],{"class":126},"* {\n",[109,71642,71643,71646,71648],{"class":111,"line":119},[109,71644,71645],{"class":52475},"  margin",[109,71647,52612],{"class":126},[109,71649,71650],{"class":278},"0;\n",[109,71652,71653,71656,71658],{"class":111,"line":140},[109,71654,71655],{"class":278},"  padding",[109,71657,52612],{"class":126},[109,71659,71650],{"class":278},[109,71661,71662],{"class":111,"line":154},[109,71663,742],{"class":126},[109,71665,71666],{"class":111,"line":161},[109,71667,158],{"emptyLinePlaceholder":157},[109,71669,71670],{"class":111,"line":167},[109,71671,71672],{"class":278},"a {\n",[109,71674,71675,71678,71680],{"class":111,"line":185},[109,71676,71677],{"class":52475},"  text-decoration",[109,71679,52612],{"class":126},[109,71681,71682],{"class":278},"none;\n",[109,71684,71685],{"class":111,"line":201},[109,71686,71687],{"class":278},"  color:#721c24;\n",[109,71689,71690],{"class":111,"line":206},[109,71691,742],{"class":126},[109,71693,71694],{"class":111,"line":218},[109,71695,71696],{"class":278},"h1 {\n",[109,71698,71699,71702,71704],{"class":111,"line":223},[109,71700,71701],{"class":52475},"  text-align",[109,71703,52612],{"class":126},[109,71705,71706],{"class":278},"center;\n",[109,71708,71709],{"class":111,"line":229},[109,71710,71711],{"class":278},"  color:#333;\n",[109,71713,71714,71716,71718],{"class":111,"line":244},[109,71715,71645],{"class":52475},[109,71717,52612],{"class":126},[109,71719,71720],{"class":278},"20px 0;\n",[109,71722,71723],{"class":111,"line":258},[109,71724,4022],{"class":126},[109,71726,71727],{"class":111,"line":263},[109,71728,742],{"class":126},[109,71730,71731],{"class":111,"line":269},[109,71732,71733],{"class":278},"table {\n",[109,71735,71736],{"class":111,"line":304},[109,71737,71738],{"class":278},"  margin:0 auto;\n",[109,71740,71741,71744,71746],{"class":111,"line":331},[109,71742,71743],{"class":52475},"  width",[109,71745,52612],{"class":126},[109,71747,71748],{"class":278},"800px;\n",[109,71750,71751,71754,71756],{"class":111,"line":336},[109,71752,71753],{"class":52475},"  border-collapse",[109,71755,52612],{"class":126},[109,71757,71758],{"class":278},"collapse;\n",[109,71760,71761],{"class":111,"line":364},[109,71762,71763],{"class":278},"  color:#004085;\n",[109,71765,71766],{"class":111,"line":391},[109,71767,742],{"class":126},[109,71769,71770],{"class":111,"line":396},[109,71771,71772],{"class":278},"th {\n",[109,71774,71775,71777,71779],{"class":111,"line":402},[109,71776,71655],{"class":52475},[109,71778,52612],{"class":126},[109,71780,71781],{"class":278},"10px;\n",[109,71783,71784,71787,71789],{"class":111,"line":419},[109,71785,71786],{"class":52475},"  background",[109,71788,52612],{"class":126},[109,71790,71791],{"class":115},"#cfe5ff;\n",[109,71793,71794],{"class":111,"line":435},[109,71795,71796],{"class":126},"  \n",[109,71798,71799,71802,71804],{"class":111,"line":440},[109,71800,71801],{"class":52475},"  font-size",[109,71803,52612],{"class":126},[109,71805,71806],{"class":278},"20px;\n",[109,71808,71809,71812,71814],{"class":111,"line":467},[109,71810,71811],{"class":52475},"  font-weight",[109,71813,52612],{"class":126},[109,71815,71816],{"class":278},"400;\n",[109,71818,71819],{"class":111,"line":494},[109,71820,742],{"class":126},[109,71822,71823],{"class":111,"line":499},[109,71824,71825],{"class":278},"td,th {\n",[109,71827,71828,71831],{"class":111,"line":526},[109,71829,71830],{"class":278},"  border:1px solid",[109,71832,71833],{"class":115}," #b8daff;\n",[109,71835,71836],{"class":111,"line":552},[109,71837,742],{"class":126},[109,71839,71840],{"class":111,"line":557},[109,71841,71842],{"class":278},"td {\n",[109,71844,71845],{"class":111,"line":584},[109,71846,71847],{"class":278},"  padding:10px;\n",[109,71849,71850],{"class":111,"line":611},[109,71851,71852],{"class":278},"  color:#666;\n",[109,71854,71855,71857,71859],{"class":111,"line":616},[109,71856,71701],{"class":52475},[109,71858,52612],{"class":126},[109,71860,71706],{"class":278},[109,71862,71863,71865,71867],{"class":111,"line":633},[109,71864,71801],{"class":52475},[109,71866,52612],{"class":126},[109,71868,71869],{"class":278},"16px;\n",[109,71871,71872],{"class":111,"line":649},[109,71873,742],{"class":126},[109,71875,71876],{"class":111,"line":676},[109,71877,71878],{"class":278},"tbody tr {\n",[109,71880,71881,71883,71885],{"class":111,"line":703},[109,71882,71786],{"class":52475},[109,71884,52612],{"class":126},[109,71886,71887],{"class":115},"#fff;\n",[109,71889,71890],{"class":111,"line":708},[109,71891,742],{"class":126},[109,71893,71894],{"class":111,"line":723},[109,71895,71896],{"class":278},"tbody tr:hover {\n",[109,71898,71899,71901,71903],{"class":111,"line":728},[109,71900,71786],{"class":52475},[109,71902,52612],{"class":126},[109,71904,71905],{"class":115},"#e1ecf8;\n",[109,71907,71908],{"class":111,"line":739},[109,71909,742],{"class":126},[109,71911,71912],{"class":111,"line":9352},[109,71913,71914],{"class":278},".info {\n",[109,71916,71917,71919,71921],{"class":111,"line":9364},[109,71918,71743],{"class":52475},[109,71920,52612],{"class":126},[109,71922,71923],{"class":278},"900px;\n",[109,71925,71926,71928,71930],{"class":111,"line":9376},[109,71927,71645],{"class":52475},[109,71929,52612],{"class":126},[109,71931,71932],{"class":278},"50px auto;\n",[109,71934,71935,71937,71939],{"class":111,"line":11034},[109,71936,71701],{"class":52475},[109,71938,52612],{"class":126},[109,71940,71706],{"class":278},[109,71942,71943],{"class":111,"line":11059},[109,71944,742],{"class":126},[109,71946,71947],{"class":111,"line":11082},[109,71948,71949],{"class":278},".info  input, .info select {\n",[109,71951,71952,71954,71956],{"class":111,"line":11106},[109,71953,71743],{"class":52475},[109,71955,52612],{"class":126},[109,71957,71958],{"class":278},"80px;\n",[109,71960,71961,71964,71966],{"class":111,"line":11111},[109,71962,71963],{"class":52475},"  height",[109,71965,52612],{"class":126},[109,71967,71968],{"class":278},"27px;\n",[109,71970,71971,71974,71976],{"class":111,"line":11116},[109,71972,71973],{"class":52475},"  outline",[109,71975,52612],{"class":126},[109,71977,71682],{"class":278},[109,71979,71980,71983,71985],{"class":111,"line":11121},[109,71981,71982],{"class":52475},"  border-radius",[109,71984,52612],{"class":126},[109,71986,71987],{"class":278},"5px;\n",[109,71989,71990,71992],{"class":111,"line":11130},[109,71991,71830],{"class":278},[109,71993,71833],{"class":115},[109,71995,71996,71999,72001],{"class":111,"line":11135},[109,71997,71998],{"class":52475},"  padding-left",[109,72000,52612],{"class":126},[109,72002,71987],{"class":278},[109,72004,72005,72008,72010],{"class":111,"line":11141},[109,72006,72007],{"class":52475},"  box-sizing",[109,72009,52612],{"class":126},[109,72011,72012],{"class":278},"border-box;\n",[109,72014,72015,72018,72020],{"class":111,"line":11162},[109,72016,72017],{"class":52475},"  margin-right",[109,72019,52612],{"class":126},[109,72021,72022],{"class":278},"15px;\n",[109,72024,72025],{"class":111,"line":11168},[109,72026,742],{"class":126},[109,72028,72029],{"class":111,"line":11182},[109,72030,72031],{"class":278},".info button {\n",[109,72033,72034,72036,72038],{"class":111,"line":11188},[109,72035,71743],{"class":52475},[109,72037,52612],{"class":126},[109,72039,72040],{"class":278},"60px;\n",[109,72042,72043,72045,72047],{"class":111,"line":11215},[109,72044,71963],{"class":52475},[109,72046,52612],{"class":126},[109,72048,71968],{"class":278},[109,72050,72051,72054,72056],{"class":111,"line":11224},[109,72052,72053],{"class":52475},"  background-color",[109,72055,52612],{"class":126},[109,72057,72058],{"class":115},"#004085;\n",[109,72060,72061,72063,72065],{"class":111,"line":11230},[109,72062,71973],{"class":52475},[109,72064,52612],{"class":126},[109,72066,71682],{"class":278},[109,72068,72069,72072,72074],{"class":111,"line":11238},[109,72070,72071],{"class":52475},"  border",[109,72073,52612],{"class":126},[109,72075,71650],{"class":278},[109,72077,72078,72081,72083],{"class":111,"line":11243},[109,72079,72080],{"class":52475},"  color",[109,72082,52612],{"class":126},[109,72084,71887],{"class":115},[109,72086,72087,72090,72092],{"class":111,"line":17777},[109,72088,72089],{"class":52475},"  cursor",[109,72091,52612],{"class":126},[109,72093,72094],{"class":278},"pointer;\n",[109,72096,72097,72099,72101],{"class":111,"line":17783},[109,72098,71982],{"class":52475},[109,72100,52612],{"class":126},[109,72102,71987],{"class":278},[109,72104,72105],{"class":111,"line":17806},[109,72106,742],{"class":126},[109,72108,72109],{"class":111,"line":17812},[109,72110,72111],{"class":278},".info .age {\n",[109,72113,72114,72116,72118],{"class":111,"line":17835},[109,72115,71743],{"class":52475},[109,72117,52612],{"class":126},[109,72119,72120],{"class":278},"50px;\n",[109,72122,72123],{"class":111,"line":17849},[109,72124,742],{"class":126},[19,72126,72127],{},"思路：",[19,72129,72130],{},[938,72131],{"alt":104,"src":72132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72134,72135],{},[938,72136],{"alt":104,"src":72137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72139,72140],{},[938,72141],{"alt":104,"src":72142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[51,72144,72146],{"id":72145},"_3315-重绘回流","3.3.15 重绘回流",[19,72148,72149],{},[938,72150],{"alt":104,"src":72151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72153,72154],{},[938,72155],{"alt":104,"src":72156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72158,72159],{},[938,72160],{"alt":104,"src":72161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72163,72165],{"id":72164},"_34-bom","3.4 BOM",[19,72167,72168],{},[938,72169],{"alt":104,"src":72170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72172,72173],{},"平时写的document省略了window而已，实际上是window.document",[19,72175,72176],{},"函数也是这样，调用的时候实际为window.fn()",[19,72178,72179],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72181,72182],{},"window大部分情况下可以省略",[51,72184,72186],{"id":72185},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72188,72189],{},"只执行一次",[19,72191,72192],{},[938,72193],{"alt":104,"src":72194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72196,72197],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72199,72200],{},[938,72201],{"alt":104,"src":72202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[51,72204,72206],{"id":72205},"_342-js执行机制","3.4.2 JS执行机制",[19,72208,72209],{},[938,72210],{"alt":104,"src":72211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72213,72214],{},"两个的结果都是1111 3333 2222",[19,72216,72217],{},[938,72218],{"alt":104,"src":72219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72221,72222],{},[938,72223],{"alt":104,"src":72224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72226,72227],{},[938,72228],{"alt":104,"src":72229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72231,72232],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72234,72235],{},"工作流程：",[19,72237,72238],{},[938,72239],{"alt":104,"src":72240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72242,72243],{},[938,72244],{"alt":104,"src":72245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72247,72248],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72250,72251],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[51,72253,72255],{"id":72254},"_343-location对象","3.4.3 location对象",[19,72257,72258],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72260,72261],{},[938,72262],{"alt":104,"src":72263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72265,72266],{},"href可以跳转页面",[765,72268,72269],{},[30,72270,72271],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72273,72274],{},"search得到提交信息之后网站后边的地址",[19,72276,72277],{},[938,72278],{"alt":104,"src":72279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72281,72282],{},[938,72283],{"alt":104,"src":72284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[765,72286,72287],{"start":119},[30,72288,72289],{},"hash:这个获取单页面应用#后边的地址",[19,72291,72292],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72294,72295],{},[938,72296],{"alt":104,"src":72297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[99,72299,72301],{"className":54242,"code":72300,"language":54244,"meta":104,"style":104},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[106,72302,72303,72323,72343],{"__ignoreMap":104},[109,72304,72305,72307,72309,72311,72313,72316,72319,72321],{"class":111,"line":112},[109,72306,53319],{"class":126},[109,72308,1776],{"class":52475},[109,72310,62232],{"class":211},[109,72312,130],{"class":126},[109,72314,72315],{"class":278},"\"#\u002Fmy\"",[109,72317,72318],{"class":126},">我的\u003C\u002F",[109,72320,1776],{"class":52475},[109,72322,52482],{"class":126},[109,72324,72325,72327,72329,72331,72333,72336,72339,72341],{"class":111,"line":119},[109,72326,53319],{"class":126},[109,72328,1776],{"class":52475},[109,72330,62232],{"class":211},[109,72332,130],{"class":126},[109,72334,72335],{"class":278},"\"#\u002Ffriend\"",[109,72337,72338],{"class":126},">关注\u003C\u002F",[109,72340,1776],{"class":52475},[109,72342,52482],{"class":126},[109,72344,72345,72347,72349,72351,72353,72356,72359,72361],{"class":111,"line":140},[109,72346,53319],{"class":126},[109,72348,1776],{"class":52475},[109,72350,62232],{"class":211},[109,72352,130],{"class":126},[109,72354,72355],{"class":278},"\"#\u002Fdownload\"",[109,72357,72358],{"class":126},">下载\u003C\u002F",[109,72360,1776],{"class":52475},[109,72362,52482],{"class":126},[19,72364,72365],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[765,72367,72368],{"start":140},[30,72369,72370,72371,72373,72374,72376],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54891,72372],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54891,72375],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[51,72378,72380],{"id":72379},"_345-navigator对象","3.4.5 navigator对象",[19,72382,72383],{},[938,72384],{"alt":104,"src":72385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[99,72387,72391],{"className":72388,"code":72389,"language":72390,"meta":104,"style":104},"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",[106,72392,72393,72398,72409,72421,72426,72477,72518,72523,72536,72548,72553],{"__ignoreMap":104},[109,72394,72395],{"class":111,"line":112},[109,72396,72397],{"class":115},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[109,72399,72400,72402,72404,72406],{"class":111,"line":119},[109,72401,1764],{"class":122},[109,72403,714],{"class":126},[109,72405,55624],{"class":122},[109,72407,72408],{"class":126}," () { \n",[109,72410,72411,72413,72416,72418],{"class":111,"line":140},[109,72412,170],{"class":122},[109,72414,72415],{"class":133}," userAgent",[109,72417,14737],{"class":122},[109,72419,72420],{"class":126}," navigator.userAgent \n",[109,72422,72423],{"class":111,"line":154},[109,72424,72425],{"class":115},"\u002F\u002F 验证是否为Android或iPhone \n",[109,72427,72428,72430,72433,72435,72438,72441,72443,72445,72448,72450,72453,72457,72459,72461,72463,72466,72468,72470,72472,72474],{"class":111,"line":161},[109,72429,170],{"class":122},[109,72431,72432],{"class":133}," android",[109,72434,14737],{"class":122},[109,72436,72437],{"class":126}," userAgent.",[109,72439,72440],{"class":211},"match",[109,72442,714],{"class":126},[109,72444,2116],{"class":278},[109,72446,72447],{"class":49152},"(Android);",[109,72449,2516],{"class":122},[109,72451,72452],{"class":133},"[\\s",[109,72454,72456],{"class":72455},"snhLl","\\\u002F",[109,72458,2470],{"class":133},[109,72460,1348],{"class":122},[109,72462,714],{"class":49152},[109,72464,72465],{"class":133},"[\\d.]",[109,72467,1348],{"class":122},[109,72469,290],{"class":49152},[109,72471,2516],{"class":122},[109,72473,2116],{"class":278},[109,72475,72476],{"class":126},") \n",[109,72478,72479,72481,72484,72486,72488,72490,72492,72494,72497,72500,72503,72505,72507,72510,72512,72514,72516],{"class":111,"line":167},[109,72480,170],{"class":122},[109,72482,72483],{"class":133}," iphone",[109,72485,14737],{"class":122},[109,72487,72437],{"class":126},[109,72489,72440],{"class":211},[109,72491,714],{"class":126},[109,72493,2116],{"class":278},[109,72495,72496],{"class":49152},"(iPhone",[109,72498,72499],{"class":133},"\\s",[109,72501,72502],{"class":49152},"OS)",[109,72504,72499],{"class":133},[109,72506,714],{"class":49152},[109,72508,72509],{"class":133},"[\\d_]",[109,72511,1348],{"class":122},[109,72513,290],{"class":49152},[109,72515,2116],{"class":278},[109,72517,72476],{"class":126},[109,72519,72520],{"class":111,"line":185},[109,72521,72522],{"class":115},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[109,72524,72525,72527,72530,72533],{"class":111,"line":201},[109,72526,2922],{"class":122},[109,72528,72529],{"class":126}," (android ",[109,72531,72532],{"class":122},"||",[109,72534,72535],{"class":126}," iphone) { \n",[109,72537,72538,72541,72543,72546],{"class":111,"line":206},[109,72539,72540],{"class":126},"location.href ",[109,72542,130],{"class":122},[109,72544,72545],{"class":278}," 'http:\u002F\u002Fm.itcast.cn'",[109,72547,4022],{"class":126},[109,72549,72550],{"class":111,"line":218},[109,72551,72552],{"class":126},"} \n",[109,72554,72555],{"class":111,"line":223},[109,72556,72557],{"class":126},"})()\n",[51,72559,72561],{"id":72560},"_346-histroy对象","3.4.6 histroy对象",[19,72563,72564],{},[938,72565],{"alt":104,"src":72566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72568,72569],{},"浏览器地址的前进与后退!!!",[19,72571,72572],{},"history.back() 等效于 history.go(-1)",[19,72574,72575],{},"history.forward() 等效于 history.go(1)",[14,72577,72579],{"id":72578},"_35-本地存储","3.5 本地存储",[765,72581,72582,72585,72588],{},[30,72583,72584],{},"数据存储在用户浏览器中",[30,72586,72587],{},"设置、读取方便、甚至页面刷新不丢失数据",[30,72589,72590],{},"容量较大，sessionStorage和localStorage约 5M 左右",[51,72592,72594],{"id":72593},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72596,72597],{},"只能存储字符串",[19,72599,72600],{},[938,72601],{"alt":104,"src":72602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72604,72605],{},[938,72606],{"alt":104,"src":72607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72609,72610],{},"键值对要加引号,不然就会当变量来看了",[19,72612,72613],{},"localStorage.setItem('uname', 'pink')",[19,72615,72616],{},"刷新之后信息不再丢失",[19,72618,72619],{},"操作key,value会跟着变",[19,72621,72622],{},"删除只删除键就可以,即名字",[19,72624,72613],{},[19,72626,72627],{},"改:",[19,72629,72630],{},"localStorage.setItem('uname','red')",[19,72632,72633],{},"有这个键就是改,没有这个键就是改",[19,72635,72636],{},[938,72637],{"alt":104,"src":72638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72640,72641],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72643,72644],{},[938,72645],{"alt":104,"src":72646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72648,72649],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[51,72651,72653],{"id":72652},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72655,72656],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72658,72659],{},"特性:",[765,72661,72662,72665,72668,72671],{},[30,72663,72664],{},"生命周期为关闭浏览器窗口",[30,72666,72667],{},"在同一个窗口(页面)下数据可以共享",[30,72669,72670],{},"以键值对的形式存储使用",[30,72672,72673],{},"用法跟localStorage 基本相同",[51,72675,72677],{"id":72676},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72679,72680],{},"本地只能存储字符串,无法直接存储复杂数据类型",[99,72682,72684],{"className":54242,"code":72683,"language":54244,"meta":104,"style":104},"\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",[106,72685,72686,72694,72699,72704,72709,72714,72718,72723,72728],{"__ignoreMap":104},[109,72687,72688,72690,72692],{"class":111,"line":112},[109,72689,1320],{"class":126},[109,72691,52988],{"class":52475},[109,72693,52482],{"class":126},[109,72695,72696],{"class":111,"line":119},[109,72697,72698],{"class":126},"    const obj = {\n",[109,72700,72701],{"class":111,"line":140},[109,72702,72703],{"class":126},"      uname: 'pink老师',\n",[109,72705,72706],{"class":111,"line":154},[109,72707,72708],{"class":126},"      age: 18,\n",[109,72710,72711],{"class":111,"line":161},[109,72712,72713],{"class":126},"      gender: '女'\n",[109,72715,72716],{"class":111,"line":167},[109,72717,1361],{"class":126},[109,72719,72720],{"class":111,"line":185},[109,72721,72722],{"class":126},"    \u002F\u002F 存储复杂数据类型\n",[109,72724,72725],{"class":111,"line":201},[109,72726,72727],{"class":126},"    localStorage.setItem('obj', obj)\n",[109,72729,72730,72732,72734],{"class":111,"line":206},[109,72731,53592],{"class":126},[109,72733,52988],{"class":52475},[109,72735,52482],{"class":126},[19,72737,72738],{},[938,72739],{"alt":104,"src":72740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72742,72743],{},"如果获取一下数据:",[19,72745,72746],{},"log(localStorage.getItem('obj'))",[19,72748,72749],{},[938,72750],{"alt":104,"src":72751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72753,72754],{},"发现直接存对象是使用不了的!!!",[23171,72756,72758],{"id":72757},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72760,72761],{},[938,72762],{"alt":104,"src":72763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[99,72765,72767],{"className":51808,"code":72766,"language":51810,"meta":104,"style":104},"\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",[106,72768,72769,72777,72787,72797,72806,72814,72818,72822,72848,72867,72875,72879,72884,72889],{"__ignoreMap":104},[109,72770,72771,72773,72775],{"class":111,"line":112},[109,72772,1320],{"class":126},[109,72774,52988],{"class":52475},[109,72776,52482],{"class":126},[109,72778,72779,72781,72783,72785],{"class":111,"line":119},[109,72780,619],{"class":122},[109,72782,71146],{"class":133},[109,72784,14737],{"class":122},[109,72786,16745],{"class":126},[109,72788,72789,72792,72795],{"class":111,"line":140},[109,72790,72791],{"class":126},"      uname: ",[109,72793,72794],{"class":278},"'pink老师'",[109,72796,32641],{"class":126},[109,72798,72799,72802,72804],{"class":111,"line":154},[109,72800,72801],{"class":126},"      age: ",[109,72803,2182],{"class":133},[109,72805,32641],{"class":126},[109,72807,72808,72811],{"class":111,"line":161},[109,72809,72810],{"class":126},"      gender: ",[109,72812,72813],{"class":278},"'女'\n",[109,72815,72816],{"class":111,"line":167},[109,72817,1361],{"class":126},[109,72819,72820],{"class":111,"line":185},[109,72821,72722],{"class":115},[109,72823,72824,72827,72830,72832,72835,72837,72840,72842,72845],{"class":111,"line":201},[109,72825,72826],{"class":126},"  localStorage.",[109,72828,72829],{"class":211},"setItem",[109,72831,714],{"class":126},[109,72833,72834],{"class":278},"'obj'",[109,72836,13608],{"class":126},[109,72838,72839],{"class":133},"JSON",[109,72841,2090],{"class":126},[109,72843,72844],{"class":211},"stringify",[109,72846,72847],{"class":126},"(obj))\n",[109,72849,72850,72853,72855,72858,72861,72863,72865],{"class":111,"line":206},[109,72851,72852],{"class":126},"  console.",[109,72854,59422],{"class":211},[109,72856,72857],{"class":126},"(localStorage.",[109,72859,72860],{"class":211},"getItem",[109,72862,714],{"class":126},[109,72864,72834],{"class":278},[109,72866,31672],{"class":126},[109,72868,72869,72871,72873],{"class":111,"line":218},[109,72870,53592],{"class":126},[109,72872,52988],{"class":52475},[109,72874,52482],{"class":126},[109,72876,72877],{"class":111,"line":223},[109,72878,71796],{"class":126},[109,72880,72881],{"class":111,"line":229},[109,72882,72883],{"class":126},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[109,72885,72886],{"class":111,"line":244},[109,72887,72888],{"class":126},"  类型是字符串的\n",[109,72890,72891],{"class":111,"line":258},[109,72892,72893],{"class":126},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23171,72895,72897],{"id":72896},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72899,72900],{},[938,72901],{"alt":104,"src":72902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72904,72905],{},[938,72906],{"alt":104,"src":72907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[99,72909,72911],{"className":54242,"code":72910,"language":54244,"meta":104,"style":104},"  \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",[106,72912,72913,72921,72925,72929,72933,72937,72941,72946,72951,72956,72961,72966,72971,72976,72981],{"__ignoreMap":104},[109,72914,72915,72917,72919],{"class":111,"line":112},[109,72916,53319],{"class":126},[109,72918,52988],{"class":52475},[109,72920,52482],{"class":126},[109,72922,72923],{"class":111,"line":119},[109,72924,72698],{"class":126},[109,72926,72927],{"class":111,"line":140},[109,72928,72703],{"class":126},[109,72930,72931],{"class":111,"line":154},[109,72932,72708],{"class":126},[109,72934,72935],{"class":111,"line":161},[109,72936,72713],{"class":126},[109,72938,72939],{"class":111,"line":167},[109,72940,1361],{"class":126},[109,72942,72943],{"class":111,"line":185},[109,72944,72945],{"class":126},"    \u002F\u002F 1.存储复杂数据类型\n",[109,72947,72948],{"class":111,"line":201},[109,72949,72950],{"class":126},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[109,72952,72953],{"class":111,"line":206},[109,72954,72955],{"class":126},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[109,72957,72958],{"class":111,"line":218},[109,72959,72960],{"class":126},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[109,72962,72963],{"class":111,"line":223},[109,72964,72965],{"class":126},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[109,72967,72968],{"class":111,"line":229},[109,72969,72970],{"class":126},"    \u002F\u002F 取\n",[109,72972,72973],{"class":111,"line":244},[109,72974,72975],{"class":126},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[109,72977,72978],{"class":111,"line":258},[109,72979,72980],{"class":126},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[109,72982,72983,72985,72987],{"class":111,"line":263},[109,72984,53592],{"class":126},[109,72986,52988],{"class":52475},[109,72988,52482],{"class":126},[19,72990,72991],{},[938,72992],{"alt":104,"src":72993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[51,72995,72997],{"id":72996},"_356-数组map方法","3.5.6 数组map方法",[19,72999,73000],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73002,73003],{},[938,73004],{"alt":104,"src":73005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73007,73008],{},[938,73009],{"alt":104,"src":73010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73012,73013,73016],{},[23,73014,73015],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73018,73019],{},"map有返回值，但是forEach没有返回值",[19,73021,73022],{},"map是个方法。用的时候要加 ()",[19,73024,73025],{},"map返回的是一个数组",[51,73027,73029],{"id":73028},"_357-数组中join方法","3.5.7 数组中join方法",[19,73031,73032],{},[938,73033],{"alt":104,"src":73034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73036,73037],{},"类似于python中拼接字符串一样！",[765,73039,73040,73043,73046],{},[30,73041,73042],{},"小括号为空则逗号分开",[30,73044,73045],{},"小括号为空字符串 ''，则元素之间没有分隔符",[30,73047,73048],{},"小括号用啥符号就用进行分割",[51,73050,73052],{"id":73051},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[765,73054,73055,73058,73061,73064,73067],{},[30,73056,73057],{},"记住本地时间获取快速方式：new Date().toDateString()",[30,73059,73060],{},"尽量减少DOM操作，用好map+join的渲染方式",[30,73062,73063],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[30,73065,73066],{},"return可以实现函数的结束",[30,73068,73069],{},"禁止跳转是 preventDefault() 不要忘记",[99,73071,73073],{"className":51808,"code":73072,"language":51810,"meta":104,"style":104},"\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",[106,73074,73075,73085,73099,73103,73111,73125,73145,73157,73165,73171,73181,73191,73195,73199,73205,73215,73227,73231,73235,73242,73254,73268,73278,73282,73286,73293,73300,73307,73319,73331,73341,73353,73357,73361,73368,73375,73387,73399,73409,73421,73451,73455,73459,73466,73478,73490,73514,73524,73534,73538,73542,73550,73561,73573,73585,73597,73614,73626,73638,73642,73646,73653,73665,73677,73689,73700,73718,73731,73743,73767,73778,73782,73786,73794,73804,73808,73812,73818,73830,73841,73851,73855,73859,73865,73887,73891,73895,73901,73907,73919,73929,73941,73971,73984,74001,74005,74009,74020,74042,74052,74056,74060,74073,74083,74095,74107,74119,74131,74141,74151,74161,74172,74185,74189,74197,74205,74209,74217,74230,74250,74283,74316,74349,74375,74393,74411,74419,74445,74463,74481,74499,74517,74535,74543,74551,74569,74577,74606,74614,74622,74630,74643,74655,74667,74679,74691,74703,74716,74728,74736,74744,74752,74757,74762,74766,74770,74774,74778,74782,74786,74791,74796,74801,74806,74814,74822,74830,74835,74840,74845,74850,74855,74860,74865,74870,74875,74880,74885,74890,74895,74900,74904,74909,74914,74924,74933,74937,74942,74951,74967,75009,75049,75088,75153,75161,75165,75170,75188,75196,75201,75206,75236,75242,75247,75260,75272,75284,75296,75308,75320,75332,75336,75346,75350,75355,75360,75364,75373,75377,75382,75387,75406,75411,75431,75435,75440,75444,75449,75467,75485,75503,75522,75541,75560,75565,75571,75592,75598,75607,75613,75619,75625,75652,75665,75670,75680,75686,75692,75698,75704,75709,75715,75721,75727,75733,75766,75771,75776,75781,75786,75792,75798,75804,75815,75820,75826,75833,75847,75853,75877,75882,75887,75893,75899,75920,75926,75939,75945,75951,75957,75963,75968,75974,75980,75986,76004,76018,76024,76032,76038,76060,76065,76070,76075,76080,76085,76094,76103,76108],{"__ignoreMap":104},[109,73076,73077,73079,73081,73083],{"class":111,"line":112},[109,73078,52472],{"class":126},[109,73080,52476],{"class":52475},[109,73082,52479],{"class":211},[109,73084,52482],{"class":126},[109,73086,73087,73089,73091,73093,73095,73097],{"class":111,"line":119},[109,73088,1320],{"class":126},[109,73090,51810],{"class":52475},[109,73092,52491],{"class":211},[109,73094,130],{"class":126},[109,73096,52496],{"class":278},[109,73098,52482],{"class":126},[109,73100,73101],{"class":111,"line":140},[109,73102,158],{"emptyLinePlaceholder":157},[109,73104,73105,73107,73109],{"class":111,"line":154},[109,73106,1320],{"class":126},[109,73108,52509],{"class":52475},[109,73110,52482],{"class":126},[109,73112,73113,73115,73117,73119,73121,73123],{"class":111,"line":161},[109,73114,53319],{"class":126},[109,73116,52519],{"class":52475},[109,73118,52522],{"class":211},[109,73120,130],{"class":126},[109,73122,52527],{"class":278},[109,73124,52482],{"class":126},[109,73126,73127,73129,73131,73133,73135,73137,73139,73141,73143],{"class":111,"line":167},[109,73128,53319],{"class":126},[109,73130,52519],{"class":52475},[109,73132,16093],{"class":211},[109,73134,130],{"class":126},[109,73136,52566],{"class":278},[109,73138,52546],{"class":211},[109,73140,130],{"class":126},[109,73142,52573],{"class":278},[109,73144,52482],{"class":126},[109,73146,73147,73149,73151,73153,73155],{"class":111,"line":185},[109,73148,53319],{"class":126},[109,73150,52582],{"class":52475},[109,73152,52585],{"class":126},[109,73154,52582],{"class":52475},[109,73156,52482],{"class":126},[109,73158,73159,73161,73163],{"class":111,"line":201},[109,73160,53319],{"class":126},[109,73162,1467],{"class":52475},[109,73164,52482],{"class":126},[109,73166,73167,73169],{"class":111,"line":206},[109,73168,7733],{"class":52475},[109,73170,16745],{"class":126},[109,73172,73173,73175,73177,73179],{"class":111,"line":218},[109,73174,55870],{"class":133},[109,73176,52612],{"class":126},[109,73178,1314],{"class":133},[109,73180,137],{"class":126},[109,73182,73183,73185,73187,73189],{"class":111,"line":223},[109,73184,55881],{"class":133},[109,73186,52612],{"class":126},[109,73188,1314],{"class":133},[109,73190,137],{"class":126},[109,73192,73193],{"class":111,"line":229},[109,73194,1361],{"class":126},[109,73196,73197],{"class":111,"line":244},[109,73198,158],{"emptyLinePlaceholder":157},[109,73200,73201,73203],{"class":111,"line":258},[109,73202,58454],{"class":52475},[109,73204,16745],{"class":126},[109,73206,73207,73209,73211,73213],{"class":111,"line":263},[109,73208,58461],{"class":133},[109,73210,52612],{"class":126},[109,73212,52767],{"class":133},[109,73214,137],{"class":126},[109,73216,73217,73219,73221,73223,73225],{"class":111,"line":269},[109,73218,63252],{"class":133},[109,73220,52612],{"class":126},[109,73222,2232],{"class":133},[109,73224,52667],{"class":122},[109,73226,137],{"class":126},[109,73228,73229],{"class":111,"line":304},[109,73230,1361],{"class":126},[109,73232,73233],{"class":111,"line":331},[109,73234,158],{"emptyLinePlaceholder":157},[109,73236,73237,73240],{"class":111,"line":336},[109,73238,73239],{"class":211},"    .info",[109,73241,16745],{"class":126},[109,73243,73244,73246,73248,73250,73252],{"class":111,"line":364},[109,73245,55946],{"class":133},[109,73247,52612],{"class":126},[109,73249,52664],{"class":133},[109,73251,52667],{"class":122},[109,73253,137],{"class":126},[109,73255,73256,73258,73260,73262,73264,73266],{"class":111,"line":391},[109,73257,55881],{"class":133},[109,73259,52612],{"class":126},[109,73261,1008],{"class":133},[109,73263,52667],{"class":122},[109,73265,52731],{"class":133},[109,73267,137],{"class":126},[109,73269,73270,73272,73274,73276],{"class":111,"line":396},[109,73271,58461],{"class":133},[109,73273,52612],{"class":126},[109,73275,52767],{"class":133},[109,73277,137],{"class":126},[109,73279,73280],{"class":111,"line":402},[109,73281,1361],{"class":126},[109,73283,73284],{"class":111,"line":419},[109,73285,158],{"emptyLinePlaceholder":157},[109,73287,73288,73291],{"class":111,"line":435},[109,73289,73290],{"class":211},"    .uname",[109,73292,32641],{"class":126},[109,73294,73295,73298],{"class":111,"line":440},[109,73296,73297],{"class":211},"    .age",[109,73299,32641],{"class":126},[109,73301,73302,73305],{"class":111,"line":467},[109,73303,73304],{"class":211},"    .salary",[109,73306,16745],{"class":126},[109,73308,73309,73311,73313,73315,73317],{"class":111,"line":494},[109,73310,55946],{"class":133},[109,73312,52612],{"class":126},[109,73314,1351],{"class":133},[109,73316,52667],{"class":122},[109,73318,137],{"class":126},[109,73320,73321,73323,73325,73327,73329],{"class":111,"line":499},[109,73322,55960],{"class":133},[109,73324,52612],{"class":126},[109,73326,2232],{"class":133},[109,73328,52667],{"class":122},[109,73330,137],{"class":126},[109,73332,73333,73335,73337,73339],{"class":111,"line":526},[109,73334,62955],{"class":133},[109,73336,52612],{"class":126},[109,73338,55912],{"class":133},[109,73340,137],{"class":126},[109,73342,73343,73345,73347,73349,73351],{"class":111,"line":552},[109,73344,62925],{"class":133},[109,73346,52612],{"class":126},[109,73348,2107],{"class":133},[109,73350,52667],{"class":122},[109,73352,137],{"class":126},[109,73354,73355],{"class":111,"line":557},[109,73356,1361],{"class":126},[109,73358,73359],{"class":111,"line":584},[109,73360,158],{"emptyLinePlaceholder":157},[109,73362,73363,73366],{"class":111,"line":611},[109,73364,73365],{"class":211},"    .gender",[109,73367,32641],{"class":126},[109,73369,73370,73373],{"class":111,"line":616},[109,73371,73372],{"class":211},"    .city",[109,73374,16745],{"class":126},[109,73376,73377,73379,73381,73383,73385],{"class":111,"line":633},[109,73378,55946],{"class":133},[109,73380,52612],{"class":126},[109,73382,1351],{"class":133},[109,73384,52667],{"class":122},[109,73386,137],{"class":126},[109,73388,73389,73391,73393,73395,73397],{"class":111,"line":649},[109,73390,55960],{"class":133},[109,73392,52612],{"class":126},[109,73394,2357],{"class":133},[109,73396,52667],{"class":122},[109,73398,137],{"class":126},[109,73400,73401,73403,73405,73407],{"class":111,"line":676},[109,73402,62955],{"class":133},[109,73404,52612],{"class":126},[109,73406,55912],{"class":133},[109,73408,137],{"class":126},[109,73410,73411,73413,73415,73417,73419],{"class":111,"line":703},[109,73412,62925],{"class":133},[109,73414,52612],{"class":126},[109,73416,2107],{"class":133},[109,73418,52667],{"class":122},[109,73420,137],{"class":126},[109,73422,73423,73425,73427,73429,73431,73433,73436,73438,73440,73442,73445,73447,73449],{"class":111,"line":708},[109,73424,63152],{"class":133},[109,73426,52612],{"class":126},[109,73428,1755],{"class":133},[109,73430,52667],{"class":122},[109,73432,52696],{"class":133},[109,73434,73435],{"class":133}," rgb",[109,73437,714],{"class":126},[109,73439,3098],{"class":133},[109,73441,13608],{"class":126},[109,73443,73444],{"class":133},"197",[109,73446,13608],{"class":126},[109,73448,73444],{"class":133},[109,73450,720],{"class":126},[109,73452,73453],{"class":111,"line":723},[109,73454,1361],{"class":126},[109,73456,73457],{"class":111,"line":728},[109,73458,158],{"emptyLinePlaceholder":157},[109,73460,73461,73464],{"class":111,"line":739},[109,73462,73463],{"class":52475},"    button",[109,73465,16745],{"class":126},[109,73467,73468,73470,73472,73474,73476],{"class":111,"line":9352},[109,73469,55960],{"class":133},[109,73471,52612],{"class":126},[109,73473,2357],{"class":133},[109,73475,52667],{"class":122},[109,73477,137],{"class":126},[109,73479,73480,73482,73484,73486,73488],{"class":111,"line":9364},[109,73481,55946],{"class":133},[109,73483,52612],{"class":126},[109,73485,2016],{"class":133},[109,73487,52667],{"class":122},[109,73489,137],{"class":126},[109,73491,73492,73494,73496,73499,73501,73503,73505,73508,73510,73512],{"class":111,"line":9376},[109,73493,56059],{"class":133},[109,73495,52612],{"class":126},[109,73497,73498],{"class":133},"rgb",[109,73500,714],{"class":126},[109,73502,2499],{"class":133},[109,73504,13608],{"class":126},[109,73506,73507],{"class":133},"187",[109,73509,13608],{"class":126},[109,73511,1837],{"class":133},[109,73513,720],{"class":126},[109,73515,73516,73518,73520,73522],{"class":111,"line":11034},[109,73517,58591],{"class":133},[109,73519,52612],{"class":126},[109,73521,62017],{"class":133},[109,73523,137],{"class":126},[109,73525,73526,73528,73530,73532],{"class":111,"line":11059},[109,73527,63152],{"class":133},[109,73529,52612],{"class":126},[109,73531,1314],{"class":133},[109,73533,137],{"class":126},[109,73535,73536],{"class":111,"line":11082},[109,73537,1361],{"class":126},[109,73539,73540],{"class":111,"line":11106},[109,73541,158],{"emptyLinePlaceholder":157},[109,73543,73544,73546,73548],{"class":111,"line":11111},[109,73545,73463],{"class":52475},[109,73547,52863],{"class":52475},[109,73549,16745],{"class":126},[109,73551,73552,73554,73556,73559],{"class":111,"line":11116},[109,73553,56184],{"class":133},[109,73555,52612],{"class":126},[109,73557,73558],{"class":133},"inline-block",[109,73560,137],{"class":126},[109,73562,73563,73565,73567,73569,73571],{"class":111,"line":11121},[109,73564,55946],{"class":133},[109,73566,52612],{"class":126},[109,73568,1008],{"class":133},[109,73570,52667],{"class":122},[109,73572,137],{"class":126},[109,73574,73575,73577,73579,73581,73583],{"class":111,"line":11130},[109,73576,55960],{"class":133},[109,73578,52612],{"class":126},[109,73580,1008],{"class":133},[109,73582,52667],{"class":122},[109,73584,137],{"class":126},[109,73586,73587,73589,73591,73593,73595],{"class":111,"line":11135},[109,73588,58534],{"class":133},[109,73590,52612],{"class":126},[109,73592,2005],{"class":133},[109,73594,52667],{"class":122},[109,73596,137],{"class":126},[109,73598,73599,73601,73603,73605,73607,73609,73612],{"class":111,"line":11141},[109,73600,63152],{"class":133},[109,73602,52612],{"class":126},[109,73604,1755],{"class":133},[109,73606,52667],{"class":122},[109,73608,52696],{"class":133},[109,73610,73611],{"class":133}," #fff",[109,73613,137],{"class":126},[109,73615,73616,73618,73620,73622,73624],{"class":111,"line":11162},[109,73617,56309],{"class":133},[109,73619,52612],{"class":126},[109,73621,1856],{"class":133},[109,73623,52667],{"class":122},[109,73625,137],{"class":126},[109,73627,73628,73630,73632,73634,73636],{"class":111,"line":11168},[109,73629,62925],{"class":133},[109,73631,52612],{"class":126},[109,73633,1755],{"class":133},[109,73635,52667],{"class":122},[109,73637,137],{"class":126},[109,73639,73640],{"class":111,"line":11182},[109,73641,1361],{"class":126},[109,73643,73644],{"class":111,"line":11188},[109,73645,158],{"emptyLinePlaceholder":157},[109,73647,73648,73651],{"class":111,"line":11215},[109,73649,73650],{"class":211},"    .total",[109,73652,16745],{"class":126},[109,73654,73655,73657,73659,73661,73663],{"class":111,"line":11224},[109,73656,55946],{"class":133},[109,73658,52612],{"class":126},[109,73660,62804],{"class":133},[109,73662,52667],{"class":122},[109,73664,137],{"class":126},[109,73666,73667,73669,73671,73673,73675],{"class":111,"line":11230},[109,73668,55960],{"class":133},[109,73670,52612],{"class":126},[109,73672,1937],{"class":133},[109,73674,52667],{"class":122},[109,73676,137],{"class":126},[109,73678,73679,73681,73683,73685,73687],{"class":111,"line":11238},[109,73680,58534],{"class":133},[109,73682,52612],{"class":126},[109,73684,1937],{"class":133},[109,73686,52667],{"class":122},[109,73688,137],{"class":126},[109,73690,73691,73693,73695,73698],{"class":111,"line":11243},[109,73692,58461],{"class":133},[109,73694,52612],{"class":126},[109,73696,73697],{"class":133},"right",[109,73699,137],{"class":126},[109,73701,73702,73704,73706,73708,73710,73712,73714,73716],{"class":111,"line":17777},[109,73703,55881],{"class":133},[109,73705,52612],{"class":126},[109,73707,1937],{"class":133},[109,73709,52667],{"class":122},[109,73711,52731],{"class":133},[109,73713,134],{"class":133},[109,73715,52667],{"class":122},[109,73717,137],{"class":126},[109,73719,73720,73723,73725,73727,73729],{"class":111,"line":17783},[109,73721,73722],{"class":133},"      padding-right",[109,73724,52612],{"class":126},[109,73726,1008],{"class":133},[109,73728,52667],{"class":122},[109,73730,137],{"class":126},[109,73732,73733,73735,73737,73739,73741],{"class":111,"line":17806},[109,73734,56097],{"class":133},[109,73736,52612],{"class":126},[109,73738,2055],{"class":133},[109,73740,52667],{"class":122},[109,73742,137],{"class":126},[109,73744,73745,73747,73749,73751,73753,73756,73758,73761,73763,73765],{"class":111,"line":17812},[109,73746,56059],{"class":133},[109,73748,52612],{"class":126},[109,73750,73498],{"class":133},[109,73752,714],{"class":126},[109,73754,73755],{"class":133},"237",[109,73757,13608],{"class":126},[109,73759,73760],{"class":133},"235",[109,73762,13608],{"class":126},[109,73764,73760],{"class":133},[109,73766,720],{"class":126},[109,73768,73769,73772,73774,73776],{"class":111,"line":17835},[109,73770,73771],{"class":133},"      box-sizing",[109,73773,52612],{"class":126},[109,73775,61680],{"class":133},[109,73777,137],{"class":126},[109,73779,73780],{"class":111,"line":17849},[109,73781,1361],{"class":126},[109,73783,73784],{"class":111,"line":17869},[109,73785,158],{"emptyLinePlaceholder":157},[109,73787,73788,73790,73792],{"class":111,"line":17875},[109,73789,73650],{"class":211},[109,73791,52863],{"class":52475},[109,73793,16745],{"class":126},[109,73795,73796,73798,73800,73802],{"class":111,"line":17886},[109,73797,58591],{"class":133},[109,73799,52612],{"class":126},[109,73801,58596],{"class":133},[109,73803,137],{"class":126},[109,73805,73806],{"class":111,"line":17909},[109,73807,1361],{"class":126},[109,73809,73810],{"class":111,"line":17931},[109,73811,158],{"emptyLinePlaceholder":157},[109,73813,73814,73816],{"class":111,"line":17936},[109,73815,66198],{"class":52475},[109,73817,16745],{"class":126},[109,73819,73820,73822,73824,73826,73828],{"class":111,"line":17942},[109,73821,55946],{"class":133},[109,73823,52612],{"class":126},[109,73825,62804],{"class":133},[109,73827,52667],{"class":122},[109,73829,137],{"class":126},[109,73831,73832,73834,73836,73839],{"class":111,"line":17956},[109,73833,55881],{"class":133},[109,73835,52612],{"class":126},[109,73837,73838],{"class":133},"auto",[109,73840,137],{"class":126},[109,73842,73843,73845,73847,73849],{"class":111,"line":17969},[109,73844,66205],{"class":133},[109,73846,52612],{"class":126},[109,73848,66210],{"class":133},[109,73850,137],{"class":126},[109,73852,73853],{"class":111,"line":17974},[109,73854,1361],{"class":126},[109,73856,73857],{"class":111,"line":17988},[109,73858,158],{"emptyLinePlaceholder":157},[109,73860,73861,73863],{"class":111,"line":17993},[109,73862,66290],{"class":52475},[109,73864,16745],{"class":126},[109,73866,73867,73869,73871,73873,73875,73877,73879,73881,73883,73885],{"class":111,"line":17999},[109,73868,56059],{"class":133},[109,73870,52612],{"class":126},[109,73872,73498],{"class":133},[109,73874,714],{"class":126},[109,73876,73755],{"class":133},[109,73878,13608],{"class":126},[109,73880,73760],{"class":133},[109,73882,13608],{"class":126},[109,73884,73760],{"class":133},[109,73886,720],{"class":126},[109,73888,73889],{"class":111,"line":18004},[109,73890,1361],{"class":126},[109,73892,73893],{"class":111,"line":18018},[109,73894,158],{"emptyLinePlaceholder":157},[109,73896,73897,73899],{"class":111,"line":18023},[109,73898,66290],{"class":52475},[109,73900,32641],{"class":126},[109,73902,73903,73905],{"class":111,"line":18028},[109,73904,66356],{"class":52475},[109,73906,16745],{"class":126},[109,73908,73909,73911,73913,73915,73917],{"class":111,"line":18042},[109,73910,55960],{"class":133},[109,73912,52612],{"class":126},[109,73914,1811],{"class":133},[109,73916,52667],{"class":122},[109,73918,137],{"class":126},[109,73920,73921,73923,73925,73927],{"class":111,"line":18054},[109,73922,58461],{"class":133},[109,73924,52612],{"class":126},[109,73926,24910],{"class":133},[109,73928,137],{"class":126},[109,73930,73931,73933,73935,73937,73939],{"class":111,"line":18059},[109,73932,56097],{"class":133},[109,73934,52612],{"class":126},[109,73936,2081],{"class":133},[109,73938,52667],{"class":122},[109,73940,137],{"class":126},[109,73942,73943,73945,73947,73949,73951,73953,73955,73957,73960,73962,73965,73967,73969],{"class":111,"line":18072},[109,73944,63152],{"class":133},[109,73946,52612],{"class":126},[109,73948,1755],{"class":133},[109,73950,52667],{"class":122},[109,73952,52696],{"class":133},[109,73954,73435],{"class":133},[109,73956,714],{"class":126},[109,73958,73959],{"class":133},"228",[109,73961,13608],{"class":126},[109,73963,73964],{"class":133},"225",[109,73966,13608],{"class":126},[109,73968,73964],{"class":133},[109,73970,720],{"class":126},[109,73972,73973,73976,73978,73980,73982],{"class":111,"line":18077},[109,73974,73975],{"class":133},"      padding-left",[109,73977,52612],{"class":126},[109,73979,1856],{"class":133},[109,73981,52667],{"class":122},[109,73983,137],{"class":126},[109,73985,73986,73988,73990,73992,73995,73997,73999],{"class":111,"line":18082},[109,73987,63035],{"class":133},[109,73989,52612],{"class":126},[109,73991,29296],{"class":133},[109,73993,73994],{"class":133}," linear",[109,73996,63042],{"class":133},[109,73998,2227],{"class":122},[109,74000,137],{"class":126},[109,74002,74003],{"class":111,"line":18087},[109,74004,1361],{"class":126},[109,74006,74007],{"class":111,"line":18100},[109,74008,158],{"emptyLinePlaceholder":157},[109,74010,74011,74014,74016,74018],{"class":111,"line":18105},[109,74012,74013],{"class":52475},"    tbody",[109,74015,71319],{"class":52475},[109,74017,62115],{"class":211},[109,74019,16745],{"class":126},[109,74021,74022,74024,74026,74028,74030,74032,74034,74036,74038,74040],{"class":111,"line":33808},[109,74023,56059],{"class":133},[109,74025,52612],{"class":126},[109,74027,73498],{"class":133},[109,74029,714],{"class":126},[109,74031,73755],{"class":133},[109,74033,13608],{"class":126},[109,74035,73760],{"class":133},[109,74037,13608],{"class":126},[109,74039,73760],{"class":133},[109,74041,720],{"class":126},[109,74043,74044,74046,74048,74050],{"class":111,"line":33814},[109,74045,63200],{"class":133},[109,74047,52612],{"class":126},[109,74049,63205],{"class":133},[109,74051,137],{"class":126},[109,74053,74054],{"class":111,"line":33820},[109,74055,1361],{"class":126},[109,74057,74058],{"class":111,"line":33826},[109,74059,158],{"emptyLinePlaceholder":157},[109,74061,74062,74064,74066,74069,74071],{"class":111,"line":33832},[109,74063,74013],{"class":52475},[109,74065,71319],{"class":52475},[109,74067,74068],{"class":52475}," td",[109,74070,2791],{"class":52475},[109,74072,16745],{"class":126},[109,74074,74075,74077,74079,74081],{"class":111,"line":33843},[109,74076,56184],{"class":133},[109,74078,52612],{"class":126},[109,74080,62044],{"class":133},[109,74082,137],{"class":126},[109,74084,74085,74087,74089,74091,74093],{"class":111,"line":33849},[109,74086,55946],{"class":133},[109,74088,52612],{"class":126},[109,74090,2438],{"class":133},[109,74092,52667],{"class":122},[109,74094,137],{"class":126},[109,74096,74097,74099,74101,74103,74105],{"class":111,"line":33869},[109,74098,55960],{"class":133},[109,74100,52612],{"class":126},[109,74102,2357],{"class":133},[109,74104,52667],{"class":122},[109,74106,137],{"class":126},[109,74108,74109,74111,74113,74115,74117],{"class":111,"line":33875},[109,74110,58534],{"class":133},[109,74112,52612],{"class":126},[109,74114,2357],{"class":133},[109,74116,52667],{"class":122},[109,74118,137],{"class":126},[109,74120,74121,74123,74125,74127,74129],{"class":111,"line":33886},[109,74122,63252],{"class":133},[109,74124,52612],{"class":126},[109,74126,1618],{"class":133},[109,74128,52667],{"class":122},[109,74130,137],{"class":126},[109,74132,74133,74135,74137,74139],{"class":111,"line":33892},[109,74134,58591],{"class":133},[109,74136,52612],{"class":126},[109,74138,62017],{"class":133},[109,74140,137],{"class":126},[109,74142,74143,74145,74147,74149],{"class":111,"line":33898},[109,74144,58461],{"class":133},[109,74146,52612],{"class":126},[109,74148,52767],{"class":133},[109,74150,137],{"class":126},[109,74152,74153,74155,74157,74159],{"class":111,"line":33904},[109,74154,65145],{"class":133},[109,74156,52612],{"class":126},[109,74158,55912],{"class":133},[109,74160,137],{"class":126},[109,74162,74163,74165,74167,74170],{"class":111,"line":33910},[109,74164,56059],{"class":133},[109,74166,52612],{"class":126},[109,74168,74169],{"class":133},"orange",[109,74171,137],{"class":126},[109,74173,74174,74176,74178,74181,74183],{"class":111,"line":33916},[109,74175,56309],{"class":133},[109,74177,52612],{"class":126},[109,74179,74180],{"class":133},"12.5",[109,74182,52667],{"class":122},[109,74184,137],{"class":126},[109,74186,74187],{"class":111,"line":33922},[109,74188,1361],{"class":126},[109,74190,74191,74193,74195],{"class":111,"line":33928},[109,74192,53592],{"class":126},[109,74194,1467],{"class":52475},[109,74196,52482],{"class":126},[109,74198,74199,74201,74203],{"class":111,"line":33948},[109,74200,52960],{"class":126},[109,74202,52509],{"class":52475},[109,74204,52482],{"class":126},[109,74206,74207],{"class":111,"line":33954},[109,74208,158],{"emptyLinePlaceholder":157},[109,74210,74211,74213,74215],{"class":111,"line":33970},[109,74212,1320],{"class":126},[109,74214,52975],{"class":52475},[109,74216,52482],{"class":126},[109,74218,74219,74221,74223,74226,74228],{"class":111,"line":33976},[109,74220,53319],{"class":126},[109,74222,14],{"class":52475},[109,74224,74225],{"class":126},">学生就业统计表\u003C\u002F",[109,74227,14],{"class":52475},[109,74229,52482],{"class":126},[109,74231,74232,74234,74236,74238,74240,74242,74244,74246,74248],{"class":111,"line":33990},[109,74233,53319],{"class":126},[109,74235,67800],{"class":52475},[109,74237,54661],{"class":211},[109,74239,130],{"class":126},[109,74241,63839],{"class":278},[109,74243,70245],{"class":211},[109,74245,130],{"class":126},[109,74247,32951],{"class":278},[109,74249,52482],{"class":126},[109,74251,74252,74254,74256,74258,74260,74262,74264,74266,74268,74270,74272,74275,74277,74279,74281],{"class":111,"line":33996},[109,74253,52516],{"class":126},[109,74255,54996],{"class":52475},[109,74257,54999],{"class":211},[109,74259,130],{"class":126},[109,74261,63874],{"class":278},[109,74263,16093],{"class":211},[109,74265,130],{"class":126},[109,74267,70271],{"class":278},[109,74269,62195],{"class":211},[109,74271,130],{"class":126},[109,74273,74274],{"class":278},"\"姓名\"",[109,74276,54661],{"class":211},[109,74278,130],{"class":126},[109,74280,70271],{"class":278},[109,74282,52482],{"class":126},[109,74284,74285,74287,74289,74291,74293,74295,74297,74299,74301,74303,74305,74308,74310,74312,74314],{"class":111,"line":34011},[109,74286,52516],{"class":126},[109,74288,54996],{"class":52475},[109,74290,54999],{"class":211},[109,74292,130],{"class":126},[109,74294,63874],{"class":278},[109,74296,16093],{"class":211},[109,74298,130],{"class":126},[109,74300,70299],{"class":278},[109,74302,62195],{"class":211},[109,74304,130],{"class":126},[109,74306,74307],{"class":278},"\"年龄\"",[109,74309,54661],{"class":211},[109,74311,130],{"class":126},[109,74313,70299],{"class":278},[109,74315,52482],{"class":126},[109,74317,74318,74320,74322,74324,74326,74328,74330,74332,74334,74336,74338,74341,74343,74345,74347],{"class":111,"line":34017},[109,74319,52516],{"class":126},[109,74321,54996],{"class":52475},[109,74323,54999],{"class":211},[109,74325,130],{"class":126},[109,74327,63874],{"class":278},[109,74329,16093],{"class":211},[109,74331,130],{"class":126},[109,74333,70401],{"class":278},[109,74335,62195],{"class":211},[109,74337,130],{"class":126},[109,74339,74340],{"class":278},"\"薪资\"",[109,74342,54661],{"class":211},[109,74344,130],{"class":126},[109,74346,70401],{"class":278},[109,74348,52482],{"class":126},[109,74350,74351,74353,74355,74357,74359,74361,74363,74365,74367,74369,74371,74373],{"class":111,"line":34026},[109,74352,52516],{"class":126},[109,74354,70319],{"class":52475},[109,74356,16093],{"class":211},[109,74358,130],{"class":126},[109,74360,70326],{"class":278},[109,74362,16132],{"class":211},[109,74364,130],{"class":126},[109,74366,8978],{"class":278},[109,74368,54661],{"class":211},[109,74370,130],{"class":126},[109,74372,70326],{"class":278},[109,74374,52482],{"class":126},[109,74376,74377,74379,74381,74383,74385,74387,74389,74391],{"class":111,"line":34032},[109,74378,56409],{"class":126},[109,74380,70341],{"class":52475},[109,74382,67826],{"class":211},[109,74384,130],{"class":126},[109,74386,11279],{"class":278},[109,74388,70350],{"class":126},[109,74390,70341],{"class":52475},[109,74392,52482],{"class":126},[109,74394,74395,74397,74399,74401,74403,74405,74407,74409],{"class":111,"line":34041},[109,74396,56409],{"class":126},[109,74398,70341],{"class":52475},[109,74400,67826],{"class":211},[109,74402,130],{"class":126},[109,74404,11348],{"class":278},[109,74406,70369],{"class":126},[109,74408,70341],{"class":52475},[109,74410,52482],{"class":126},[109,74412,74413,74415,74417],{"class":111,"line":34047},[109,74414,52951],{"class":126},[109,74416,70319],{"class":52475},[109,74418,52482],{"class":126},[109,74420,74421,74423,74425,74427,74429,74431,74433,74435,74437,74439,74441,74443],{"class":111,"line":34053},[109,74422,52516],{"class":126},[109,74424,70319],{"class":52475},[109,74426,16093],{"class":211},[109,74428,130],{"class":126},[109,74430,70423],{"class":278},[109,74432,16132],{"class":211},[109,74434,130],{"class":126},[109,74436,8978],{"class":278},[109,74438,54661],{"class":211},[109,74440,130],{"class":126},[109,74442,70423],{"class":278},[109,74444,52482],{"class":126},[109,74446,74447,74449,74451,74453,74455,74457,74459,74461],{"class":111,"line":34062},[109,74448,56409],{"class":126},[109,74450,70341],{"class":52475},[109,74452,67826],{"class":211},[109,74454,130],{"class":126},[109,74456,70444],{"class":278},[109,74458,70447],{"class":126},[109,74460,70341],{"class":52475},[109,74462,52482],{"class":126},[109,74464,74465,74467,74469,74471,74473,74475,74477,74479],{"class":111,"line":34068},[109,74466,56409],{"class":126},[109,74468,70341],{"class":52475},[109,74470,67826],{"class":211},[109,74472,130],{"class":126},[109,74474,70464],{"class":278},[109,74476,70467],{"class":126},[109,74478,70341],{"class":52475},[109,74480,52482],{"class":126},[109,74482,74483,74485,74487,74489,74491,74493,74495,74497],{"class":111,"line":34079},[109,74484,56409],{"class":126},[109,74486,70341],{"class":52475},[109,74488,67826],{"class":211},[109,74490,130],{"class":126},[109,74492,70484],{"class":278},[109,74494,70487],{"class":126},[109,74496,70341],{"class":52475},[109,74498,52482],{"class":126},[109,74500,74501,74503,74505,74507,74509,74511,74513,74515],{"class":111,"line":34085},[109,74502,56409],{"class":126},[109,74504,70341],{"class":52475},[109,74506,67826],{"class":211},[109,74508,130],{"class":126},[109,74510,70504],{"class":278},[109,74512,70507],{"class":126},[109,74514,70341],{"class":52475},[109,74516,52482],{"class":126},[109,74518,74519,74521,74523,74525,74527,74529,74531,74533],{"class":111,"line":34104},[109,74520,56409],{"class":126},[109,74522,70341],{"class":52475},[109,74524,67826],{"class":211},[109,74526,130],{"class":126},[109,74528,70524],{"class":278},[109,74530,70527],{"class":126},[109,74532,70341],{"class":52475},[109,74534,52482],{"class":126},[109,74536,74537,74539,74541],{"class":111,"line":34110},[109,74538,52951],{"class":126},[109,74540,70319],{"class":52475},[109,74542,52482],{"class":126},[109,74544,74545,74547,74549],{"class":111,"line":34121},[109,74546,52516],{"class":126},[109,74548,55062],{"class":52475},[109,74550,52482],{"class":126},[109,74552,74553,74555,74557,74560,74562,74565,74567],{"class":111,"line":34127},[109,74554,56409],{"class":126},[109,74556,109],{"class":52475},[109,74558,74559],{"class":126},">+\u003C\u002F",[109,74561,109],{"class":52475},[109,74563,74564],{"class":126},">添加\u003C\u002F",[109,74566,55062],{"class":52475},[109,74568,52482],{"class":126},[109,74570,74571,74573,74575],{"class":111,"line":34147},[109,74572,53592],{"class":126},[109,74574,67800],{"class":52475},[109,74576,52482],{"class":126},[109,74578,74579,74581,74583,74585,74587,74589,74592,74594,74597,74599,74602,74604],{"class":111,"line":34163},[109,74580,53319],{"class":126},[109,74582,52786],{"class":52475},[109,74584,54661],{"class":211},[109,74586,130],{"class":126},[109,74588,63755],{"class":278},[109,74590,74591],{"class":126},">共有数据 \u003C",[109,74593,109],{"class":52475},[109,74595,74596],{"class":126},">0\u003C\u002F",[109,74598,109],{"class":52475},[109,74600,74601],{"class":126},"> 条\u003C\u002F",[109,74603,52786],{"class":52475},[109,74605,52482],{"class":126},[109,74607,74608,74610,74612],{"class":111,"line":34169},[109,74609,53319],{"class":126},[109,74611,1677],{"class":52475},[109,74613,52482],{"class":126},[109,74615,74616,74618,74620],{"class":111,"line":34183},[109,74617,52516],{"class":126},[109,74619,1680],{"class":52475},[109,74621,52482],{"class":126},[109,74623,74624,74626,74628],{"class":111,"line":34189},[109,74625,56409],{"class":126},[109,74627,1683],{"class":52475},[109,74629,52482],{"class":126},[109,74631,74632,74634,74636,74639,74641],{"class":111,"line":34195},[109,74633,56477],{"class":126},[109,74635,1686],{"class":52475},[109,74637,74638],{"class":126},">ID\u003C\u002F",[109,74640,1686],{"class":52475},[109,74642,52482],{"class":126},[109,74644,74645,74647,74649,74651,74653],{"class":111,"line":34206},[109,74646,56477],{"class":126},[109,74648,1686],{"class":52475},[109,74650,70630],{"class":126},[109,74652,1686],{"class":52475},[109,74654,52482],{"class":126},[109,74656,74657,74659,74661,74663,74665],{"class":111,"line":34212},[109,74658,56477],{"class":126},[109,74660,1686],{"class":52475},[109,74662,70643],{"class":126},[109,74664,1686],{"class":52475},[109,74666,52482],{"class":126},[109,74668,74669,74671,74673,74675,74677],{"class":111,"line":34218},[109,74670,56477],{"class":126},[109,74672,1686],{"class":52475},[109,74674,70656],{"class":126},[109,74676,1686],{"class":52475},[109,74678,52482],{"class":126},[109,74680,74681,74683,74685,74687,74689],{"class":111,"line":34228},[109,74682,56477],{"class":126},[109,74684,1686],{"class":52475},[109,74686,70669],{"class":126},[109,74688,1686],{"class":52475},[109,74690,52482],{"class":126},[109,74692,74693,74695,74697,74699,74701],{"class":111,"line":34234},[109,74694,56477],{"class":126},[109,74696,1686],{"class":52475},[109,74698,70682],{"class":126},[109,74700,1686],{"class":52475},[109,74702,52482],{"class":126},[109,74704,74705,74707,74709,74712,74714],{"class":111,"line":34245},[109,74706,56477],{"class":126},[109,74708,1686],{"class":52475},[109,74710,74711],{"class":126},">录入时间\u003C\u002F",[109,74713,1686],{"class":52475},[109,74715,52482],{"class":126},[109,74717,74718,74720,74722,74724,74726],{"class":111,"line":34251},[109,74719,56477],{"class":126},[109,74721,1686],{"class":52475},[109,74723,70695],{"class":126},[109,74725,1686],{"class":52475},[109,74727,52482],{"class":126},[109,74729,74730,74732,74734],{"class":111,"line":34261},[109,74731,56582],{"class":126},[109,74733,1683],{"class":52475},[109,74735,52482],{"class":126},[109,74737,74738,74740,74742],{"class":111,"line":34266},[109,74739,52951],{"class":126},[109,74741,1680],{"class":52475},[109,74743,52482],{"class":126},[109,74745,74746,74748,74750],{"class":111,"line":34272},[109,74747,52516],{"class":126},[109,74749,1723],{"class":52475},[109,74751,52482],{"class":126},[109,74753,74754],{"class":111,"line":34321},[109,74755,74756],{"class":115},"      \u003C!-- \u003Ctr>\n",[109,74758,74759],{"class":111,"line":34368},[109,74760,74761],{"class":115},"        \u003Ctd>1\u003C\u002Ftd>\n",[109,74763,74764],{"class":111,"line":34373},[109,74765,74761],{"class":115},[109,74767,74768],{"class":111,"line":34379},[109,74769,74761],{"class":115},[109,74771,74772],{"class":111,"line":34398},[109,74773,74761],{"class":115},[109,74775,74776],{"class":111,"line":34404},[109,74777,74761],{"class":115},[109,74779,74780],{"class":111,"line":34424},[109,74781,74761],{"class":115},[109,74783,74784],{"class":111,"line":34430},[109,74785,74761],{"class":115},[109,74787,74788],{"class":111,"line":34436},[109,74789,74790],{"class":115},"        \u003Ctd>\n",[109,74792,74793],{"class":111,"line":34446},[109,74794,74795],{"class":115},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[109,74797,74798],{"class":111,"line":34451},[109,74799,74800],{"class":115},"        \u003C\u002Ftd>\n",[109,74802,74803],{"class":111,"line":34457},[109,74804,74805],{"class":115},"      \u003C\u002Ftr> -->\n",[109,74807,74808,74810,74812],{"class":111,"line":34473},[109,74809,52951],{"class":126},[109,74811,1723],{"class":52475},[109,74813,52482],{"class":126},[109,74815,74816,74818,74820],{"class":111,"line":34518},[109,74817,53592],{"class":126},[109,74819,1677],{"class":52475},[109,74821,52482],{"class":126},[109,74823,74824,74826,74828],{"class":111,"line":34524},[109,74825,53319],{"class":126},[109,74827,52988],{"class":52475},[109,74829,52482],{"class":126},[109,74831,74832],{"class":111,"line":34530},[109,74833,74834],{"class":115},"    \u002F\u002F const initData = [{\n",[109,74836,74837],{"class":111,"line":34536},[109,74838,74839],{"class":115},"    \u002F\u002F   unameId: 1,\n",[109,74841,74842],{"class":111,"line":34547},[109,74843,74844],{"class":115},"    \u002F\u002F   uname: '华晨宇',\n",[109,74846,74847],{"class":111,"line":34553},[109,74848,74849],{"class":115},"    \u002F\u002F   age: 22,\n",[109,74851,74852],{"class":111,"line":34559},[109,74853,74854],{"class":115},"    \u002F\u002F   salary: 12000,\n",[109,74856,74857],{"class":111,"line":34565},[109,74858,74859],{"class":115},"    \u002F\u002F   gender: '男',\n",[109,74861,74862],{"class":111,"line":34583},[109,74863,74864],{"class":115},"    \u002F\u002F   city: '北京',\n",[109,74866,74867],{"class":111,"line":34597},[109,74868,74869],{"class":115},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[109,74871,74872],{"class":111,"line":34606},[109,74873,74874],{"class":115},"    \u002F\u002F }]\n",[109,74876,74877],{"class":111,"line":34615},[109,74878,74879],{"class":115},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[109,74881,74882],{"class":111,"line":34624},[109,74883,74884],{"class":115},"    \u002F\u002F 1.渲染业务\n",[109,74886,74887],{"class":111,"line":34633},[109,74888,74889],{"class":115},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[109,74891,74892],{"class":111,"line":34639},[109,74893,74894],{"class":115},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[109,74896,74897],{"class":111,"line":34645},[109,74898,74899],{"class":115},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[109,74901,74902],{"class":111,"line":34653},[109,74903,158],{"emptyLinePlaceholder":157},[109,74905,74906],{"class":111,"line":34658},[109,74907,74908],{"class":115},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[109,74910,74911],{"class":111,"line":34664},[109,74912,74913],{"class":115},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[109,74915,74916,74918,74920,74922],{"class":111,"line":34675},[109,74917,619],{"class":122},[109,74919,58870],{"class":133},[109,74921,14737],{"class":122},[109,74923,53013],{"class":126},[109,74925,74926,74929,74931],{"class":111,"line":34681},[109,74927,74928],{"class":126},"    console.",[109,74930,59422],{"class":211},[109,74932,53587],{"class":126},[109,74934,74935],{"class":111,"line":34701},[109,74936,158],{"emptyLinePlaceholder":157},[109,74938,74939],{"class":111,"line":34707},[109,74940,74941],{"class":115},"    \u002F\u002F 时间函数\n",[109,74943,74944,74946,74949],{"class":111,"line":34713},[109,74945,71259],{"class":122},[109,74947,74948],{"class":211}," getTime",[109,74950,215],{"class":126},[109,74952,74953,74955,74958,74960,74962,74965],{"class":111,"line":34719},[109,74954,59403],{"class":122},[109,74956,74957],{"class":133}," date",[109,74959,14737],{"class":122},[109,74961,1001],{"class":122},[109,74963,74964],{"class":211}," Date",[109,74966,803],{"class":126},[109,74968,74969,74971,74973,74975,74978,74981,74983,74985,74987,74990,74993,74995,74997,74999,75001,75003,75005,75007],{"class":111,"line":34736},[109,74970,59403],{"class":122},[109,74972,17264],{"class":133},[109,74974,14737],{"class":122},[109,74976,74977],{"class":126}," date.",[109,74979,74980],{"class":211},"getHours",[109,74982,14223],{"class":126},[109,74984,1320],{"class":122},[109,74986,134],{"class":133},[109,74988,74989],{"class":122}," ?",[109,74991,74992],{"class":278}," '0'",[109,74994,46741],{"class":122},[109,74996,74977],{"class":126},[109,74998,74980],{"class":211},[109,75000,14223],{"class":126},[109,75002,2391],{"class":122},[109,75004,74977],{"class":126},[109,75006,74980],{"class":211},[109,75008,803],{"class":126},[109,75010,75011,75013,75016,75018,75020,75023,75025,75027,75029,75031,75033,75035,75037,75039,75041,75043,75045,75047],{"class":111,"line":34742},[109,75012,59403],{"class":122},[109,75014,75015],{"class":133}," m",[109,75017,14737],{"class":122},[109,75019,74977],{"class":126},[109,75021,75022],{"class":211},"getMinutes",[109,75024,14223],{"class":126},[109,75026,1320],{"class":122},[109,75028,134],{"class":133},[109,75030,74989],{"class":122},[109,75032,74992],{"class":278},[109,75034,46741],{"class":122},[109,75036,74977],{"class":126},[109,75038,75022],{"class":211},[109,75040,14223],{"class":126},[109,75042,2391],{"class":122},[109,75044,74977],{"class":126},[109,75046,75022],{"class":211},[109,75048,803],{"class":126},[109,75050,75051,75053,75055,75057,75059,75062,75064,75066,75068,75070,75072,75074,75076,75078,75080,75082,75084,75086],{"class":111,"line":34748},[109,75052,59403],{"class":122},[109,75054,9747],{"class":133},[109,75056,14737],{"class":122},[109,75058,74977],{"class":126},[109,75060,75061],{"class":211},"getSeconds",[109,75063,14223],{"class":126},[109,75065,1320],{"class":122},[109,75067,134],{"class":133},[109,75069,74989],{"class":122},[109,75071,74992],{"class":278},[109,75073,46741],{"class":122},[109,75075,74977],{"class":126},[109,75077,75061],{"class":211},[109,75079,14223],{"class":126},[109,75081,2391],{"class":122},[109,75083,74977],{"class":126},[109,75085,75061],{"class":211},[109,75087,803],{"class":126},[109,75089,75090,75092,75095,75097,75099,75102,75104,75107,75109,75112,75114,75116,75119,75121,75123,75125,75127,75129,75131,75134,75136,75139,75141,75144,75146,75148,75150],{"class":111,"line":34754},[109,75091,59403],{"class":122},[109,75093,75094],{"class":133}," str",[109,75096,14737],{"class":122},[109,75098,64078],{"class":278},[109,75100,75101],{"class":126},"date",[109,75103,2090],{"class":278},[109,75105,75106],{"class":211},"getFullYear",[109,75108,975],{"class":278},[109,75110,75111],{"class":278},"}\u002F${",[109,75113,75101],{"class":126},[109,75115,2090],{"class":278},[109,75117,75118],{"class":211},"getMonth",[109,75120,14223],{"class":278},[109,75122,1348],{"class":122},[109,75124,26293],{"class":133},[109,75126,75111],{"class":278},[109,75128,75101],{"class":126},[109,75130,2090],{"class":278},[109,75132,75133],{"class":211},"getDate",[109,75135,975],{"class":278},[109,75137,75138],{"class":278},"} ${",[109,75140,1951],{"class":126},[109,75142,75143],{"class":278},"}:${",[109,75145,2076],{"class":126},[109,75147,75143],{"class":278},[109,75149,2227],{"class":126},[109,75151,75152],{"class":278},"}`\n",[109,75154,75155,75158],{"class":111,"line":34760},[109,75156,75157],{"class":122},"      return",[109,75159,75160],{"class":126}," str\n",[109,75162,75163],{"class":111,"line":34766},[109,75164,1361],{"class":126},[109,75166,75167],{"class":111,"line":34793},[109,75168,75169],{"class":115},"    \u002F\u002F 渲染函数\n",[109,75171,75172,75174,75176,75178,75180,75182,75184,75186],{"class":111,"line":34817},[109,75173,619],{"class":122},[109,75175,70922],{"class":133},[109,75177,14737],{"class":122},[109,75179,55571],{"class":126},[109,75181,55574],{"class":211},[109,75183,714],{"class":126},[109,75185,70933],{"class":278},[109,75187,1330],{"class":126},[109,75189,75190,75192,75194],{"class":111,"line":34823},[109,75191,71259],{"class":122},[109,75193,71262],{"class":211},[109,75195,215],{"class":126},[109,75197,75198],{"class":111,"line":34829},[109,75199,75200],{"class":115},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[109,75202,75203],{"class":111,"line":34835},[109,75204,75205],{"class":115},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[109,75207,75208,75210,75213,75215,75217,75220,75222,75224,75226,75229,75231,75234],{"class":111,"line":34846},[109,75209,59403],{"class":122},[109,75211,75212],{"class":133}," trArr",[109,75214,14737],{"class":122},[109,75216,53140],{"class":126},[109,75218,75219],{"class":211},"map",[109,75221,714],{"class":126},[109,75223,55624],{"class":122},[109,75225,285],{"class":126},[109,75227,75228],{"class":6553},"ele",[109,75230,13608],{"class":126},[109,75232,75233],{"class":6553},"index",[109,75235,13615],{"class":126},[109,75237,75238,75240],{"class":111,"line":34857},[109,75239,15925],{"class":122},[109,75241,71343],{"class":278},[109,75243,75244],{"class":111,"line":34863},[109,75245,75246],{"class":278},"      \u003Ctr>\n",[109,75248,75249,75251,75253,75255,75258],{"class":111,"line":34880},[109,75250,71348],{"class":278},[109,75252,75228],{"class":126},[109,75254,2090],{"class":278},[109,75256,75257],{"class":126},"unameId",[109,75259,71363],{"class":278},[109,75261,75262,75264,75266,75268,75270],{"class":111,"line":34903},[109,75263,71348],{"class":278},[109,75265,75228],{"class":126},[109,75267,2090],{"class":278},[109,75269,71379],{"class":126},[109,75271,71363],{"class":278},[109,75273,75274,75276,75278,75280,75282],{"class":111,"line":34926},[109,75275,71348],{"class":278},[109,75277,75228],{"class":126},[109,75279,2090],{"class":278},[109,75281,71396],{"class":126},[109,75283,71363],{"class":278},[109,75285,75286,75288,75290,75292,75294],{"class":111,"line":34932},[109,75287,71348],{"class":278},[109,75289,75228],{"class":126},[109,75291,2090],{"class":278},[109,75293,71413],{"class":126},[109,75295,71363],{"class":278},[109,75297,75298,75300,75302,75304,75306],{"class":111,"line":34937},[109,75299,71348],{"class":278},[109,75301,75228],{"class":126},[109,75303,2090],{"class":278},[109,75305,71430],{"class":126},[109,75307,71363],{"class":278},[109,75309,75310,75312,75314,75316,75318],{"class":111,"line":34946},[109,75311,71348],{"class":278},[109,75313,75228],{"class":126},[109,75315,2090],{"class":278},[109,75317,71447],{"class":126},[109,75319,71363],{"class":278},[109,75321,75322,75324,75326,75328,75330],{"class":111,"line":34956},[109,75323,71348],{"class":278},[109,75325,75228],{"class":126},[109,75327,2090],{"class":278},[109,75329,3744],{"class":126},[109,75331,71363],{"class":278},[109,75333,75334],{"class":111,"line":34962},[109,75335,74790],{"class":278},[109,75337,75338,75341,75343],{"class":111,"line":34967},[109,75339,75340],{"class":278},"          \u003Ca href=\"#\" data-id=\"${",[109,75342,75233],{"class":126},[109,75344,75345],{"class":278},"}\">删除\u003C\u002Fa>\n",[109,75347,75348],{"class":111,"line":34973},[109,75349,74800],{"class":278},[109,75351,75352],{"class":111,"line":34986},[109,75353,75354],{"class":278},"      \u003C\u002Ftr>\n",[109,75356,75357],{"class":111,"line":34992},[109,75358,75359],{"class":278},"  `\n",[109,75361,75362],{"class":111,"line":35003},[109,75363,65990],{"class":126},[109,75365,75366,75368,75370],{"class":111,"line":35014},[109,75367,59419],{"class":126},[109,75369,59422],{"class":211},[109,75371,75372],{"class":126},"(trArr)\n",[109,75374,75375],{"class":111,"line":35033},[109,75376,158],{"emptyLinePlaceholder":157},[109,75378,75379],{"class":111,"line":50693},[109,75380,75381],{"class":115},"      \u002F\u002F (2) 把数组转换为字符串join\n",[109,75383,75384],{"class":111,"line":50698},[109,75385,75386],{"class":115},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[109,75388,75389,75391,75393,75396,75399,75401,75404],{"class":111,"line":50707},[109,75390,71274],{"class":126},[109,75392,130],{"class":122},[109,75394,75395],{"class":126}," trArr.",[109,75397,75398],{"class":211},"join",[109,75400,714],{"class":126},[109,75402,75403],{"class":278},"''",[109,75405,1330],{"class":126},[109,75407,75408],{"class":111,"line":50716},[109,75409,75410],{"class":115},"      \u002F\u002F 显示共有几条\n",[109,75412,75413,75415,75417,75419,75422,75425,75427,75429],{"class":111,"line":50721},[109,75414,56946],{"class":126},[109,75416,55574],{"class":211},[109,75418,714],{"class":126},[109,75420,75421],{"class":278},"'.total span'",[109,75423,75424],{"class":126},").innerHTML ",[109,75426,130],{"class":122},[109,75428,53140],{"class":126},[109,75430,57006],{"class":133},[109,75432,75433],{"class":111,"line":50726},[109,75434,1361],{"class":126},[109,75436,75437],{"class":111,"line":50731},[109,75438,75439],{"class":115},"    \u002F\u002F render()\n",[109,75441,75442],{"class":111,"line":50744},[109,75443,158],{"emptyLinePlaceholder":157},[109,75445,75446],{"class":111,"line":50749},[109,75447,75448],{"class":115},"    \u002F\u002F 获取DOM对象\n",[109,75450,75451,75453,75455,75457,75459,75461,75463,75465],{"class":111,"line":50758},[109,75452,619],{"class":122},[109,75454,70996],{"class":133},[109,75456,14737],{"class":122},[109,75458,55571],{"class":126},[109,75460,55574],{"class":211},[109,75462,714],{"class":126},[109,75464,71007],{"class":278},[109,75466,1330],{"class":126},[109,75468,75469,75471,75473,75475,75477,75479,75481,75483],{"class":111,"line":50767},[109,75470,619],{"class":122},[109,75472,70823],{"class":133},[109,75474,14737],{"class":122},[109,75476,55571],{"class":126},[109,75478,55574],{"class":211},[109,75480,714],{"class":126},[109,75482,70834],{"class":278},[109,75484,1330],{"class":126},[109,75486,75487,75489,75491,75493,75495,75497,75499,75501],{"class":111,"line":50784},[109,75488,619],{"class":122},[109,75490,16862],{"class":133},[109,75492,14737],{"class":122},[109,75494,55571],{"class":126},[109,75496,55574],{"class":211},[109,75498,714],{"class":126},[109,75500,70853],{"class":278},[109,75502,1330],{"class":126},[109,75504,75506,75508,75510,75512,75514,75516,75518,75520],{"class":111,"line":75505},231,[109,75507,619],{"class":122},[109,75509,70882],{"class":133},[109,75511,14737],{"class":122},[109,75513,55571],{"class":126},[109,75515,55574],{"class":211},[109,75517,714],{"class":126},[109,75519,70893],{"class":278},[109,75521,1330],{"class":126},[109,75523,75525,75527,75529,75531,75533,75535,75537,75539],{"class":111,"line":75524},232,[109,75526,619],{"class":122},[109,75528,70862],{"class":133},[109,75530,14737],{"class":122},[109,75532,55571],{"class":126},[109,75534,55574],{"class":211},[109,75536,714],{"class":126},[109,75538,70873],{"class":278},[109,75540,1330],{"class":126},[109,75542,75544,75546,75548,75550,75552,75554,75556,75558],{"class":111,"line":75543},233,[109,75545,619],{"class":122},[109,75547,70902],{"class":133},[109,75549,14737],{"class":122},[109,75551,55571],{"class":126},[109,75553,55574],{"class":211},[109,75555,714],{"class":126},[109,75557,70913],{"class":278},[109,75559,1330],{"class":126},[109,75561,75563],{"class":111,"line":75562},234,[109,75564,158],{"emptyLinePlaceholder":157},[109,75566,75568],{"class":111,"line":75567},235,[109,75569,75570],{"class":115},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[109,75572,75574,75576,75578,75580,75582,75584,75586,75588,75590],{"class":111,"line":75573},236,[109,75575,71014],{"class":126},[109,75577,58988],{"class":211},[109,75579,714],{"class":126},[109,75581,71021],{"class":278},[109,75583,13608],{"class":126},[109,75585,55624],{"class":122},[109,75587,285],{"class":126},[109,75589,1615],{"class":6553},[109,75591,13615],{"class":126},[109,75593,75595],{"class":111,"line":75594},237,[109,75596,75597],{"class":115},"      \u002F\u002F 禁止浏览器跳转\n",[109,75599,75601,75603,75605],{"class":111,"line":75600},238,[109,75602,71041],{"class":126},[109,75604,71044],{"class":211},[109,75606,803],{"class":126},[109,75608,75610],{"class":111,"line":75609},239,[109,75611,75612],{"class":115},"      \u002F\u002F 非空判断\n",[109,75614,75616],{"class":111,"line":75615},240,[109,75617,75618],{"class":115},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[109,75620,75622],{"class":111,"line":75621},241,[109,75623,75624],{"class":115},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[109,75626,75628,75630,75632,75634,75637,75639,75642,75645,75647,75649],{"class":111,"line":75627},242,[109,75629,55655],{"class":122},[109,75631,285],{"class":126},[109,75633,1764],{"class":122},[109,75635,75636],{"class":126},"uname.value ",[109,75638,72532],{"class":122},[109,75640,75641],{"class":122}," !",[109,75643,75644],{"class":126},"age.value ",[109,75646,72532],{"class":122},[109,75648,75641],{"class":122},[109,75650,75651],{"class":126},"salary.value) {\n",[109,75653,75655,75657,75659,75661,75663],{"class":111,"line":75654},243,[109,75656,15925],{"class":122},[109,75658,71115],{"class":211},[109,75660,714],{"class":126},[109,75662,71120],{"class":278},[109,75664,1330],{"class":126},[109,75666,75668],{"class":111,"line":75667},244,[109,75669,53573],{"class":126},[109,75671,75673,75675,75677],{"class":111,"line":75672},245,[109,75674,59182],{"class":126},[109,75676,53059],{"class":211},[109,75678,75679],{"class":126},"({\n",[109,75681,75683],{"class":111,"line":75682},246,[109,75684,75685],{"class":115},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[109,75687,75689],{"class":111,"line":75688},247,[109,75690,75691],{"class":115},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[109,75693,75695],{"class":111,"line":75694},248,[109,75696,75697],{"class":115},"        \u002F\u002F 对象的序号应为数组长度+1\n",[109,75699,75701],{"class":111,"line":75700},249,[109,75702,75703],{"class":115},"        \u002F\u002F unameId: arr.length + 1,\n",[109,75705,75707],{"class":111,"line":75706},250,[109,75708,158],{"emptyLinePlaceholder":157},[109,75710,75712],{"class":111,"line":75711},251,[109,75713,75714],{"class":115},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[109,75716,75718],{"class":111,"line":75717},252,[109,75719,75720],{"class":115},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[109,75722,75724],{"class":111,"line":75723},253,[109,75725,75726],{"class":115},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[109,75728,75730],{"class":111,"line":75729},254,[109,75731,75732],{"class":115},"        \u002F\u002F 0当假看\n",[109,75734,75736,75739,75741,75743,75746,75748,75750,75752,75755,75757,75759,75762,75764],{"class":111,"line":75735},255,[109,75737,75738],{"class":126},"        unameId: arr.",[109,75740,53143],{"class":133},[109,75742,74989],{"class":122},[109,75744,75745],{"class":126}," arr[arr.",[109,75747,53143],{"class":133},[109,75749,53446],{"class":122},[109,75751,26293],{"class":133},[109,75753,75754],{"class":126},"].unameId ",[109,75756,1348],{"class":122},[109,75758,26293],{"class":133},[109,75760,75761],{"class":122}," :",[109,75763,26293],{"class":133},[109,75765,32641],{"class":126},[109,75767,75769],{"class":111,"line":75768},256,[109,75770,71168],{"class":126},[109,75772,75774],{"class":111,"line":75773},257,[109,75775,71173],{"class":126},[109,75777,75779],{"class":111,"line":75778},258,[109,75780,71183],{"class":126},[109,75782,75784],{"class":111,"line":75783},259,[109,75785,71178],{"class":126},[109,75787,75789],{"class":111,"line":75788},260,[109,75790,75791],{"class":126},"        city: city.value,\n",[109,75793,75795],{"class":111,"line":75794},261,[109,75796,75797],{"class":115},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[109,75799,75801],{"class":111,"line":75800},262,[109,75802,75803],{"class":115},"        \u002F\u002F time: new Date().toDateString()\n",[109,75805,75807,75810,75813],{"class":111,"line":75806},263,[109,75808,75809],{"class":126},"        time: ",[109,75811,75812],{"class":211},"getTime",[109,75814,803],{"class":126},[109,75816,75818],{"class":111,"line":75817},264,[109,75819,65990],{"class":126},[109,75821,75823],{"class":111,"line":75822},265,[109,75824,75825],{"class":115},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[109,75827,75829,75831],{"class":111,"line":75828},266,[109,75830,71243],{"class":211},[109,75832,803],{"class":126},[109,75834,75836,75838,75840,75842,75844],{"class":111,"line":75835},267,[109,75837,71226],{"class":133},[109,75839,2090],{"class":126},[109,75841,71231],{"class":211},[109,75843,14223],{"class":126},[109,75845,75846],{"class":115},"\u002F\u002F重置表单\n",[109,75848,75850],{"class":111,"line":75849},268,[109,75851,75852],{"class":115},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[109,75854,75856,75859,75861,75863,75866,75868,75870,75872,75874],{"class":111,"line":75855},269,[109,75857,75858],{"class":126},"      localStorage.",[109,75860,72829],{"class":211},[109,75862,714],{"class":126},[109,75864,75865],{"class":278},"'data'",[109,75867,13608],{"class":126},[109,75869,72839],{"class":133},[109,75871,2090],{"class":126},[109,75873,72844],{"class":211},[109,75875,75876],{"class":126},"(arr))\n",[109,75878,75880],{"class":111,"line":75879},270,[109,75881,34636],{"class":126},[109,75883,75885],{"class":111,"line":75884},271,[109,75886,158],{"emptyLinePlaceholder":157},[109,75888,75890],{"class":111,"line":75889},272,[109,75891,75892],{"class":115},"    \u002F\u002F 3.删除业务\n",[109,75894,75896],{"class":111,"line":75895},273,[109,75897,75898],{"class":115},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[109,75900,75902,75904,75906,75908,75910,75912,75914,75916,75918],{"class":111,"line":75901},274,[109,75903,71516],{"class":126},[109,75905,58988],{"class":211},[109,75907,714],{"class":126},[109,75909,58993],{"class":278},[109,75911,13608],{"class":126},[109,75913,55624],{"class":122},[109,75915,285],{"class":126},[109,75917,1615],{"class":6553},[109,75919,13615],{"class":126},[109,75921,75923],{"class":111,"line":75922},275,[109,75924,75925],{"class":115},"      \u002F\u002F 判断是否点击的是删除按钮\n",[109,75927,75929,75931,75933,75935,75937],{"class":111,"line":75928},276,[109,75930,55655],{"class":122},[109,75932,68209],{"class":126},[109,75934,55661],{"class":122},[109,75936,69431],{"class":278},[109,75938,13615],{"class":126},[109,75940,75942],{"class":111,"line":75941},277,[109,75943,75944],{"class":115},"        \u002F\u002F alert(1)\n",[109,75946,75948],{"class":111,"line":75947},278,[109,75949,75950],{"class":115},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[109,75952,75954],{"class":111,"line":75953},279,[109,75955,75956],{"class":115},"        \u002F\u002F console.log(e.target)\n",[109,75958,75960],{"class":111,"line":75959},280,[109,75961,75962],{"class":115},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[109,75964,75966],{"class":111,"line":75965},281,[109,75967,158],{"emptyLinePlaceholder":157},[109,75969,75971],{"class":111,"line":75970},282,[109,75972,75973],{"class":115},"        \u002F\u002F 确认框，确然是否真的要删除\n",[109,75975,75977],{"class":111,"line":75976},283,[109,75978,75979],{"class":115},"        \u002F\u002F confirm()为确认框\n",[109,75981,75983],{"class":111,"line":75982},284,[109,75984,75985],{"class":115},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[109,75987,75989,75991,75993,75996,75998,76001],{"class":111,"line":75988},285,[109,75990,3852],{"class":122},[109,75992,285],{"class":126},[109,75994,75995],{"class":211},"confirm",[109,75997,714],{"class":126},[109,75999,76000],{"class":278},"'您确定要删除这条数据吗？'",[109,76002,76003],{"class":126},")) {\n",[109,76005,76007,76010,76012,76014,76016],{"class":111,"line":76006},286,[109,76008,76009],{"class":126},"          arr.",[109,76011,59185],{"class":211},[109,76013,71569],{"class":126},[109,76015,1755],{"class":133},[109,76017,1330],{"class":126},[109,76019,76021],{"class":111,"line":76020},287,[109,76022,76023],{"class":115},"          \u002F\u002F 3.4 重新渲染页面\n",[109,76025,76027,76030],{"class":111,"line":76026},288,[109,76028,76029],{"class":211},"          render",[109,76031,803],{"class":126},[109,76033,76035],{"class":111,"line":76034},289,[109,76036,76037],{"class":115},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[109,76039,76041,76044,76046,76048,76050,76052,76054,76056,76058],{"class":111,"line":76040},290,[109,76042,76043],{"class":126},"          localStorage.",[109,76045,72829],{"class":211},[109,76047,714],{"class":126},[109,76049,75865],{"class":278},[109,76051,13608],{"class":126},[109,76053,72839],{"class":133},[109,76055,2090],{"class":126},[109,76057,72844],{"class":211},[109,76059,75876],{"class":126},[109,76061,76063],{"class":111,"line":76062},291,[109,76064,3884],{"class":126},[109,76066,76068],{"class":111,"line":76067},292,[109,76069,53573],{"class":126},[109,76071,76073],{"class":111,"line":76072},293,[109,76074,158],{"emptyLinePlaceholder":157},[109,76076,76078],{"class":111,"line":76077},294,[109,76079,34636],{"class":126},[109,76081,76083],{"class":111,"line":76082},295,[109,76084,158],{"emptyLinePlaceholder":157},[109,76086,76088,76090,76092],{"class":111,"line":76087},296,[109,76089,53592],{"class":126},[109,76091,52988],{"class":52475},[109,76093,52482],{"class":126},[109,76095,76097,76099,76101],{"class":111,"line":76096},297,[109,76098,52960],{"class":126},[109,76100,52975],{"class":52475},[109,76102,52482],{"class":126},[109,76104,76106],{"class":111,"line":76105},298,[109,76107,158],{"emptyLinePlaceholder":157},[109,76109,76111,76113,76115],{"class":111,"line":76110},299,[109,76112,52960],{"class":126},[109,76114,51810],{"class":52475},[109,76116,52482],{"class":126},[14,76118,76120],{"id":76119},"_36-正则表达式","3.6 正则表达式",[19,76122,76123],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76125,76126],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76128,76129],{},"正则表达式的作用：",[27,76131,76132,76139,76145],{},[30,76133,76134,76135,76138],{},"表单验证（ ",[23,76136,76137],{},"匹配"," ）",[30,76140,76141,76142,76138],{},"过滤敏感词（ ",[23,76143,76144],{},"替换",[30,76146,76147,76148,76138],{},"字符串中提取我们想要的部分（ ",[23,76149,76150],{},"提取",[51,76152,76154],{"id":76153},"_361-语法","3.6.1 语法",[19,76156,76157],{},"正则表达式使用步骤：",[765,76159,76160,76163],{},[30,76161,76162],{},"定义规则",[30,76164,76165],{},"查找是否匹配",[19,76167,76168],{},"正则表达式里边不需要写引号",[19,76170,76171],{},[938,76172],{"alt":104,"src":76173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76175,76176],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76178,76179],{},"reg.test(str)",[19,76181,76182],{},[938,76183],{"alt":104,"src":76184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76186,76187],{},[938,76188],{"alt":104,"src":76189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[51,76191,76193],{"id":76192},"_362-元字符","3.6.2 元字符",[765,76195,76196,76199,76202,76205,76212],{},[30,76197,76198],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[30,76200,76201],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[30,76203,76204],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[30,76206,76207,76208],{},"正则验证工具：",[1776,76209,76210],{"href":76210,"rel":76211},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25039],[30,76213,76214],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23171,76216,76218],{"id":76217},"_3621-边界符","3.6.2.1 边界符",[19,76220,76221],{},[938,76222],{"alt":104,"src":76223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76225,76226],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76228,76229],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76231,76232],{},"只匹配一次",[19,76234,76235],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23171,76237,76239],{"id":76238},"_3622-量词","3.6.2.2 量词",[19,76241,76242],{},[938,76243],{"alt":104,"src":76244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76246,76247],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23171,76249,76251],{"id":76250},"_3623-元字符","3.6.2.3 元字符",[19,76253,76254],{},[938,76255],{"alt":104,"src":76256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76258,76259],{},"匹配的是a或b或c []只选一个",[19,76261,76262],{},[938,76263],{"alt":104,"src":76264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76266,76267],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76269,76270],{},[938,76271],{"alt":104,"src":76272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76274,76275],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76277,76278],{},[938,76279],{"alt":104,"src":76280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[99,76282,76284],{"className":51808,"code":76283,"language":51810,"meta":104,"style":104},"\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",[106,76285,76286,76296,76310,76314,76322,76336,76356,76368,76376,76380,76388,76396,76401,76432,76459,76487,76491,76496,76524,76555,76560,76565,76596,76628,76660,76664,76669,76700,76730,76760,76764,76769,76800,76831,76861,76891,76895,76900,76933,76937,76942,76973,77004,77008,77013,77044,77074,77105,77109,77114,77146,77177,77208,77235,77266,77298,77331,77362,77393,77425,77456,77464,77472,77476],{"__ignoreMap":104},[109,76287,76288,76290,76292,76294],{"class":111,"line":112},[109,76289,52472],{"class":126},[109,76291,52476],{"class":52475},[109,76293,52479],{"class":211},[109,76295,52482],{"class":126},[109,76297,76298,76300,76302,76304,76306,76308],{"class":111,"line":119},[109,76299,1320],{"class":126},[109,76301,51810],{"class":52475},[109,76303,52491],{"class":211},[109,76305,130],{"class":126},[109,76307,52496],{"class":278},[109,76309,52482],{"class":126},[109,76311,76312],{"class":111,"line":140},[109,76313,158],{"emptyLinePlaceholder":157},[109,76315,76316,76318,76320],{"class":111,"line":154},[109,76317,1320],{"class":126},[109,76319,52509],{"class":52475},[109,76321,52482],{"class":126},[109,76323,76324,76326,76328,76330,76332,76334],{"class":111,"line":161},[109,76325,53319],{"class":126},[109,76327,52519],{"class":52475},[109,76329,52522],{"class":211},[109,76331,130],{"class":126},[109,76333,52527],{"class":278},[109,76335,52482],{"class":126},[109,76337,76338,76340,76342,76344,76346,76348,76350,76352,76354],{"class":111,"line":167},[109,76339,53319],{"class":126},[109,76341,52519],{"class":52475},[109,76343,16093],{"class":211},[109,76345,130],{"class":126},[109,76347,52566],{"class":278},[109,76349,52546],{"class":211},[109,76351,130],{"class":126},[109,76353,52573],{"class":278},[109,76355,52482],{"class":126},[109,76357,76358,76360,76362,76364,76366],{"class":111,"line":185},[109,76359,53319],{"class":126},[109,76361,52582],{"class":52475},[109,76363,52585],{"class":126},[109,76365,52582],{"class":52475},[109,76367,52482],{"class":126},[109,76369,76370,76372,76374],{"class":111,"line":201},[109,76371,52960],{"class":126},[109,76373,52509],{"class":52475},[109,76375,52482],{"class":126},[109,76377,76378],{"class":111,"line":206},[109,76379,158],{"emptyLinePlaceholder":157},[109,76381,76382,76384,76386],{"class":111,"line":218},[109,76383,1320],{"class":126},[109,76385,52975],{"class":52475},[109,76387,52482],{"class":126},[109,76389,76390,76392,76394],{"class":111,"line":223},[109,76391,53319],{"class":126},[109,76393,52988],{"class":52475},[109,76395,52482],{"class":126},[109,76397,76398],{"class":111,"line":229},[109,76399,76400],{"class":115},"    \u002F\u002F 元字符中\n",[109,76402,76403,76405,76407,76409,76411,76414,76416,76418,76421,76423,76426,76429],{"class":111,"line":244},[109,76404,74928],{"class":126},[109,76406,59422],{"class":211},[109,76408,714],{"class":126},[109,76410,2116],{"class":278},[109,76412,76413],{"class":49152},"哈",[109,76415,2116],{"class":278},[109,76417,2090],{"class":126},[109,76419,76420],{"class":211},"test",[109,76422,714],{"class":126},[109,76424,76425],{"class":278},"'哈'",[109,76427,76428],{"class":126},"))  ",[109,76430,76431],{"class":115},"\u002F\u002Ftrue\n",[109,76433,76434,76436,76438,76440,76442,76444,76446,76448,76450,76452,76455,76457],{"class":111,"line":258},[109,76435,74928],{"class":126},[109,76437,59422],{"class":211},[109,76439,714],{"class":126},[109,76441,2116],{"class":278},[109,76443,76413],{"class":49152},[109,76445,2116],{"class":278},[109,76447,2090],{"class":126},[109,76449,76420],{"class":211},[109,76451,714],{"class":126},[109,76453,76454],{"class":278},"'哈哈'",[109,76456,76428],{"class":126},[109,76458,76431],{"class":115},[109,76460,76461,76463,76465,76467,76469,76471,76473,76475,76477,76479,76482,76485],{"class":111,"line":263},[109,76462,74928],{"class":126},[109,76464,59422],{"class":211},[109,76466,714],{"class":126},[109,76468,2116],{"class":278},[109,76470,76413],{"class":49152},[109,76472,2116],{"class":278},[109,76474,2090],{"class":126},[109,76476,76420],{"class":211},[109,76478,714],{"class":126},[109,76480,76481],{"class":278},"'二哈'",[109,76483,76484],{"class":126},"))   ",[109,76486,76431],{"class":115},[109,76488,76489],{"class":111,"line":269},[109,76490,158],{"emptyLinePlaceholder":157},[109,76492,76493],{"class":111,"line":304},[109,76494,76495],{"class":115},"    \u002F\u002F 1.边界符\n",[109,76497,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522],{"class":111,"line":331},[109,76499,74928],{"class":126},[109,76501,59422],{"class":211},[109,76503,714],{"class":126},[109,76505,2116],{"class":278},[109,76507,2496],{"class":122},[109,76509,76413],{"class":49152},[109,76511,2116],{"class":278},[109,76513,2090],{"class":126},[109,76515,76420],{"class":211},[109,76517,714],{"class":126},[109,76519,76425],{"class":278},[109,76521,76428],{"class":126},[109,76523,76431],{"class":115},[109,76525,76526,76528,76530,76532,76534,76536,76538,76540,76542,76544,76546,76548,76550,76552],{"class":111,"line":336},[109,76527,74928],{"class":126},[109,76529,59422],{"class":211},[109,76531,714],{"class":126},[109,76533,2116],{"class":278},[109,76535,2496],{"class":122},[109,76537,76413],{"class":49152},[109,76539,1840],{"class":122},[109,76541,2116],{"class":278},[109,76543,2090],{"class":126},[109,76545,76420],{"class":211},[109,76547,714],{"class":126},[109,76549,76454],{"class":278},[109,76551,76428],{"class":126},[109,76553,76554],{"class":115},"\u002F\u002Ffalse\n",[109,76556,76557],{"class":111,"line":364},[109,76558,76559],{"class":115},"    \u002F\u002F 2.量词\n",[109,76561,76562],{"class":111,"line":391},[109,76563,76564],{"class":115},"    \u002F\u002F 量词 * 类似于 >= 0\n",[109,76566,76567,76569,76571,76573,76575,76577,76579,76582,76584,76586,76588,76590,76592,76594],{"class":111,"line":396},[109,76568,74928],{"class":126},[109,76570,59422],{"class":211},[109,76572,714],{"class":126},[109,76574,2116],{"class":278},[109,76576,2496],{"class":122},[109,76578,76413],{"class":49152},[109,76580,76581],{"class":122},"*$",[109,76583,2116],{"class":278},[109,76585,2090],{"class":126},[109,76587,76420],{"class":211},[109,76589,714],{"class":126},[109,76591,76454],{"class":278},[109,76593,76428],{"class":126},[109,76595,76431],{"class":115},[109,76597,76598,76600,76602,76604,76606,76608,76610,76612,76614,76616,76618,76620,76623,76625],{"class":111,"line":402},[109,76599,74928],{"class":126},[109,76601,59422],{"class":211},[109,76603,714],{"class":126},[109,76605,2116],{"class":278},[109,76607,2496],{"class":122},[109,76609,76413],{"class":49152},[109,76611,76581],{"class":122},[109,76613,2116],{"class":278},[109,76615,2090],{"class":126},[109,76617,76420],{"class":211},[109,76619,714],{"class":126},[109,76621,76622],{"class":278},"'二哈好傻'",[109,76624,76428],{"class":126},[109,76626,76627],{"class":115},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[109,76629,76630,76632,76634,76636,76638,76640,76642,76644,76646,76648,76650,76652,76655,76657],{"class":111,"line":419},[109,76631,74928],{"class":126},[109,76633,59422],{"class":211},[109,76635,714],{"class":126},[109,76637,2116],{"class":278},[109,76639,2496],{"class":122},[109,76641,76413],{"class":49152},[109,76643,76581],{"class":122},[109,76645,2116],{"class":278},[109,76647,2090],{"class":126},[109,76649,76420],{"class":211},[109,76651,714],{"class":126},[109,76653,76654],{"class":278},"'哈好哈'",[109,76656,76484],{"class":126},[109,76658,76659],{"class":115},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[109,76661,76662],{"class":111,"line":435},[109,76663,158],{"emptyLinePlaceholder":157},[109,76665,76666],{"class":111,"line":440},[109,76667,76668],{"class":115},"    \u002F\u002F +类似于>=1\n",[109,76670,76671,76673,76675,76677,76679,76681,76683,76686,76688,76690,76692,76694,76696,76698],{"class":111,"line":467},[109,76672,74928],{"class":126},[109,76674,59422],{"class":211},[109,76676,714],{"class":126},[109,76678,2116],{"class":278},[109,76680,2496],{"class":122},[109,76682,76413],{"class":49152},[109,76684,76685],{"class":122},"+$",[109,76687,2116],{"class":278},[109,76689,2090],{"class":126},[109,76691,76420],{"class":211},[109,76693,714],{"class":126},[109,76695,76454],{"class":278},[109,76697,76428],{"class":126},[109,76699,76431],{"class":115},[109,76701,76702,76704,76706,76708,76710,76712,76714,76716,76718,76720,76722,76724,76726,76728],{"class":111,"line":494},[109,76703,74928],{"class":126},[109,76705,59422],{"class":211},[109,76707,714],{"class":126},[109,76709,2116],{"class":278},[109,76711,2496],{"class":122},[109,76713,76413],{"class":49152},[109,76715,76685],{"class":122},[109,76717,2116],{"class":278},[109,76719,2090],{"class":126},[109,76721,76420],{"class":211},[109,76723,714],{"class":126},[109,76725,76622],{"class":278},[109,76727,76428],{"class":126},[109,76729,76627],{"class":115},[109,76731,76732,76734,76736,76738,76740,76742,76744,76746,76748,76750,76752,76754,76756,76758],{"class":111,"line":499},[109,76733,74928],{"class":126},[109,76735,59422],{"class":211},[109,76737,714],{"class":126},[109,76739,2116],{"class":278},[109,76741,2496],{"class":122},[109,76743,76413],{"class":49152},[109,76745,76685],{"class":122},[109,76747,2116],{"class":278},[109,76749,2090],{"class":126},[109,76751,76420],{"class":211},[109,76753,714],{"class":126},[109,76755,76654],{"class":278},[109,76757,76484],{"class":126},[109,76759,76554],{"class":115},[109,76761,76762],{"class":111,"line":526},[109,76763,158],{"emptyLinePlaceholder":157},[109,76765,76766],{"class":111,"line":552},[109,76767,76768],{"class":115},"    \u002F\u002F ?类似于0次或一次\n",[109,76770,76771,76773,76775,76777,76779,76781,76784,76786,76788,76790,76792,76794,76796,76798],{"class":111,"line":557},[109,76772,74928],{"class":126},[109,76774,59422],{"class":211},[109,76776,714],{"class":126},[109,76778,2116],{"class":278},[109,76780,2496],{"class":122},[109,76782,76783],{"class":49152},"哈？",[109,76785,1840],{"class":122},[109,76787,2116],{"class":278},[109,76789,2090],{"class":126},[109,76791,76420],{"class":211},[109,76793,714],{"class":126},[109,76795,75403],{"class":278},[109,76797,76484],{"class":126},[109,76799,76431],{"class":115},[109,76801,76802,76804,76806,76808,76810,76812,76814,76817,76819,76821,76823,76825,76827,76829],{"class":111,"line":584},[109,76803,74928],{"class":126},[109,76805,59422],{"class":211},[109,76807,714],{"class":126},[109,76809,2116],{"class":278},[109,76811,2496],{"class":122},[109,76813,76413],{"class":49152},[109,76815,76816],{"class":122},"?$",[109,76818,2116],{"class":278},[109,76820,2090],{"class":126},[109,76822,76420],{"class":211},[109,76824,714],{"class":126},[109,76826,76454],{"class":278},[109,76828,76428],{"class":126},[109,76830,76554],{"class":115},[109,76832,76833,76835,76837,76839,76841,76843,76845,76847,76849,76851,76853,76855,76857,76859],{"class":111,"line":611},[109,76834,74928],{"class":126},[109,76836,59422],{"class":211},[109,76838,714],{"class":126},[109,76840,2116],{"class":278},[109,76842,2496],{"class":122},[109,76844,76413],{"class":49152},[109,76846,76816],{"class":122},[109,76848,2116],{"class":278},[109,76850,2090],{"class":126},[109,76852,76420],{"class":211},[109,76854,714],{"class":126},[109,76856,76622],{"class":278},[109,76858,76428],{"class":126},[109,76860,76627],{"class":115},[109,76862,76863,76865,76867,76869,76871,76873,76875,76877,76879,76881,76883,76885,76887,76889],{"class":111,"line":616},[109,76864,74928],{"class":126},[109,76866,59422],{"class":211},[109,76868,714],{"class":126},[109,76870,2116],{"class":278},[109,76872,2496],{"class":122},[109,76874,76413],{"class":49152},[109,76876,76816],{"class":122},[109,76878,2116],{"class":278},[109,76880,2090],{"class":126},[109,76882,76420],{"class":211},[109,76884,714],{"class":126},[109,76886,76654],{"class":278},[109,76888,76428],{"class":126},[109,76890,76554],{"class":115},[109,76892,76893],{"class":111,"line":633},[109,76894,158],{"emptyLinePlaceholder":157},[109,76896,76897],{"class":111,"line":649},[109,76898,76899],{"class":115},"    \u002F\u002F {n}写几，就必须出现几次\n",[109,76901,76902,76904,76906,76908,76910,76912,76914,76917,76919,76921,76923,76925,76928,76931],{"class":111,"line":676},[109,76903,74928],{"class":126},[109,76905,59422],{"class":211},[109,76907,714],{"class":126},[109,76909,2116],{"class":278},[109,76911,2496],{"class":122},[109,76913,76413],{"class":49152},[109,76915,76916],{"class":122},"{4}$",[109,76918,2116],{"class":278},[109,76920,2090],{"class":126},[109,76922,76420],{"class":211},[109,76924,714],{"class":126},[109,76926,76927],{"class":278},"'哈哈哈哈'",[109,76929,76930],{"class":126},")) ",[109,76932,76431],{"class":115},[109,76934,76935],{"class":111,"line":703},[109,76936,158],{"emptyLinePlaceholder":157},[109,76938,76939],{"class":111,"line":708},[109,76940,76941],{"class":115},"    \u002F\u002F {n,}大于等于n次\n",[109,76943,76944,76946,76948,76950,76952,76954,76956,76959,76961,76963,76965,76967,76969,76971],{"class":111,"line":723},[109,76945,74928],{"class":126},[109,76947,59422],{"class":211},[109,76949,714],{"class":126},[109,76951,2116],{"class":278},[109,76953,2496],{"class":122},[109,76955,76413],{"class":49152},[109,76957,76958],{"class":122},"{4,}$",[109,76960,2116],{"class":278},[109,76962,2090],{"class":126},[109,76964,76420],{"class":211},[109,76966,714],{"class":126},[109,76968,76927],{"class":278},[109,76970,76930],{"class":126},[109,76972,76431],{"class":115},[109,76974,76975,76977,76979,76981,76983,76985,76987,76989,76991,76993,76995,76997,77000,77002],{"class":111,"line":728},[109,76976,74928],{"class":126},[109,76978,59422],{"class":211},[109,76980,714],{"class":126},[109,76982,2116],{"class":278},[109,76984,2496],{"class":122},[109,76986,76413],{"class":49152},[109,76988,76958],{"class":122},[109,76990,2116],{"class":278},[109,76992,2090],{"class":126},[109,76994,76420],{"class":211},[109,76996,714],{"class":126},[109,76998,76999],{"class":278},"'哈哈哈哈哈'",[109,77001,76930],{"class":126},[109,77003,76431],{"class":115},[109,77005,77006],{"class":111,"line":739},[109,77007,158],{"emptyLinePlaceholder":157},[109,77009,77010],{"class":111,"line":9352},[109,77011,77012],{"class":115},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[109,77014,77015,77017,77019,77021,77023,77025,77027,77030,77032,77034,77036,77038,77040,77042],{"class":111,"line":9364},[109,77016,74928],{"class":126},[109,77018,59422],{"class":211},[109,77020,714],{"class":126},[109,77022,2116],{"class":278},[109,77024,2496],{"class":122},[109,77026,76413],{"class":49152},[109,77028,77029],{"class":122},"{4,6}$",[109,77031,2116],{"class":278},[109,77033,2090],{"class":126},[109,77035,76420],{"class":211},[109,77037,714],{"class":126},[109,77039,76927],{"class":278},[109,77041,76930],{"class":126},[109,77043,76431],{"class":115},[109,77045,77046,77048,77050,77052,77054,77056,77058,77060,77062,77064,77066,77068,77070,77072],{"class":111,"line":9376},[109,77047,74928],{"class":126},[109,77049,59422],{"class":211},[109,77051,714],{"class":126},[109,77053,2116],{"class":278},[109,77055,2496],{"class":122},[109,77057,76413],{"class":49152},[109,77059,77029],{"class":122},[109,77061,2116],{"class":278},[109,77063,2090],{"class":126},[109,77065,76420],{"class":211},[109,77067,714],{"class":126},[109,77069,76999],{"class":278},[109,77071,76930],{"class":126},[109,77073,76431],{"class":115},[109,77075,77076,77078,77080,77082,77084,77086,77088,77090,77092,77094,77096,77098,77101,77103],{"class":111,"line":11034},[109,77077,74928],{"class":126},[109,77079,59422],{"class":211},[109,77081,714],{"class":126},[109,77083,2116],{"class":278},[109,77085,2496],{"class":122},[109,77087,76413],{"class":49152},[109,77089,77029],{"class":122},[109,77091,2116],{"class":278},[109,77093,2090],{"class":126},[109,77095,76420],{"class":211},[109,77097,714],{"class":126},[109,77099,77100],{"class":278},"'哈哈哈哈哈哈哈'",[109,77102,76930],{"class":126},[109,77104,76554],{"class":115},[109,77106,77107],{"class":111,"line":11059},[109,77108,158],{"emptyLinePlaceholder":157},[109,77110,77111],{"class":111,"line":11082},[109,77112,77113],{"class":115},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[109,77115,77116,77118,77120,77122,77124,77126,77129,77131,77133,77135,77137,77139,77142,77144],{"class":111,"line":11106},[109,77117,74928],{"class":126},[109,77119,59422],{"class":211},[109,77121,714],{"class":126},[109,77123,2116],{"class":278},[109,77125,2496],{"class":122},[109,77127,77128],{"class":133},"[abc]",[109,77130,1840],{"class":122},[109,77132,2116],{"class":278},[109,77134,2090],{"class":126},[109,77136,76420],{"class":211},[109,77138,714],{"class":126},[109,77140,77141],{"class":278},"'a'",[109,77143,76428],{"class":126},[109,77145,76431],{"class":115},[109,77147,77148,77150,77152,77154,77156,77158,77160,77162,77164,77166,77168,77170,77173,77175],{"class":111,"line":11111},[109,77149,74928],{"class":126},[109,77151,59422],{"class":211},[109,77153,714],{"class":126},[109,77155,2116],{"class":278},[109,77157,2496],{"class":122},[109,77159,77128],{"class":133},[109,77161,1840],{"class":122},[109,77163,2116],{"class":278},[109,77165,2090],{"class":126},[109,77167,76420],{"class":211},[109,77169,714],{"class":126},[109,77171,77172],{"class":278},"'b'",[109,77174,76428],{"class":126},[109,77176,76431],{"class":115},[109,77178,77179,77181,77183,77185,77187,77189,77191,77193,77195,77197,77199,77201,77204,77206],{"class":111,"line":11116},[109,77180,74928],{"class":126},[109,77182,59422],{"class":211},[109,77184,714],{"class":126},[109,77186,2116],{"class":278},[109,77188,2496],{"class":122},[109,77190,77128],{"class":133},[109,77192,1840],{"class":122},[109,77194,2116],{"class":278},[109,77196,2090],{"class":126},[109,77198,76420],{"class":211},[109,77200,714],{"class":126},[109,77202,77203],{"class":278},"'c'",[109,77205,76428],{"class":126},[109,77207,76431],{"class":115},[109,77209,77210,77212,77214,77216,77218,77220,77222,77224,77226,77228,77231,77233],{"class":111,"line":11121},[109,77211,74928],{"class":126},[109,77213,59422],{"class":211},[109,77215,714],{"class":126},[109,77217,2116],{"class":278},[109,77219,77128],{"class":133},[109,77221,2116],{"class":278},[109,77223,2090],{"class":126},[109,77225,76420],{"class":211},[109,77227,714],{"class":126},[109,77229,77230],{"class":278},"'ab'",[109,77232,76428],{"class":126},[109,77234,76431],{"class":115},[109,77236,77237,77239,77241,77243,77245,77247,77249,77251,77253,77255,77257,77259,77261,77263],{"class":111,"line":11130},[109,77238,74928],{"class":126},[109,77240,59422],{"class":211},[109,77242,714],{"class":126},[109,77244,2116],{"class":278},[109,77246,2496],{"class":122},[109,77248,77128],{"class":133},[109,77250,1840],{"class":122},[109,77252,2116],{"class":278},[109,77254,2090],{"class":126},[109,77256,76420],{"class":211},[109,77258,714],{"class":126},[109,77260,77230],{"class":278},[109,77262,76428],{"class":126},[109,77264,77265],{"class":115},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[109,77267,77268,77270,77272,77274,77276,77278,77280,77283,77285,77287,77289,77291,77293,77295],{"class":111,"line":11135},[109,77269,74928],{"class":126},[109,77271,59422],{"class":211},[109,77273,714],{"class":126},[109,77275,2116],{"class":278},[109,77277,2496],{"class":122},[109,77279,77128],{"class":133},[109,77281,77282],{"class":122},"{2}$",[109,77284,2116],{"class":278},[109,77286,2090],{"class":126},[109,77288,76420],{"class":211},[109,77290,714],{"class":126},[109,77292,77230],{"class":278},[109,77294,76428],{"class":126},[109,77296,77297],{"class":115},"\u002F\u002Ftrue   可以选两个\n",[109,77299,77300,77302,77304,77306,77308,77310,77313,77315,77317,77319,77321,77323,77326,77328],{"class":111,"line":11141},[109,77301,74928],{"class":126},[109,77303,59422],{"class":211},[109,77305,714],{"class":126},[109,77307,2116],{"class":278},[109,77309,2496],{"class":122},[109,77311,77312],{"class":133},"[a-z]",[109,77314,1840],{"class":122},[109,77316,2116],{"class":278},[109,77318,2090],{"class":126},[109,77320,76420],{"class":211},[109,77322,714],{"class":126},[109,77324,77325],{"class":278},"'p'",[109,77327,76484],{"class":126},[109,77329,77330],{"class":115},"\u002F\u002Ftrue   依然只能选一个\n",[109,77332,77333,77335,77337,77339,77341,77343,77346,77348,77350,77352,77354,77356,77358,77360],{"class":111,"line":11162},[109,77334,74928],{"class":126},[109,77336,59422],{"class":211},[109,77338,714],{"class":126},[109,77340,2116],{"class":278},[109,77342,2496],{"class":122},[109,77344,77345],{"class":133},"[A-Z]",[109,77347,1840],{"class":122},[109,77349,2116],{"class":278},[109,77351,2090],{"class":126},[109,77353,76420],{"class":211},[109,77355,714],{"class":126},[109,77357,77325],{"class":278},[109,77359,76484],{"class":126},[109,77361,76554],{"class":115},[109,77363,77364,77366,77368,77370,77372,77374,77376,77378,77380,77382,77384,77386,77389,77391],{"class":111,"line":11168},[109,77365,74928],{"class":126},[109,77367,59422],{"class":211},[109,77369,714],{"class":126},[109,77371,2116],{"class":278},[109,77373,2496],{"class":122},[109,77375,77345],{"class":133},[109,77377,1840],{"class":122},[109,77379,2116],{"class":278},[109,77381,2090],{"class":126},[109,77383,76420],{"class":211},[109,77385,714],{"class":126},[109,77387,77388],{"class":278},"'P'",[109,77390,76484],{"class":126},[109,77392,76431],{"class":115},[109,77394,77395,77397,77399,77401,77403,77405,77408,77410,77412,77414,77416,77418,77421,77423],{"class":111,"line":11182},[109,77396,74928],{"class":126},[109,77398,59422],{"class":211},[109,77400,714],{"class":126},[109,77402,2116],{"class":278},[109,77404,2496],{"class":122},[109,77406,77407],{"class":133},"[0-9]",[109,77409,1840],{"class":122},[109,77411,2116],{"class":278},[109,77413,2090],{"class":126},[109,77415,76420],{"class":211},[109,77417,714],{"class":126},[109,77419,77420],{"class":278},"'0'",[109,77422,76484],{"class":126},[109,77424,76431],{"class":115},[109,77426,77427,77429,77431,77433,77435,77437,77440,77442,77444,77446,77448,77450,77452,77454],{"class":111,"line":11188},[109,77428,74928],{"class":126},[109,77430,59422],{"class":211},[109,77432,714],{"class":126},[109,77434,2116],{"class":278},[109,77436,2496],{"class":122},[109,77438,77439],{"class":133},"[a-zA-Z0-9]",[109,77441,1840],{"class":122},[109,77443,2116],{"class":278},[109,77445,2090],{"class":126},[109,77447,76420],{"class":211},[109,77449,714],{"class":126},[109,77451,77325],{"class":278},[109,77453,76428],{"class":126},[109,77455,76431],{"class":115},[109,77457,77458,77460,77462],{"class":111,"line":11215},[109,77459,53592],{"class":126},[109,77461,52988],{"class":52475},[109,77463,52482],{"class":126},[109,77465,77466,77468,77470],{"class":111,"line":11224},[109,77467,52960],{"class":126},[109,77469,52975],{"class":52475},[109,77471,52482],{"class":126},[109,77473,77474],{"class":111,"line":11230},[109,77475,158],{"emptyLinePlaceholder":157},[109,77477,77478,77480,77482],{"class":111,"line":11238},[109,77479,52960],{"class":126},[109,77481,51810],{"class":52475},[109,77483,52482],{"class":126},[23171,77485,77487],{"id":77486},"_3624-修饰符","3.6.2.4 修饰符",[19,77489,77490],{},[938,77491],{"alt":104,"src":77492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77494,77495],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77497,77498],{},[938,77499],{"alt":104,"src":77500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[99,77502,77504],{"className":51808,"code":77503,"language":51810,"meta":104,"style":104},"\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",[106,77505,77506,77516,77530,77538,77552,77572,77584,77592,77600,77608,77640,77671,77676,77708,77719,77752,77761,77769,77777],{"__ignoreMap":104},[109,77507,77508,77510,77512,77514],{"class":111,"line":112},[109,77509,52472],{"class":126},[109,77511,52476],{"class":52475},[109,77513,52479],{"class":211},[109,77515,52482],{"class":126},[109,77517,77518,77520,77522,77524,77526,77528],{"class":111,"line":119},[109,77519,1320],{"class":126},[109,77521,51810],{"class":52475},[109,77523,52491],{"class":211},[109,77525,130],{"class":126},[109,77527,52496],{"class":278},[109,77529,52482],{"class":126},[109,77531,77532,77534,77536],{"class":111,"line":140},[109,77533,1320],{"class":126},[109,77535,52509],{"class":52475},[109,77537,52482],{"class":126},[109,77539,77540,77542,77544,77546,77548,77550],{"class":111,"line":154},[109,77541,53319],{"class":126},[109,77543,52519],{"class":52475},[109,77545,52522],{"class":211},[109,77547,130],{"class":126},[109,77549,52527],{"class":278},[109,77551,52482],{"class":126},[109,77553,77554,77556,77558,77560,77562,77564,77566,77568,77570],{"class":111,"line":161},[109,77555,53319],{"class":126},[109,77557,52519],{"class":52475},[109,77559,16093],{"class":211},[109,77561,130],{"class":126},[109,77563,52566],{"class":278},[109,77565,52546],{"class":211},[109,77567,130],{"class":126},[109,77569,52573],{"class":278},[109,77571,52482],{"class":126},[109,77573,77574,77576,77578,77580,77582],{"class":111,"line":167},[109,77575,53319],{"class":126},[109,77577,52582],{"class":52475},[109,77579,52585],{"class":126},[109,77581,52582],{"class":52475},[109,77583,52482],{"class":126},[109,77585,77586,77588,77590],{"class":111,"line":185},[109,77587,52960],{"class":126},[109,77589,52509],{"class":52475},[109,77591,52482],{"class":126},[109,77593,77594,77596,77598],{"class":111,"line":201},[109,77595,1320],{"class":126},[109,77597,52975],{"class":52475},[109,77599,52482],{"class":126},[109,77601,77602,77604,77606],{"class":111,"line":206},[109,77603,53319],{"class":126},[109,77605,52988],{"class":52475},[109,77607,52482],{"class":126},[109,77609,77610,77612,77614,77616,77618,77620,77623,77625,77627,77629,77631,77633,77636,77638],{"class":111,"line":218},[109,77611,74928],{"class":126},[109,77613,59422],{"class":211},[109,77615,714],{"class":126},[109,77617,2116],{"class":278},[109,77619,2496],{"class":122},[109,77621,77622],{"class":49152},"java",[109,77624,1840],{"class":122},[109,77626,2116],{"class":278},[109,77628,2090],{"class":126},[109,77630,76420],{"class":211},[109,77632,714],{"class":126},[109,77634,77635],{"class":278},"'java'",[109,77637,76930],{"class":126},[109,77639,76431],{"class":115},[109,77641,77642,77644,77646,77648,77650,77652,77654,77656,77658,77660,77662,77664,77667,77669],{"class":111,"line":223},[109,77643,74928],{"class":126},[109,77645,59422],{"class":211},[109,77647,714],{"class":126},[109,77649,2116],{"class":278},[109,77651,2496],{"class":122},[109,77653,77622],{"class":49152},[109,77655,1840],{"class":122},[109,77657,2116],{"class":278},[109,77659,2090],{"class":126},[109,77661,76420],{"class":211},[109,77663,714],{"class":126},[109,77665,77666],{"class":278},"'Java'",[109,77668,76930],{"class":126},[109,77670,76554],{"class":115},[109,77672,77673],{"class":111,"line":229},[109,77674,77675],{"class":115},"    \u002F\u002F 不区分大小写、\n",[109,77677,77678,77680,77682,77684,77686,77688,77690,77692,77694,77696,77698,77700,77702,77704,77706],{"class":111,"line":244},[109,77679,74928],{"class":126},[109,77681,59422],{"class":211},[109,77683,714],{"class":126},[109,77685,2116],{"class":278},[109,77687,2496],{"class":122},[109,77689,77622],{"class":49152},[109,77691,1840],{"class":122},[109,77693,2116],{"class":278},[109,77695,1345],{"class":122},[109,77697,2090],{"class":126},[109,77699,76420],{"class":211},[109,77701,714],{"class":126},[109,77703,77666],{"class":278},[109,77705,76930],{"class":126},[109,77707,76431],{"class":115},[109,77709,77710,77712,77714,77716],{"class":111,"line":258},[109,77711,619],{"class":122},[109,77713,75094],{"class":133},[109,77715,14737],{"class":122},[109,77717,77718],{"class":278}," 'java是一门编程语言，学完java工资很高'\n",[109,77720,77721,77723,77726,77728,77731,77734,77736,77738,77740,77742,77745,77747,77750],{"class":111,"line":263},[109,77722,619],{"class":122},[109,77724,77725],{"class":133}," result",[109,77727,14737],{"class":122},[109,77729,77730],{"class":126}," str.",[109,77732,77733],{"class":211},"replace",[109,77735,714],{"class":126},[109,77737,2116],{"class":278},[109,77739,77622],{"class":49152},[109,77741,2116],{"class":278},[109,77743,77744],{"class":122},"ig",[109,77746,13608],{"class":126},[109,77748,77749],{"class":278},"'前端'",[109,77751,1330],{"class":126},[109,77753,77754,77756,77758],{"class":111,"line":269},[109,77755,74928],{"class":126},[109,77757,59422],{"class":211},[109,77759,77760],{"class":126},"(result)\n",[109,77762,77763,77765,77767],{"class":111,"line":304},[109,77764,53592],{"class":126},[109,77766,52988],{"class":52475},[109,77768,52482],{"class":126},[109,77770,77771,77773,77775],{"class":111,"line":331},[109,77772,52960],{"class":126},[109,77774,52975],{"class":52475},[109,77776,52482],{"class":126},[109,77778,77779,77781,77783],{"class":111,"line":336},[109,77780,52960],{"class":126},[109,77782,51810],{"class":52475},[109,77784,52482],{"class":126},[1467,77786,77787],{},"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":104,"searchDepth":119,"depth":119,"links":77789},[77790,77800,77812,77829,77836,77844],{"id":54535,"depth":119,"text":54536,"children":77791},[77792,77793,77794,77795,77796,77797,77798,77799],{"id":54539,"depth":140,"text":54540},{"id":54572,"depth":140,"text":54573},{"id":54611,"depth":140,"text":54612},{"id":54769,"depth":140,"text":54770},{"id":54817,"depth":140,"text":54818},{"id":54954,"depth":140,"text":54955},{"id":55276,"depth":140,"text":55277},{"id":58264,"depth":140,"text":58265},{"id":58292,"depth":119,"text":58293,"children":77801},[77802,77803,77804,77805,77806,77807,77808,77809,77810,77811],{"id":58296,"depth":140,"text":58297},{"id":58319,"depth":140,"text":58320},{"id":59234,"depth":140,"text":59235},{"id":59924,"depth":140,"text":59925},{"id":60206,"depth":140,"text":60207},{"id":64367,"depth":140,"text":64368},{"id":64537,"depth":140,"text":64538},{"id":64665,"depth":140,"text":64666},{"id":64690,"depth":140,"text":64691},{"id":66079,"depth":140,"text":66080},{"id":67232,"depth":119,"text":67233,"children":77813},[77814,77815,77816,77817,77818,77819,77820,77821,77822,77823,77824,77825,77826,77827,77828],{"id":67236,"depth":140,"text":67237},{"id":67890,"depth":140,"text":67891},{"id":69585,"depth":140,"text":69586},{"id":69626,"depth":140,"text":69627},{"id":69668,"depth":140,"text":69669},{"id":69682,"depth":140,"text":69683},{"id":69731,"depth":140,"text":69732},{"id":69743,"depth":140,"text":69744},{"id":69758,"depth":140,"text":69759},{"id":69794,"depth":140,"text":69795},{"id":69875,"depth":140,"text":69876},{"id":70003,"depth":140,"text":70004},{"id":70015,"depth":140,"text":70016},{"id":70034,"depth":140,"text":70035},{"id":72145,"depth":140,"text":72146},{"id":72164,"depth":119,"text":72165,"children":77830},[77831,77832,77833,77834,77835],{"id":72185,"depth":140,"text":72186},{"id":72205,"depth":140,"text":72206},{"id":72254,"depth":140,"text":72255},{"id":72379,"depth":140,"text":72380},{"id":72560,"depth":140,"text":72561},{"id":72578,"depth":119,"text":72579,"children":77837},[77838,77839,77840,77841,77842,77843],{"id":72593,"depth":140,"text":72594},{"id":72652,"depth":140,"text":72653},{"id":72676,"depth":140,"text":72677},{"id":72996,"depth":140,"text":72997},{"id":73028,"depth":140,"text":73029},{"id":73051,"depth":140,"text":73052},{"id":76119,"depth":119,"text":76120,"children":77845},[77846,77847],{"id":76153,"depth":140,"text":76154},{"id":76192,"depth":140,"text":76193},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54507,"description":24550},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77854,"title":77855,"body":77856,"description":24550,"extension":1476,"meta":93993,"navigation":157,"path":93994,"seo":93995,"stem":93996,"__hash__":93997},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77857,"toc":93929},[77858,77861,77864,77868,77872,77877,77882,77893,77897,77902,77905,77909,77912,77917,77921,77925,77928,77933,77936,77940,77943,77951,77954,77958,77963,77968,77971,77975,77980,77985,77988,77992,77997,78000,78005,78008,78013,78016,78021,78026,78029,78032,78036,78041,78046,78049,78053,78057,78060,78063,78066,78070,78074,78079,78084,78087,78091,78096,78101,78104,78107,78110,78113,78116,78119,78122,78125,78128,78133,78137,78142,78147,78150,78153,78156,78159,78162,78165,78168,78171,78175,78179,78182,78185,78188,78193,78195,78198,78201,78204,78207,78210,78213,78216,78219,78222,78225,78228,78231,78234,78239,78244,78249,78252,78256,78259,78264,78268,78270,78281,78286,78387,78390,78393,78396,78399,78402,78405,78408,78411,78413,78416,78419,78422,78425,78428,78430,78433,78436,78439,78442,78445,78448,78450,78453,78455,78457,78460,78464,78468,78471,78474,78477,78480,78483,78486,78489,78492,78495,78500,78620,78623,78626,78631,78634,78637,78640,78643,78648,78651,78654,78657,78660,78665,78668,78768,78833,78907,78911,78914,78917,78921,78924,78938,78967,78970,78973,78976,78979,78982,78985,78988,78990,78993,78996,78999,79002,79006,79011,79015,79020,79095,79098,79281,79284,79287,79290,79293,79296,79298,79301,79304,79307,79310,79313,79316,79318,79322,79325,79330,79333,79336,79339,79342,79344,79349,79352,79355,79358,79361,79363,79368,79371,79374,79376,79378,79381,79385,79388,79391,79396,79399,79402,79405,79455,79460,79464,79469,79472,79541,79544,79553,79557,79562,79565,79568,79576,79579,79596,81398,81402,81406,81411,81414,81418,81424,81430,81582,81587,81592,81595,81598,81601,81604,81607,81610,81613,81616,81619,81622,81625,81628,81633,81637,81640,81651,81655,81660,81663,81666,81669,81672,81675,81677,81680,81683,81686,81689,81691,81708,81711,81715,81718,81723,81728,81731,81734,81738,81741,81744,81753,81756,81760,81763,81768,81773,81840,81844,81847,81850,81855,81860,81946,81951,81955,81958,81961,81976,81979,81984,81988,81993,82102,82105,82116,82266,82270,82275,82384,82388,82393,82398,82403,82406,82413,82433,82469,82633,82638,82641,82646,82653,82656,82659,82662,82721,82777,82833,82837,82842,83157,83160,83164,83167,83172,83281,83286,83290,83295,83299,83370,83374,83376,83379,83382,83420,83696,83700,83717,83783,83817,83821,83824,83829,83858,83865,83874,83879,83894,83899,83908,83911,84048,84052,84114,84118,84123,84368,84372,84377,84380,84383,84386,84389,84393,84398,85979,85983,85987,85993,85996,86001,86005,86008,86013,86016,86027,86031,86036,86040,86045,86050,86053,86058,86062,86066,86069,86074,86079,86082,86085,86088,86210,86215,86317,86320,86323,86327,86332,86504,86509,86513,86516,86521,86587,86592,86595,86726,86729,86734,86737,86740,86831,86836,86839,86842,86845,86848,86853,86858,86861,86866,86871,86876,86880,86883,86886,86891,86896,86901,86906,86960,86963,86966,86971,86974,86977,86982,86987,86992,86996,87001,87015,87020,87023,87028,87032,87037,87042,87047,87052,87057,87062,87067,87072,87075,87079,87084,87087,87090,87093,87098,87103,87106,87109,87113,87116,87119,87124,87129,87134,87139,87142,87147,87152,87213,87218,87221,87226,88467,88472,88476,88480,88485,88488,88493,88498,88501,88506,88508,88513,88517,88520,88523,88534,88538,88543,88548,88603,88608,88613,88618,88829,88834,88838,88843,88846,88848,88851,88854,89301,89306,89313,89319,89322,89325,89589,89594,89598,89863,89868,89872,89877,89882,89887,89892,90223,90226,90231,90236,90239,90243,90247,90252,90257,90262,90267,90272,90277,90281,90284,90289,90294,90297,90371,90376,90381,90386,90388,90391,90761,90766,90771,90776,90779,90782,90884,90889,90894,90997,91001,91006,91010,91014,91019,91024,91027,91032,91035,91038,91431,91436,91439,91442,91445,91448,91968,91972,91977,91982,91987,91990,91995,91998,92001,92383,92388,92390,92392,92395,92398,92910,92914,92975,92978,92981,92984,92988,92991,92996,93001,93926],[10,77859,77855],{"id":77860},"_4js进阶",[19,77862,77863],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77865,77867],{"id":77866},"_41-作用域","4.1 作用域",[51,77869,77871],{"id":77870},"_411-局部作用域","4.1.1 局部作用域",[19,77873,77874],{},[938,77875],{"alt":104,"src":77876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77878,77879],{},[938,77880],{"alt":104,"src":77881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[27,77883,77884,77887,77890],{},[30,77885,77886],{},"函数作用域在函数内部",[30,77888,77889],{},"块级作用域在{}",[30,77891,77892],{},"对象的那个{}不是作用域，不是块作用域",[51,77894,77896],{"id":77895},"_412-全局作用域","4.1.2 全局作用域",[19,77898,77899],{},[938,77900],{"alt":104,"src":77901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77903,77904],{},"window.a=10不要这样写",[51,77906,77908],{"id":77907},"_413-作用域链","4.1.3 作用域链",[19,77910,77911],{},"变量查找机制",[19,77913,77914],{},[938,77915],{"alt":104,"src":77916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77918,77920],{"id":77919},"_42-垃圾回收机制","4.2 垃圾回收机制",[51,77922,77924],{"id":77923},"_421-大体介绍","4.2.1 大体介绍",[19,77926,77927],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77929,77930],{},[938,77931],{"alt":104,"src":77932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77934,77935],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[51,77937,77939],{"id":77938},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77941,77942],{},"堆栈空间分配区别：",[765,77944,77945,77948],{},[30,77946,77947],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[30,77949,77950],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77952,77953],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23171,77955,77957],{"id":77956},"_4221-引用计数","4.2.2.1 引用计数",[19,77959,77960],{},[938,77961],{"alt":104,"src":77962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77964,77965],{},[938,77966],{"alt":104,"src":77967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77969,77970],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23171,77972,77974],{"id":77973},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77976,77977],{},[938,77978],{"alt":104,"src":77979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77981,77982],{},[938,77983],{"alt":104,"src":77984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77986,77987],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77989,77991],{"id":77990},"_43-闭包","4.3 闭包",[19,77993,77994],{},[938,77995],{"alt":104,"src":77996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77998,77999],{},"闭包：内层函数+外层函数的变量",[19,78001,78002],{},[938,78003],{"alt":104,"src":78004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78006,78007],{},"closure就是闭包",[19,78009,78010],{},[938,78011],{"alt":104,"src":78012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78014,78015],{},"内层函数必须包含外层函数的变量才是闭包",[19,78017,78018],{},[938,78019],{"alt":104,"src":78020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78022,78023],{},[938,78024],{"alt":104,"src":78025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78027,78028],{},"闭包可能会引起内存泄漏",[19,78030,78031],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78033,78035],{"id":78034},"_44-变量提升","4.4 变量提升",[19,78037,78038],{},[938,78039],{"alt":104,"src":78040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78042,78043],{},[938,78044],{"alt":104,"src":78045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78047,78048],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78050,78052],{"id":78051},"_45-函数进阶","4.5 函数进阶",[51,78054,78056],{"id":78055},"_451-函数提升","4.5.1 函数提升",[19,78058,78059],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78061,78062],{},"只提升函数声明，不提升函数调用",[52988,78064,78065],{},"\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",[51,78067,78069],{"id":78068},"_452-函数参数","4.5.2 函数参数",[23171,78071,78073],{"id":78072},"_4521-动态参数","4.5.2.1 动态参数",[19,78075,78076],{},[938,78077],{"alt":104,"src":78078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78080,78081],{},[938,78082],{"alt":104,"src":78083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78085,78086],{},"箭头函数里边没有arguments",[23171,78088,78090],{"id":78089},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78092,78093],{},[938,78094],{"alt":104,"src":78095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78097,78098],{},[938,78099],{"alt":104,"src":78100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78102,78103],{},"剩余参数使用的时候不需要写...",[19,78105,78106],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78108,78109],{},"  function getSum(a,b,...arr) {",[19,78111,78112],{},"  console.log(11)",[19,78114,78115],{},"  }",[19,78117,78118],{},"  getSum(1,2,3,4)",[19,78120,78121],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78123,78124],{},"  getSum(1,2)",[19,78126,78127],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78129,78130],{},[938,78131],{"alt":104,"src":78132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23171,78134,78136],{"id":78135},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78138,78139],{},[938,78140],{"alt":104,"src":78141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78143,78144],{},[938,78145],{"alt":104,"src":78146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78148,78149],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78151,78152],{},"展开运算符可以用于数组之间的合并：",[19,78154,78155],{},"const arr1 = [1, 2, 3]",[19,78157,78158],{},"const arr2 = [3, 4, 5]",[19,78160,78161],{},"const arr = [...arr1, ...arr2]",[19,78163,78164],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78166,78167],{},"剩余参数：函数参数使用，得到真数组",[19,78169,78170],{},"展开运算符：数组中使用，数组展开",[51,78172,78174],{"id":78173},"_453-箭头函数","4.5.3 箭头函数",[23171,78176,78178],{"id":78177},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78180,78181],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78183,78184],{},"它不是万能的！！！",[19,78186,78187],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78189,78190],{},[938,78191],{"alt":104,"src":78192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78194,1574],{},[19,78196,78197],{},"① 只有一个形参的时候，可以省略小括号：",[19,78199,78200],{},"const fn=x=>{console.log(x)}",[19,78202,78203],{},"② 只有一行代码时可以省略大括号：",[19,78205,78206],{},"const fn=x=>console.log(11)",[19,78208,78209],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78211,78212],{},"const fn=x=>x+x",[19,78214,78215],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78217,78218],{},"⑤ 阻止表单默认提交：",[19,78220,78221],{},"const form = document.querySelector('form')",[19,78223,78224],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78226,78227],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78229,78230],{},"const fn=uname=>({uname:uname})",[19,78232,78233],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78235,78236],{},[938,78237],{"alt":104,"src":78238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78240,78241],{},[938,78242],{"alt":104,"src":78243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78245,78246],{},[938,78247],{"alt":104,"src":78248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78250,78251],{},"一定不要忘记用()，有()就理解为自带return",[23171,78253,78255],{"id":78254},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78257,78258],{},"箭头函数是没有动态参数的arguments",[19,78260,78261],{},[938,78262],{"alt":104,"src":78263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23171,78265,78267],{"id":78266},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78269,745],{},[765,78271,78272,78275,78278],{},[30,78273,78274],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[30,78276,78277],{},"事件回调函数使用箭头函数时，this 为全局的 window",[30,78279,78280],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78282,78283],{},[938,78284],{"alt":104,"src":78285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[99,78287,78289],{"className":54242,"code":78288,"language":54244,"meta":104,"style":104},"  \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",[106,78290,78291,78299,78304,78309,78314,78319,78324,78328,78333,78337,78341,78346,78351,78356,78360,78364,78369,78374,78379],{"__ignoreMap":104},[109,78292,78293,78295,78297],{"class":111,"line":112},[109,78294,53319],{"class":126},[109,78296,52988],{"class":52475},[109,78298,52482],{"class":126},[109,78300,78301],{"class":111,"line":119},[109,78302,78303],{"class":126},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[109,78305,78306],{"class":111,"line":140},[109,78307,78308],{"class":126},"    console.log(this) \u002F\u002F指向window\n",[109,78310,78311],{"class":111,"line":154},[109,78312,78313],{"class":126},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[109,78315,78316],{"class":111,"line":161},[109,78317,78318],{"class":126},"    function fn() {\n",[109,78320,78321],{"class":111,"line":167},[109,78322,78323],{"class":126},"      console.log(this)  \u002F\u002F指向window\n",[109,78325,78326],{"class":111,"line":185},[109,78327,1361],{"class":126},[109,78329,78330],{"class":111,"line":201},[109,78331,78332],{"class":126},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[109,78334,78335],{"class":111,"line":206},[109,78336,158],{"emptyLinePlaceholder":157},[109,78338,78339],{"class":111,"line":218},[109,78340,72698],{"class":126},[109,78342,78343],{"class":111,"line":223},[109,78344,78345],{"class":126},"      name: 'andy',\n",[109,78347,78348],{"class":111,"line":229},[109,78349,78350],{"class":126},"      sayHai: function () {\n",[109,78352,78353],{"class":111,"line":244},[109,78354,78355],{"class":126},"        console.log(this)\n",[109,78357,78358],{"class":111,"line":258},[109,78359,53573],{"class":126},[109,78361,78362],{"class":111,"line":263},[109,78363,1361],{"class":126},[109,78365,78366],{"class":111,"line":269},[109,78367,78368],{"class":126},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[109,78370,78371],{"class":111,"line":304},[109,78372,78373],{"class":126},"    \u002F\u002F 2.箭头函数的this\n",[109,78375,78376],{"class":111,"line":331},[109,78377,78378],{"class":126},"    const fn = () => console.log(this)\n",[109,78380,78381,78383,78385],{"class":111,"line":336},[109,78382,53592],{"class":126},[109,78384,52988],{"class":52475},[109,78386,52482],{"class":126},[19,78388,78389],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78391,78392],{},"const fn = () => console.log(this)",[19,78394,78395],{},"fn() \u002F\u002F指向window",[19,78397,78398],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78400,78401],{},"①",[19,78403,78404],{},"const obj = {",[19,78406,78407],{},"uname: 'pink老师',",[19,78409,78410],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78412,2476],{},[19,78414,78415],{},"调用对象里边的函数",[19,78417,78418],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78420,78421],{},"obj.sayHai()",[19,78423,78424],{},"②",[19,78426,78427],{},"const obj1 = {",[19,78429,78407],{},[19,78431,78432],{},"sayHai: function () {",[19,78434,78435],{},"let i = 10",[19,78437,78438],{},"const count = () => {",[19,78440,78441],{},"console.log(this)",[19,78443,78444],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78446,78447],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78449,2476],{},[19,78451,78452],{},"count()",[19,78454,2476],{},[19,78456,2476],{},[19,78458,78459],{},"obj1.sayHai()",[14,78461,78463],{"id":78462},"_46-解构赋值","4.6 解构赋值",[51,78465,78467],{"id":78466},"_461-数组解构","4.6.1 数组解构",[19,78469,78470],{},"以前要是使用数组中的值的话：",[19,78472,78473],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78475,78476],{},"const arr=[100,60,80]",[19,78478,78479],{},"const max=arr[0]",[19,78481,78482],{},"const min=arr[1]",[19,78484,78485],{},"const avg=arr[2]",[19,78487,78488],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78490,78491],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78493,78494],{},"这个写法就类似于上边的那种用很多const的方法",[19,78496,78497],{},[938,78498],{"alt":104,"src":78499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[99,78501,78503],{"className":51808,"code":78502,"language":51810,"meta":104,"style":104},"①变量之间交换值:\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",[106,78504,78505,78510,78515,78520,78525,78530,78534,78538,78543,78547,78552,78557,78561,78566,78571,78582,78592,78597,78602,78607,78611,78615],{"__ignoreMap":104},[109,78506,78507],{"class":111,"line":112},[109,78508,78509],{"class":126},"①变量之间交换值:\n",[109,78511,78512],{"class":111,"line":119},[109,78513,78514],{"class":126},"let a=1\n",[109,78516,78517],{"class":111,"line":140},[109,78518,78519],{"class":126},"let b=2;\n",[109,78521,78522],{"class":111,"line":154},[109,78523,78524],{"class":126},"必须加这行代码，不然就会报错\n",[109,78526,78527],{"class":111,"line":161},[109,78528,78529],{"class":126},"[b,a]=[a,b]\n",[109,78531,78532],{"class":111,"line":167},[109,78533,158],{"emptyLinePlaceholder":157},[109,78535,78536],{"class":111,"line":185},[109,78537,158],{"emptyLinePlaceholder":157},[109,78539,78540],{"class":111,"line":201},[109,78541,78542],{"class":126},"可以写成下面的方式：\n",[109,78544,78545],{"class":111,"line":206},[109,78546,78514],{"class":126},[109,78548,78549],{"class":111,"line":218},[109,78550,78551],{"class":126},"let b=2\n",[109,78553,78554],{"class":111,"line":223},[109,78555,78556],{"class":126},";[b,a]=[a,b]\n",[109,78558,78559],{"class":111,"line":229},[109,78560,158],{"emptyLinePlaceholder":157},[109,78562,78563],{"class":111,"line":244},[109,78564,78565],{"class":126},"②排序\n",[109,78567,78568],{"class":111,"line":258},[109,78569,78570],{"class":126},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[109,78572,78573,78576,78579],{"class":111,"line":263},[109,78574,78575],{"class":126},"for (let i = 0; i ",[109,78577,1320],{"class":78578},"s7hpK",[109,78580,78581],{"class":126}," arr1.length; i++) {\n",[109,78583,78584,78587,78589],{"class":111,"line":269},[109,78585,78586],{"class":126},"   for (let j = 0; j ",[109,78588,1320],{"class":78578},[109,78590,78591],{"class":126}," arr1.length - 1; j++) {\n",[109,78593,78594],{"class":111,"line":304},[109,78595,78596],{"class":126},"      if (arr1[j] > arr1[j + 1]) {\n",[109,78598,78599],{"class":111,"line":331},[109,78600,78601],{"class":126},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[109,78603,78604],{"class":111,"line":336},[109,78605,78606],{"class":126},"       }\n",[109,78608,78609],{"class":111,"line":364},[109,78610,5648],{"class":126},[109,78612,78613],{"class":111,"line":391},[109,78614,742],{"class":126},[109,78616,78617],{"class":111,"line":396},[109,78618,78619],{"class":126},"console.log(arr1)\n",[19,78621,78622],{},"数组解构的细节：",[19,78624,78625],{},"①变量多，单元值少",[19,78627,78628],{},[938,78629],{"alt":104,"src":78630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78632,78633],{},"防止出现undefined的方法：",[19,78635,78636],{},"const [a=0,b=0] =[1]",[19,78638,78639],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78641,78642],{},"②变量少，单元值多",[19,78644,78645],{},[938,78646],{"alt":104,"src":78647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78649,78650],{},"此时可以使用剩余参数来接收多余的值",[19,78652,78653],{},"const [a,b,...c]=[1,2,3,4]",[19,78655,78656],{},"console.log(c) 输出[3,4]",[19,78658,78659],{},"③可以按需导入，忽略某些返回值",[19,78661,78662],{},[938,78663],{"alt":104,"src":78664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78666,78667],{},"④支持多维数组的结构",[99,78669,78673],{"className":78670,"code":78671,"language":78672,"meta":104,"style":104},"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",[106,78674,78675,78703,78719,78734,78749],{"__ignoreMap":104},[109,78676,78677,78679,78681,78683,78685,78687,78689,78691,78694,78696,78698,78700],{"class":111,"line":112},[109,78678,170],{"class":122},[109,78680,53008],{"class":126},[109,78682,130],{"class":122},[109,78684,53401],{"class":126},[109,78686,1755],{"class":133},[109,78688,13608],{"class":126},[109,78690,1618],{"class":133},[109,78692,78693],{"class":126},", [",[109,78695,1612],{"class":133},[109,78697,13608],{"class":126},[109,78699,1831],{"class":133},[109,78701,78702],{"class":126},"]]\n",[109,78704,78705,78708,78710,78712,78714,78716],{"class":111,"line":119},[109,78706,78707],{"class":126},"console.",[109,78709,59422],{"class":211},[109,78711,5194],{"class":126},[109,78713,1314],{"class":133},[109,78715,5555],{"class":126},[109,78717,78718],{"class":115},"  \u002F\u002F1\n",[109,78720,78721,78723,78725,78727,78729,78731],{"class":111,"line":140},[109,78722,78707],{"class":126},[109,78724,59422],{"class":211},[109,78726,5194],{"class":126},[109,78728,1755],{"class":133},[109,78730,5555],{"class":126},[109,78732,78733],{"class":115},"  \u002F\u002F2\n",[109,78735,78736,78738,78740,78742,78744,78746],{"class":111,"line":154},[109,78737,78707],{"class":126},[109,78739,59422],{"class":211},[109,78741,5194],{"class":126},[109,78743,1618],{"class":133},[109,78745,5555],{"class":126},[109,78747,78748],{"class":115},"  \u002F\u002F[3,4]\n",[109,78750,78751,78753,78755,78757,78759,78761,78763,78765],{"class":111,"line":161},[109,78752,78707],{"class":126},[109,78754,59422],{"class":211},[109,78756,5194],{"class":126},[109,78758,1618],{"class":133},[109,78760,6238],{"class":126},[109,78762,1314],{"class":133},[109,78764,5555],{"class":126},[109,78766,78767],{"class":115},"  \u002F\u002F3\n",[99,78769,78771],{"className":78670,"code":78770,"language":78672,"meta":104,"style":104},"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",[106,78772,78773,78800,78811,78822],{"__ignoreMap":104},[109,78774,78775,78777,78780,78782,78784,78786,78788,78790,78792,78794,78796,78798],{"class":111,"line":112},[109,78776,170],{"class":122},[109,78778,78779],{"class":126}," [a, b, c] ",[109,78781,130],{"class":122},[109,78783,53401],{"class":126},[109,78785,1755],{"class":133},[109,78787,13608],{"class":126},[109,78789,1618],{"class":133},[109,78791,78693],{"class":126},[109,78793,1612],{"class":133},[109,78795,13608],{"class":126},[109,78797,1831],{"class":133},[109,78799,78702],{"class":126},[109,78801,78802,78804,78806,78809],{"class":111,"line":119},[109,78803,78707],{"class":126},[109,78805,59422],{"class":211},[109,78807,78808],{"class":126},"(a)",[109,78810,78718],{"class":115},[109,78812,78813,78815,78817,78820],{"class":111,"line":140},[109,78814,78707],{"class":126},[109,78816,59422],{"class":211},[109,78818,78819],{"class":126},"(b)",[109,78821,78733],{"class":115},[109,78823,78824,78826,78828,78831],{"class":111,"line":154},[109,78825,78707],{"class":126},[109,78827,59422],{"class":211},[109,78829,78830],{"class":126},"(c)",[109,78832,78748],{"class":115},[99,78834,78836],{"className":78670,"code":78835,"language":78672,"meta":104,"style":104},"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",[106,78837,78838,78865,78875,78885,78895],{"__ignoreMap":104},[109,78839,78840,78842,78845,78847,78849,78851,78853,78855,78857,78859,78861,78863],{"class":111,"line":112},[109,78841,170],{"class":122},[109,78843,78844],{"class":126}," [a, b, [c, d]] ",[109,78846,130],{"class":122},[109,78848,53401],{"class":126},[109,78850,1755],{"class":133},[109,78852,13608],{"class":126},[109,78854,1618],{"class":133},[109,78856,78693],{"class":126},[109,78858,1612],{"class":133},[109,78860,13608],{"class":126},[109,78862,1831],{"class":133},[109,78864,78702],{"class":126},[109,78866,78867,78869,78871,78873],{"class":111,"line":119},[109,78868,78707],{"class":126},[109,78870,59422],{"class":211},[109,78872,78808],{"class":126},[109,78874,78718],{"class":115},[109,78876,78877,78879,78881,78883],{"class":111,"line":140},[109,78878,78707],{"class":126},[109,78880,59422],{"class":211},[109,78882,78819],{"class":126},[109,78884,78733],{"class":115},[109,78886,78887,78889,78891,78893],{"class":111,"line":154},[109,78888,78707],{"class":126},[109,78890,59422],{"class":211},[109,78892,78830],{"class":126},[109,78894,78767],{"class":115},[109,78896,78897,78899,78901,78904],{"class":111,"line":161},[109,78898,78707],{"class":126},[109,78900,59422],{"class":211},[109,78902,78903],{"class":126},"(d)",[109,78905,78906],{"class":115},"  \u002F\u002F4\n",[51,78908,78910],{"id":78909},"_462-对象解构","4.6.2 对象解构",[19,78912,78913],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78915,78916],{},"用的非常非常多！！！！！！",[23171,78918,78920],{"id":78919},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78922,78923],{},"基本语法：",[765,78925,78926,78929,78932,78935],{},[30,78927,78928],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[30,78930,78931],{},"对象属性的值将被赋值给与属性名相同的变量",[30,78933,78934],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[30,78936,78937],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[99,78939,78941],{"className":51808,"code":78940,"language":51810,"meta":104,"style":104},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[106,78942,78943,78948,78953,78958,78962],{"__ignoreMap":104},[109,78944,78945],{"class":111,"line":112},[109,78946,78947],{"class":126},"const obj = {\n",[109,78949,78950],{"class":111,"line":119},[109,78951,78952],{"class":126},"   uname: 'pink老师',\n",[109,78954,78955],{"class":111,"line":140},[109,78956,78957],{"class":126},"   age: 18,\n",[109,78959,78960],{"class":111,"line":154},[109,78961,742],{"class":126},[109,78963,78964],{"class":111,"line":161},[109,78965,78966],{"class":126},"const { uname, age } = obj\n",[19,78968,78969],{},"上方代码这样写等价于：",[19,78971,78972],{},"const uname等价于obj.uname",[19,78974,78975],{},"变量名可以重新改名：",[19,78977,78978],{},"const uname='red老师'",[19,78980,78981],{},"const user={",[19,78983,78984],{},"  uname:'pink老师',",[19,78986,78987],{},"  age:18",[19,78989,2476],{},[19,78991,78992],{},"const {uname,age}=user",[19,78994,78995],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78997,78998],{},"const {旧变量名：新变量名}=对象",[19,79000,79001],{},"const {uname:username,age}=user",[23171,79003,79005],{"id":79004},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79007,79008],{},[938,79009],{"alt":104,"src":79010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23171,79012,79014],{"id":79013},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79016,79017],{},[938,79018],{"alt":104,"src":79019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[99,79021,79023],{"className":54242,"code":79022,"language":54244,"meta":104,"style":104},"  \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",[106,79024,79025,79033,79038,79043,79048,79053,79058,79063,79068,79073,79077,79082,79087],{"__ignoreMap":104},[109,79026,79027,79029,79031],{"class":111,"line":112},[109,79028,53319],{"class":126},[109,79030,52988],{"class":52475},[109,79032,52482],{"class":126},[109,79034,79035],{"class":111,"line":119},[109,79036,79037],{"class":126},"    const pig = {\n",[109,79039,79040],{"class":111,"line":140},[109,79041,79042],{"class":126},"      name: '佩奇',\n",[109,79044,79045],{"class":111,"line":154},[109,79046,79047],{"class":126},"      family: {\n",[109,79049,79050],{"class":111,"line":161},[109,79051,79052],{"class":126},"        mother: '猪妈妈',\n",[109,79054,79055],{"class":111,"line":167},[109,79056,79057],{"class":126},"        father: '猪爸爸',\n",[109,79059,79060],{"class":111,"line":185},[109,79061,79062],{"class":126},"        sister: '乔治'\n",[109,79064,79065],{"class":111,"line":201},[109,79066,79067],{"class":126},"      },\n",[109,79069,79070],{"class":111,"line":206},[109,79071,79072],{"class":126},"      age: 6\n",[109,79074,79075],{"class":111,"line":218},[109,79076,1361],{"class":126},[109,79078,79079],{"class":111,"line":223},[109,79080,79081],{"class":126},"    \u002F\u002F 多级对象解构\n",[109,79083,79084],{"class":111,"line":229},[109,79085,79086],{"class":126},"    const { name, family: { mother, father, sister }, age } = pig\n",[109,79088,79089,79091,79093],{"class":111,"line":244},[109,79090,53592],{"class":126},[109,79092,52988],{"class":52475},[109,79094,52482],{"class":126},[19,79096,79097],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[99,79099,79102],{"className":79100,"code":79101,"language":77622,"meta":104,"style":104},"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",[106,79103,79104,79109,79120,79132,79144,79153,79157,79168,79180,79190,79195,79199,79209,79220,79229,79233,79237,79248,79259,79268,79272,79277],{"__ignoreMap":104},[109,79105,79106],{"class":111,"line":112},[109,79107,79108],{"class":115},"    \u002F\u002F 这是后台传递过来的数据\n",[109,79110,79111,79113,79116,79118],{"class":111,"line":119},[109,79112,619],{"class":122},[109,79114,79115],{"class":126}," msg ",[109,79117,130],{"class":122},[109,79119,16745],{"class":126},[109,79121,79122,79125,79127,79130],{"class":111,"line":140},[109,79123,79124],{"class":278},"      \"code\"",[109,79126,2391],{"class":122},[109,79128,79129],{"class":133}," 200",[109,79131,32641],{"class":126},[109,79133,79134,79137,79139,79142],{"class":111,"line":154},[109,79135,79136],{"class":278},"      \"msg\"",[109,79138,2391],{"class":122},[109,79140,79141],{"class":278}," \"获取新闻列表成功\"",[109,79143,32641],{"class":126},[109,79145,79146,79149,79151],{"class":111,"line":161},[109,79147,79148],{"class":278},"      \"data\"",[109,79150,2391],{"class":122},[109,79152,56622],{"class":126},[109,79154,79155],{"class":111,"line":167},[109,79156,3865],{"class":126},[109,79158,79159,79162,79164,79166],{"class":111,"line":185},[109,79160,79161],{"class":278},"          \"id\"",[109,79163,2391],{"class":122},[109,79165,26293],{"class":133},[109,79167,32641],{"class":126},[109,79169,79170,79173,79175,79178],{"class":111,"line":201},[109,79171,79172],{"class":278},"          \"title\"",[109,79174,2391],{"class":122},[109,79176,79177],{"class":278}," \"5G商用自己，三大运用商收入下降\"",[109,79179,32641],{"class":126},[109,79181,79182,79185,79187],{"class":111,"line":206},[109,79183,79184],{"class":278},"          \"count\"",[109,79186,2391],{"class":122},[109,79188,79189],{"class":133}," 58\n",[109,79191,79192],{"class":111,"line":218},[109,79193,79194],{"class":126},"        },\n",[109,79196,79197],{"class":111,"line":223},[109,79198,3865],{"class":126},[109,79200,79201,79203,79205,79207],{"class":111,"line":229},[109,79202,79161],{"class":278},[109,79204,2391],{"class":122},[109,79206,15928],{"class":133},[109,79208,32641],{"class":126},[109,79210,79211,79213,79215,79218],{"class":111,"line":244},[109,79212,79172],{"class":278},[109,79214,2391],{"class":122},[109,79216,79217],{"class":278}," \"国际媒体头条速览\"",[109,79219,32641],{"class":126},[109,79221,79222,79224,79226],{"class":111,"line":258},[109,79223,79184],{"class":278},[109,79225,2391],{"class":122},[109,79227,79228],{"class":133}," 56\n",[109,79230,79231],{"class":111,"line":263},[109,79232,79194],{"class":126},[109,79234,79235],{"class":111,"line":269},[109,79236,3865],{"class":126},[109,79238,79239,79241,79243,79246],{"class":111,"line":304},[109,79240,79161],{"class":278},[109,79242,2391],{"class":122},[109,79244,79245],{"class":133}," 3",[109,79247,32641],{"class":126},[109,79249,79250,79252,79254,79257],{"class":111,"line":331},[109,79251,79172],{"class":278},[109,79253,2391],{"class":122},[109,79255,79256],{"class":278}," \"乌克兰和俄罗斯持续冲突\"",[109,79258,32641],{"class":126},[109,79260,79261,79263,79265],{"class":111,"line":336},[109,79262,79184],{"class":278},[109,79264,2391],{"class":122},[109,79266,79267],{"class":133}," 1669\n",[109,79269,79270],{"class":111,"line":364},[109,79271,79194],{"class":126},[109,79273,79274],{"class":111,"line":391},[109,79275,79276],{"class":126},"      ]\n",[109,79278,79279],{"class":111,"line":396},[109,79280,1361],{"class":126},[19,79282,79283],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79285,79286],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79288,79289],{},"\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,79291,79292],{},"function({data}) {",[19,79294,79295],{},"console.log(data)",[19,79297,2476],{},[19,79299,79300],{},"render(msg)",[19,79302,79303],{},"实参传递给形参的时候解构了",[19,79305,79306],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79308,79309],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79311,79312],{},"function render({data:mydata}) {",[19,79314,79315],{},"  console.log(data)",[19,79317,2476],{},[51,79319,79321],{"id":79320},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79323,79324],{},"有两种情况：一个是数组结构，一个是立即执行函数",[765,79326,79327],{},[30,79328,79329],{},"如果对一个数组进行遍历，有两种方式：",[19,79331,79332],{},"①法1",[19,79334,79335],{},"const arr=[1,2,3]",[19,79337,79338],{},"arr.map(function(item,index) {",[19,79340,79341],{},"  console.log(item)",[19,79343,53639],{},[19,79345,79346],{},[938,79347],{"alt":104,"src":79348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79350,79351],{},"②法2",[19,79353,79354],{},"const str='pink'",[19,79356,79357],{},"[1,2,3].map(function(item,index) {",[19,79359,79360],{},"console.log(item)",[19,79362,53639],{},[19,79364,79365],{},[938,79366],{"alt":104,"src":79367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79369,79370],{},"此时会报错",[19,79372,79373],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79375,79360],{},[19,79377,53639],{},[19,79379,79380],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79382,79384],{"id":79383},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79386,79387],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79389,79390],{},"可以理解为加强版的for循环",[19,79392,79393],{},[938,79394],{"alt":104,"src":79395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79397,79398],{},"里边不写return，不返回数组，只遍历不返回",[19,79400,79401],{},"map是返回数组",[19,79403,79404],{},"forEach主要用于遍历数组对象",[99,79406,79408],{"className":54242,"code":79407,"language":54244,"meta":104,"style":104},"  \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",[106,79409,79410,79418,79423,79428,79433,79438,79442,79447],{"__ignoreMap":104},[109,79411,79412,79414,79416],{"class":111,"line":112},[109,79413,53319],{"class":126},[109,79415,52988],{"class":52475},[109,79417,52482],{"class":126},[109,79419,79420],{"class":111,"line":119},[109,79421,79422],{"class":126},"    const arr = ['red', 'green', 'pink']\n",[109,79424,79425],{"class":111,"line":140},[109,79426,79427],{"class":126},"    const result = arr.forEach(function (item, index) {\n",[109,79429,79430],{"class":111,"line":154},[109,79431,79432],{"class":126},"      console.log(item)\n",[109,79434,79435],{"class":111,"line":161},[109,79436,79437],{"class":126},"      console.log(index)\n",[109,79439,79440],{"class":111,"line":167},[109,79441,34636],{"class":126},[109,79443,79444],{"class":111,"line":185},[109,79445,79446],{"class":126},"    console.log(result)\n",[109,79448,79449,79451,79453],{"class":111,"line":201},[109,79450,53592],{"class":126},[109,79452,52988],{"class":52475},[109,79454,52482],{"class":126},[19,79456,79457],{},[938,79458],{"alt":104,"src":79459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79461,79463],{"id":79462},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79465,79466],{},[938,79467],{"alt":104,"src":79468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79470,79471],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[99,79473,79475],{"className":54242,"code":79474,"language":54244,"meta":104,"style":104},"\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",[106,79476,79477,79485,79493,79498,79503,79507,79511,79516,79520,79525,79533],{"__ignoreMap":104},[109,79478,79479,79481,79483],{"class":111,"line":112},[109,79480,1320],{"class":126},[109,79482,52975],{"class":52475},[109,79484,52482],{"class":126},[109,79486,79487,79489,79491],{"class":111,"line":119},[109,79488,53319],{"class":126},[109,79490,52988],{"class":52475},[109,79492,52482],{"class":126},[109,79494,79495],{"class":111,"line":140},[109,79496,79497],{"class":126},"    const arr = [10, 20, 30]\n",[109,79499,79500],{"class":111,"line":154},[109,79501,79502],{"class":126},"    const newArr = arr.filter(function (item, index) {\n",[109,79504,79505],{"class":111,"line":161},[109,79506,79432],{"class":126},[109,79508,79509],{"class":111,"line":167},[109,79510,79437],{"class":126},[109,79512,79513],{"class":111,"line":185},[109,79514,79515],{"class":126},"      return item >= 20\n",[109,79517,79518],{"class":111,"line":201},[109,79519,34636],{"class":126},[109,79521,79522],{"class":111,"line":206},[109,79523,79524],{"class":126},"    console.log(newArr)\n",[109,79526,79527,79529,79531],{"class":111,"line":218},[109,79528,53592],{"class":126},[109,79530,52988],{"class":52475},[109,79532,52482],{"class":126},[109,79534,79535,79537,79539],{"class":111,"line":223},[109,79536,52960],{"class":126},[109,79538,52975],{"class":52475},[109,79540,52482],{"class":126},[19,79542,79543],{},"这个也可以写成箭头函数：",[99,79545,79547],{"className":51808,"code":79546,"language":51810,"meta":104,"style":104},"const newArr = arr.filter(item => item >= 20)\n",[106,79548,79549],{"__ignoreMap":104},[109,79550,79551],{"class":111,"line":112},[109,79552,79546],{"class":126},[14,79554,79556],{"id":79555},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79558,79559],{},[938,79560],{"alt":104,"src":79561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79563,79564],{},"步骤：",[19,79566,79567],{},"①：渲染页面模块",[27,79569,79570,79573],{},[30,79571,79572],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[30,79574,79575],{},"用forEach+字符串的形式",[19,79577,79578],{},"②：点击不同需求，显示不同页面内容",[27,79580,79581,79584,79587,79590,79593],{},[30,79582,79583],{},"点击采取事件委托方式 .filter",[30,79585,79586],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[30,79588,79589],{},"筛选条件是根据点击的 data-index 来判断",[30,79591,79592],{},"可以使用对象解构，把事件对象解构",[30,79594,79595],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[99,79597,79599],{"className":51808,"code":79598,"language":51810,"meta":104,"style":104},"\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",[106,79600,79601,79611,79625,79629,79637,79651,79671,79683,79691,79697,79707,79717,79727,79731,79735,79741,79754,79766,79776,79788,79792,79796,79803,79816,79828,79845,79863,79876,79880,79884,79896,79906,79910,79914,79921,79962,79989,79999,80003,80007,80015,80027,80031,80035,80043,80055,80067,80078,80082,80086,80095,80107,80118,80122,80126,80135,80147,80159,80163,80167,80174,80184,80196,80208,80223,80227,80231,80239,80255,80265,80275,80285,80297,80301,80305,80315,80326,80336,80340,80348,80356,80360,80368,80383,80409,80434,80459,80478,80486,80500,80505,80510,80515,80520,80525,80533,80541,80546,80557,80562,80572,80582,80592,80602,80606,80610,80619,80628,80637,80646,80650,80654,80663,80672,80681,80690,80694,80698,80707,80716,80725,80734,80738,80742,80751,80760,80769,80778,80782,80786,80795,80804,80813,80822,80826,80830,80839,80848,80857,80866,80870,80874,80883,80892,80900,80909,80913,80917,80921,80926,80938,80943,80955,80959,80976,81004,81013,81018,81028,81038,81047,81052,81057,81061,81066,81083,81087,81092,81100,81105,81132,81137,81157,81162,81174,81179,81184,81189,81200,81214,81251,81269,81302,81319,81343,81347,81352,81358,81362,81366,81370,81378,81386,81390],{"__ignoreMap":104},[109,79602,79603,79605,79607,79609],{"class":111,"line":112},[109,79604,52472],{"class":126},[109,79606,52476],{"class":52475},[109,79608,52479],{"class":211},[109,79610,52482],{"class":126},[109,79612,79613,79615,79617,79619,79621,79623],{"class":111,"line":119},[109,79614,1320],{"class":126},[109,79616,51810],{"class":52475},[109,79618,52491],{"class":211},[109,79620,130],{"class":126},[109,79622,52496],{"class":278},[109,79624,52482],{"class":126},[109,79626,79627],{"class":111,"line":140},[109,79628,158],{"emptyLinePlaceholder":157},[109,79630,79631,79633,79635],{"class":111,"line":154},[109,79632,1320],{"class":126},[109,79634,52509],{"class":52475},[109,79636,52482],{"class":126},[109,79638,79639,79641,79643,79645,79647,79649],{"class":111,"line":161},[109,79640,53319],{"class":126},[109,79642,52519],{"class":52475},[109,79644,52522],{"class":211},[109,79646,130],{"class":126},[109,79648,52527],{"class":278},[109,79650,52482],{"class":126},[109,79652,79653,79655,79657,79659,79661,79663,79665,79667,79669],{"class":111,"line":167},[109,79654,53319],{"class":126},[109,79656,52519],{"class":52475},[109,79658,16093],{"class":211},[109,79660,130],{"class":126},[109,79662,52566],{"class":278},[109,79664,52546],{"class":211},[109,79666,130],{"class":126},[109,79668,52573],{"class":278},[109,79670,52482],{"class":126},[109,79672,79673,79675,79677,79679,79681],{"class":111,"line":185},[109,79674,53319],{"class":126},[109,79676,52582],{"class":52475},[109,79678,52585],{"class":126},[109,79680,52582],{"class":52475},[109,79682,52482],{"class":126},[109,79684,79685,79687,79689],{"class":111,"line":201},[109,79686,53319],{"class":126},[109,79688,1467],{"class":52475},[109,79690,52482],{"class":126},[109,79692,79693,79695],{"class":111,"line":206},[109,79694,7733],{"class":52475},[109,79696,16745],{"class":126},[109,79698,79699,79701,79703,79705],{"class":111,"line":218},[109,79700,55870],{"class":133},[109,79702,52612],{"class":126},[109,79704,1314],{"class":133},[109,79706,137],{"class":126},[109,79708,79709,79711,79713,79715],{"class":111,"line":223},[109,79710,55881],{"class":133},[109,79712,52612],{"class":126},[109,79714,1314],{"class":133},[109,79716,137],{"class":126},[109,79718,79719,79721,79723,79725],{"class":111,"line":229},[109,79720,73771],{"class":133},[109,79722,52612],{"class":126},[109,79724,61680],{"class":133},[109,79726,137],{"class":126},[109,79728,79729],{"class":111,"line":244},[109,79730,1361],{"class":126},[109,79732,79733],{"class":111,"line":258},[109,79734,158],{"emptyLinePlaceholder":157},[109,79736,79737,79739],{"class":111,"line":263},[109,79738,63298],{"class":211},[109,79740,16745],{"class":126},[109,79742,79743,79745,79747,79750,79752],{"class":111,"line":269},[109,79744,55946],{"class":133},[109,79746,52612],{"class":126},[109,79748,79749],{"class":133},"990",[109,79751,52667],{"class":122},[109,79753,137],{"class":126},[109,79755,79756,79758,79760,79762,79764],{"class":111,"line":304},[109,79757,55881],{"class":133},[109,79759,52612],{"class":126},[109,79761,1314],{"class":133},[109,79763,52731],{"class":133},[109,79765,137],{"class":126},[109,79767,79768,79770,79772,79774],{"class":111,"line":331},[109,79769,56184],{"class":133},[109,79771,52612],{"class":126},[109,79773,52652],{"class":133},[109,79775,137],{"class":126},[109,79777,79778,79781,79783,79786],{"class":111,"line":336},[109,79779,79780],{"class":133},"      flex-wrap",[109,79782,52612],{"class":126},[109,79784,79785],{"class":133},"wrap",[109,79787,137],{"class":126},[109,79789,79790],{"class":111,"line":364},[109,79791,1361],{"class":126},[109,79793,79794],{"class":111,"line":391},[109,79795,158],{"emptyLinePlaceholder":157},[109,79797,79798,79801],{"class":111,"line":396},[109,79799,79800],{"class":211},"    .item",[109,79802,16745],{"class":126},[109,79804,79805,79807,79809,79812,79814],{"class":111,"line":402},[109,79806,55946],{"class":133},[109,79808,52612],{"class":126},[109,79810,79811],{"class":133},"240",[109,79813,52667],{"class":122},[109,79815,137],{"class":126},[109,79817,79818,79820,79822,79824,79826],{"class":111,"line":419},[109,79819,63175],{"class":133},[109,79821,52612],{"class":126},[109,79823,1008],{"class":133},[109,79825,52667],{"class":122},[109,79827,137],{"class":126},[109,79829,79830,79832,79834,79836,79838,79841,79843],{"class":111,"line":435},[109,79831,55870],{"class":133},[109,79833,52612],{"class":126},[109,79835,2232],{"class":133},[109,79837,52667],{"class":122},[109,79839,79840],{"class":133}," 30",[109,79842,52667],{"class":122},[109,79844,137],{"class":126},[109,79846,79847,79849,79851,79853,79856,79859,79861],{"class":111,"line":440},[109,79848,63035],{"class":133},[109,79850,52612],{"class":126},[109,79852,29296],{"class":133},[109,79854,79855],{"class":133}," ease",[109,79857,79858],{"class":133}," .5",[109,79860,2227],{"class":122},[109,79862,137],{"class":126},[109,79864,79865,79868,79870,79872,79874],{"class":111,"line":467},[109,79866,79867],{"class":133},"      margin-bottom",[109,79869,52612],{"class":126},[109,79871,2232],{"class":133},[109,79873,52667],{"class":122},[109,79875,137],{"class":126},[109,79877,79878],{"class":111,"line":494},[109,79879,1361],{"class":126},[109,79881,79882],{"class":111,"line":499},[109,79883,158],{"emptyLinePlaceholder":157},[109,79885,79886,79889,79891,79894],{"class":111,"line":526},[109,79887,79888],{"class":211},"    .item:nth-child",[109,79890,714],{"class":126},[109,79892,79893],{"class":133},"4n",[109,79895,13615],{"class":126},[109,79897,79898,79900,79902,79904],{"class":111,"line":552},[109,79899,63175],{"class":133},[109,79901,52612],{"class":126},[109,79903,1314],{"class":133},[109,79905,137],{"class":126},[109,79907,79908],{"class":111,"line":557},[109,79909,1361],{"class":126},[109,79911,79912],{"class":111,"line":584},[109,79913,158],{"emptyLinePlaceholder":157},[109,79915,79916,79919],{"class":111,"line":611},[109,79917,79918],{"class":211},"    .item:hover",[109,79920,16745],{"class":126},[109,79922,79923,79926,79928,79930,79932,79934,79936,79938,79940,79943,79945,79947,79949,79951,79953,79955,79957,79960],{"class":111,"line":616},[109,79924,79925],{"class":133},"      box-shadow",[109,79927,52612],{"class":126},[109,79929,1314],{"class":133},[109,79931,52667],{"class":122},[109,79933,734],{"class":133},[109,79935,52667],{"class":122},[109,79937,3510],{"class":133},[109,79939,52667],{"class":122},[109,79941,79942],{"class":133}," rgba",[109,79944,714],{"class":126},[109,79946,1314],{"class":133},[109,79948,13608],{"class":126},[109,79950,1314],{"class":133},[109,79952,13608],{"class":126},[109,79954,1314],{"class":133},[109,79956,13608],{"class":126},[109,79958,79959],{"class":133},".2",[109,79961,720],{"class":126},[109,79963,79964,79967,79969,79972,79974,79976,79978,79981,79983,79985,79987],{"class":111,"line":633},[109,79965,79966],{"class":133},"      transform",[109,79968,52612],{"class":126},[109,79970,79971],{"class":133},"translate3d",[109,79973,714],{"class":126},[109,79975,1314],{"class":133},[109,79977,13608],{"class":126},[109,79979,79980],{"class":133},"-4",[109,79982,52667],{"class":122},[109,79984,13608],{"class":126},[109,79986,1314],{"class":133},[109,79988,720],{"class":126},[109,79990,79991,79993,79995,79997],{"class":111,"line":649},[109,79992,63200],{"class":133},[109,79994,52612],{"class":126},[109,79996,63205],{"class":133},[109,79998,137],{"class":126},[109,80000,80001],{"class":111,"line":676},[109,80002,1361],{"class":126},[109,80004,80005],{"class":111,"line":703},[109,80006,158],{"emptyLinePlaceholder":157},[109,80008,80009,80011,80013],{"class":111,"line":708},[109,80010,79800],{"class":211},[109,80012,56790],{"class":52475},[109,80014,16745],{"class":126},[109,80016,80017,80019,80021,80023,80025],{"class":111,"line":723},[109,80018,55946],{"class":133},[109,80020,52612],{"class":126},[109,80022,1351],{"class":133},[109,80024,1865],{"class":122},[109,80026,137],{"class":126},[109,80028,80029],{"class":111,"line":728},[109,80030,1361],{"class":126},[109,80032,80033],{"class":111,"line":739},[109,80034,158],{"emptyLinePlaceholder":157},[109,80036,80037,80039,80041],{"class":111,"line":9352},[109,80038,79800],{"class":211},[109,80040,63479],{"class":211},[109,80042,16745],{"class":126},[109,80044,80045,80047,80049,80051,80053],{"class":111,"line":9364},[109,80046,56097],{"class":133},[109,80048,52612],{"class":126},[109,80050,2182],{"class":133},[109,80052,52667],{"class":122},[109,80054,137],{"class":126},[109,80056,80057,80059,80061,80063,80065],{"class":111,"line":9376},[109,80058,79867],{"class":133},[109,80060,52612],{"class":126},[109,80062,1008],{"class":133},[109,80064,52667],{"class":122},[109,80066,137],{"class":126},[109,80068,80069,80071,80073,80076],{"class":111,"line":11034},[109,80070,58591],{"class":133},[109,80072,52612],{"class":126},[109,80074,80075],{"class":133},"#666",[109,80077,137],{"class":126},[109,80079,80080],{"class":111,"line":11059},[109,80081,1361],{"class":126},[109,80083,80084],{"class":111,"line":11082},[109,80085,158],{"emptyLinePlaceholder":157},[109,80087,80088,80090,80093],{"class":111,"line":11106},[109,80089,79800],{"class":211},[109,80091,80092],{"class":211}," .price",[109,80094,16745],{"class":126},[109,80096,80097,80099,80101,80103,80105],{"class":111,"line":11111},[109,80098,56097],{"class":133},[109,80100,52612],{"class":126},[109,80102,2282],{"class":133},[109,80104,52667],{"class":122},[109,80106,137],{"class":126},[109,80108,80109,80111,80113,80116],{"class":111,"line":11116},[109,80110,58591],{"class":133},[109,80112,52612],{"class":126},[109,80114,80115],{"class":133},"firebrick",[109,80117,137],{"class":126},[109,80119,80120],{"class":111,"line":11121},[109,80121,1361],{"class":126},[109,80123,80124],{"class":111,"line":11130},[109,80125,158],{"emptyLinePlaceholder":157},[109,80127,80128,80130,80133],{"class":111,"line":11135},[109,80129,79800],{"class":211},[109,80131,80132],{"class":211}," .price::before",[109,80134,16745],{"class":126},[109,80136,80137,80140,80142,80145],{"class":111,"line":11141},[109,80138,80139],{"class":133},"      content",[109,80141,52612],{"class":126},[109,80143,80144],{"class":278},"'￥'",[109,80146,137],{"class":126},[109,80148,80149,80151,80153,80155,80157],{"class":111,"line":11162},[109,80150,56097],{"class":133},[109,80152,52612],{"class":126},[109,80154,2081],{"class":133},[109,80156,52667],{"class":122},[109,80158,137],{"class":126},[109,80160,80161],{"class":111,"line":11168},[109,80162,1361],{"class":126},[109,80164,80165],{"class":111,"line":11182},[109,80166,158],{"emptyLinePlaceholder":157},[109,80168,80169,80172],{"class":111,"line":11188},[109,80170,80171],{"class":211},"    .filter",[109,80173,16745],{"class":126},[109,80175,80176,80178,80180,80182],{"class":111,"line":11215},[109,80177,56184],{"class":133},[109,80179,52612],{"class":126},[109,80181,52652],{"class":133},[109,80183,137],{"class":126},[109,80185,80186,80188,80190,80192,80194],{"class":111,"line":11224},[109,80187,55946],{"class":133},[109,80189,52612],{"class":126},[109,80191,79749],{"class":133},[109,80193,52667],{"class":122},[109,80195,137],{"class":126},[109,80197,80198,80200,80202,80204,80206],{"class":111,"line":11230},[109,80199,55881],{"class":133},[109,80201,52612],{"class":126},[109,80203,1314],{"class":133},[109,80205,52731],{"class":133},[109,80207,137],{"class":126},[109,80209,80210,80212,80214,80216,80218,80220],{"class":111,"line":11238},[109,80211,55870],{"class":133},[109,80213,52612],{"class":126},[109,80215,2188],{"class":133},[109,80217,52667],{"class":122},[109,80219,79840],{"class":133},[109,80221,80222],{"class":122},"px\n",[109,80224,80225],{"class":111,"line":11243},[109,80226,1361],{"class":126},[109,80228,80229],{"class":111,"line":17777},[109,80230,158],{"emptyLinePlaceholder":157},[109,80232,80233,80235,80237],{"class":111,"line":17783},[109,80234,80171],{"class":211},[109,80236,2791],{"class":52475},[109,80238,16745],{"class":126},[109,80240,80241,80243,80245,80247,80249,80251,80253],{"class":111,"line":17806},[109,80242,55870],{"class":133},[109,80244,52612],{"class":126},[109,80246,1008],{"class":133},[109,80248,52667],{"class":122},[109,80250,10268],{"class":133},[109,80252,52667],{"class":122},[109,80254,137],{"class":126},[109,80256,80257,80259,80261,80263],{"class":111,"line":17812},[109,80258,62896],{"class":133},[109,80260,52612],{"class":126},[109,80262,62993],{"class":133},[109,80264,137],{"class":126},[109,80266,80267,80269,80271,80273],{"class":111,"line":17835},[109,80268,58591],{"class":133},[109,80270,52612],{"class":126},[109,80272,80075],{"class":133},[109,80274,137],{"class":126},[109,80276,80277,80279,80281,80283],{"class":111,"line":17849},[109,80278,65145],{"class":133},[109,80280,52612],{"class":126},[109,80282,55912],{"class":133},[109,80284,137],{"class":126},[109,80286,80287,80289,80291,80293,80295],{"class":111,"line":17869},[109,80288,62925],{"class":133},[109,80290,52612],{"class":126},[109,80292,2232],{"class":133},[109,80294,52667],{"class":122},[109,80296,137],{"class":126},[109,80298,80299],{"class":111,"line":17875},[109,80300,1361],{"class":126},[109,80302,80303],{"class":111,"line":17886},[109,80304,158],{"emptyLinePlaceholder":157},[109,80306,80307,80309,80311,80313],{"class":111,"line":17909},[109,80308,80171],{"class":211},[109,80310,2791],{"class":52475},[109,80312,63075],{"class":211},[109,80314,16745],{"class":126},[109,80316,80317,80319,80321,80324],{"class":111,"line":17931},[109,80318,56059],{"class":133},[109,80320,52612],{"class":126},[109,80322,80323],{"class":133},"#05943c",[109,80325,137],{"class":126},[109,80327,80328,80330,80332,80334],{"class":111,"line":17936},[109,80329,58591],{"class":133},[109,80331,52612],{"class":126},[109,80333,62017],{"class":133},[109,80335,137],{"class":126},[109,80337,80338],{"class":111,"line":17942},[109,80339,1361],{"class":126},[109,80341,80342,80344,80346],{"class":111,"line":17956},[109,80343,53592],{"class":126},[109,80345,1467],{"class":52475},[109,80347,52482],{"class":126},[109,80349,80350,80352,80354],{"class":111,"line":17969},[109,80351,52960],{"class":126},[109,80353,52509],{"class":52475},[109,80355,52482],{"class":126},[109,80357,80358],{"class":111,"line":17974},[109,80359,158],{"emptyLinePlaceholder":157},[109,80361,80362,80364,80366],{"class":111,"line":17988},[109,80363,1320],{"class":126},[109,80365,52975],{"class":52475},[109,80367,52482],{"class":126},[109,80369,80370,80372,80374,80376,80378,80381],{"class":111,"line":17993},[109,80371,53319],{"class":126},[109,80373,52786],{"class":52475},[109,80375,54661],{"class":211},[109,80377,130],{"class":126},[109,80379,80380],{"class":278},"\"filter\"",[109,80382,52482],{"class":126},[109,80384,80385,80387,80389,80391,80393,80395,80398,80400,80402,80405,80407],{"class":111,"line":17999},[109,80386,52516],{"class":126},[109,80388,1776],{"class":52475},[109,80390,62232],{"class":211},[109,80392,130],{"class":126},[109,80394,62237],{"class":278},[109,80396,80397],{"class":211}," data-index",[109,80399,130],{"class":126},[109,80401,5021],{"class":278},[109,80403,80404],{"class":126},">0-100元\u003C\u002F",[109,80406,1776],{"class":52475},[109,80408,52482],{"class":126},[109,80410,80411,80413,80415,80417,80419,80421,80423,80425,80427,80430,80432],{"class":111,"line":18004},[109,80412,52516],{"class":126},[109,80414,1776],{"class":52475},[109,80416,62232],{"class":211},[109,80418,130],{"class":126},[109,80420,62237],{"class":278},[109,80422,80397],{"class":211},[109,80424,130],{"class":126},[109,80426,5044],{"class":278},[109,80428,80429],{"class":126},">100-300元\u003C\u002F",[109,80431,1776],{"class":52475},[109,80433,52482],{"class":126},[109,80435,80436,80438,80440,80442,80444,80446,80448,80450,80452,80455,80457],{"class":111,"line":18018},[109,80437,52516],{"class":126},[109,80439,1776],{"class":52475},[109,80441,62232],{"class":211},[109,80443,130],{"class":126},[109,80445,62237],{"class":278},[109,80447,80397],{"class":211},[109,80449,130],{"class":126},[109,80451,5057],{"class":278},[109,80453,80454],{"class":126},">300元以上\u003C\u002F",[109,80456,1776],{"class":52475},[109,80458,52482],{"class":126},[109,80460,80461,80463,80465,80467,80469,80471,80474,80476],{"class":111,"line":18023},[109,80462,52516],{"class":126},[109,80464,1776],{"class":52475},[109,80466,62232],{"class":211},[109,80468,130],{"class":126},[109,80470,62237],{"class":278},[109,80472,80473],{"class":126},">全部区间\u003C\u002F",[109,80475,1776],{"class":52475},[109,80477,52482],{"class":126},[109,80479,80480,80482,80484],{"class":111,"line":18028},[109,80481,53592],{"class":126},[109,80483,52786],{"class":52475},[109,80485,52482],{"class":126},[109,80487,80488,80490,80492,80494,80496,80498],{"class":111,"line":18042},[109,80489,53319],{"class":126},[109,80491,52786],{"class":52475},[109,80493,54661],{"class":211},[109,80495,130],{"class":126},[109,80497,63783],{"class":278},[109,80499,52482],{"class":126},[109,80501,80502],{"class":111,"line":18054},[109,80503,80504],{"class":115},"    \u003C!-- \u003Cdiv class=\"item\">\n",[109,80506,80507],{"class":111,"line":18059},[109,80508,80509],{"class":115},"      \u003Cimg src=\"\" alt=\"\">\n",[109,80511,80512],{"class":111,"line":18072},[109,80513,80514],{"class":115},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[109,80516,80517],{"class":111,"line":18077},[109,80518,80519],{"class":115},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[109,80521,80522],{"class":111,"line":18082},[109,80523,80524],{"class":115},"    \u003C\u002Fdiv> -->\n",[109,80526,80527,80529,80531],{"class":111,"line":18087},[109,80528,53592],{"class":126},[109,80530,52786],{"class":52475},[109,80532,52482],{"class":126},[109,80534,80535,80537,80539],{"class":111,"line":18100},[109,80536,53319],{"class":126},[109,80538,52988],{"class":52475},[109,80540,52482],{"class":126},[109,80542,80543],{"class":111,"line":18105},[109,80544,80545],{"class":115},"    \u002F\u002F 2. 初始化数据\n",[109,80547,80548,80550,80553,80555],{"class":111,"line":33808},[109,80549,619],{"class":122},[109,80551,80552],{"class":133}," goodsList",[109,80554,14737],{"class":122},[109,80556,56622],{"class":126},[109,80558,80559],{"class":111,"line":33814},[109,80560,80561],{"class":126},"      {\n",[109,80563,80564,80567,80570],{"class":111,"line":33820},[109,80565,80566],{"class":126},"        id: ",[109,80568,80569],{"class":278},"'4001172'",[109,80571,32641],{"class":126},[109,80573,80574,80577,80580],{"class":111,"line":33826},[109,80575,80576],{"class":126},"        name: ",[109,80578,80579],{"class":278},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[109,80581,32641],{"class":126},[109,80583,80584,80587,80590],{"class":111,"line":33832},[109,80585,80586],{"class":126},"        price: ",[109,80588,80589],{"class":278},"'289.00'",[109,80591,32641],{"class":126},[109,80593,80594,80597,80600],{"class":111,"line":33843},[109,80595,80596],{"class":126},"        picture: ",[109,80598,80599],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[109,80601,32641],{"class":126},[109,80603,80604],{"class":111,"line":33849},[109,80605,79067],{"class":126},[109,80607,80608],{"class":111,"line":33869},[109,80609,80561],{"class":126},[109,80611,80612,80614,80617],{"class":111,"line":33875},[109,80613,80566],{"class":126},[109,80615,80616],{"class":278},"'4001594'",[109,80618,32641],{"class":126},[109,80620,80621,80623,80626],{"class":111,"line":33886},[109,80622,80576],{"class":126},[109,80624,80625],{"class":278},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[109,80627,32641],{"class":126},[109,80629,80630,80632,80635],{"class":111,"line":33892},[109,80631,80586],{"class":126},[109,80633,80634],{"class":278},"'288.00'",[109,80636,32641],{"class":126},[109,80638,80639,80641,80644],{"class":111,"line":33898},[109,80640,80596],{"class":126},[109,80642,80643],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[109,80645,32641],{"class":126},[109,80647,80648],{"class":111,"line":33904},[109,80649,79067],{"class":126},[109,80651,80652],{"class":111,"line":33910},[109,80653,80561],{"class":126},[109,80655,80656,80658,80661],{"class":111,"line":33916},[109,80657,80566],{"class":126},[109,80659,80660],{"class":278},"'4001009'",[109,80662,32641],{"class":126},[109,80664,80665,80667,80670],{"class":111,"line":33922},[109,80666,80576],{"class":126},[109,80668,80669],{"class":278},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[109,80671,32641],{"class":126},[109,80673,80674,80676,80679],{"class":111,"line":33928},[109,80675,80586],{"class":126},[109,80677,80678],{"class":278},"'109.00'",[109,80680,32641],{"class":126},[109,80682,80683,80685,80688],{"class":111,"line":33948},[109,80684,80596],{"class":126},[109,80686,80687],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[109,80689,32641],{"class":126},[109,80691,80692],{"class":111,"line":33954},[109,80693,79067],{"class":126},[109,80695,80696],{"class":111,"line":33970},[109,80697,80561],{"class":126},[109,80699,80700,80702,80705],{"class":111,"line":33976},[109,80701,80566],{"class":126},[109,80703,80704],{"class":278},"'4001874'",[109,80706,32641],{"class":126},[109,80708,80709,80711,80714],{"class":111,"line":33990},[109,80710,80576],{"class":126},[109,80712,80713],{"class":278},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[109,80715,32641],{"class":126},[109,80717,80718,80720,80723],{"class":111,"line":33996},[109,80719,80586],{"class":126},[109,80721,80722],{"class":278},"'488.00'",[109,80724,32641],{"class":126},[109,80726,80727,80729,80732],{"class":111,"line":34011},[109,80728,80596],{"class":126},[109,80730,80731],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[109,80733,32641],{"class":126},[109,80735,80736],{"class":111,"line":34017},[109,80737,79067],{"class":126},[109,80739,80740],{"class":111,"line":34026},[109,80741,80561],{"class":126},[109,80743,80744,80746,80749],{"class":111,"line":34032},[109,80745,80566],{"class":126},[109,80747,80748],{"class":278},"'4001649'",[109,80750,32641],{"class":126},[109,80752,80753,80755,80758],{"class":111,"line":34041},[109,80754,80576],{"class":126},[109,80756,80757],{"class":278},"'大师监制龙泉青瓷茶叶罐'",[109,80759,32641],{"class":126},[109,80761,80762,80764,80767],{"class":111,"line":34047},[109,80763,80586],{"class":126},[109,80765,80766],{"class":278},"'139.00'",[109,80768,32641],{"class":126},[109,80770,80771,80773,80776],{"class":111,"line":34053},[109,80772,80596],{"class":126},[109,80774,80775],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[109,80777,32641],{"class":126},[109,80779,80780],{"class":111,"line":34062},[109,80781,79067],{"class":126},[109,80783,80784],{"class":111,"line":34068},[109,80785,80561],{"class":126},[109,80787,80788,80790,80793],{"class":111,"line":34079},[109,80789,80566],{"class":126},[109,80791,80792],{"class":278},"'3997185'",[109,80794,32641],{"class":126},[109,80796,80797,80799,80802],{"class":111,"line":34085},[109,80798,80576],{"class":126},[109,80800,80801],{"class":278},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[109,80803,32641],{"class":126},[109,80805,80806,80808,80811],{"class":111,"line":34104},[109,80807,80586],{"class":126},[109,80809,80810],{"class":278},"'108.00'",[109,80812,32641],{"class":126},[109,80814,80815,80817,80820],{"class":111,"line":34110},[109,80816,80596],{"class":126},[109,80818,80819],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[109,80821,32641],{"class":126},[109,80823,80824],{"class":111,"line":34121},[109,80825,79067],{"class":126},[109,80827,80828],{"class":111,"line":34127},[109,80829,80561],{"class":126},[109,80831,80832,80834,80837],{"class":111,"line":34147},[109,80833,80566],{"class":126},[109,80835,80836],{"class":278},"'3997403'",[109,80838,32641],{"class":126},[109,80840,80841,80843,80846],{"class":111,"line":34163},[109,80842,80576],{"class":126},[109,80844,80845],{"class":278},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[109,80847,32641],{"class":126},[109,80849,80850,80852,80855],{"class":111,"line":34169},[109,80851,80586],{"class":126},[109,80853,80854],{"class":278},"'100.00'",[109,80856,32641],{"class":126},[109,80858,80859,80861,80864],{"class":111,"line":34183},[109,80860,80596],{"class":126},[109,80862,80863],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[109,80865,32641],{"class":126},[109,80867,80868],{"class":111,"line":34189},[109,80869,79067],{"class":126},[109,80871,80872],{"class":111,"line":34195},[109,80873,80561],{"class":126},[109,80875,80876,80878,80881],{"class":111,"line":34206},[109,80877,80566],{"class":126},[109,80879,80880],{"class":278},"'3998274'",[109,80882,32641],{"class":126},[109,80884,80885,80887,80890],{"class":111,"line":34212},[109,80886,80576],{"class":126},[109,80888,80889],{"class":278},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[109,80891,32641],{"class":126},[109,80893,80894,80896,80898],{"class":111,"line":34218},[109,80895,80586],{"class":126},[109,80897,80766],{"class":278},[109,80899,32641],{"class":126},[109,80901,80902,80904,80907],{"class":111,"line":34228},[109,80903,80596],{"class":126},[109,80905,80906],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[109,80908,32641],{"class":126},[109,80910,80911],{"class":111,"line":34234},[109,80912,79067],{"class":126},[109,80914,80915],{"class":111,"line":34245},[109,80916,54284],{"class":126},[109,80918,80919],{"class":111,"line":34251},[109,80920,158],{"emptyLinePlaceholder":157},[109,80922,80923],{"class":111,"line":34261},[109,80924,80925],{"class":115},"    \u002F\u002F 1.渲染函数\n",[109,80927,80928,80930,80932,80934,80936],{"class":111,"line":34266},[109,80929,71259],{"class":122},[109,80931,71262],{"class":211},[109,80933,714],{"class":126},[109,80935,1282],{"class":6553},[109,80937,13615],{"class":126},[109,80939,80940],{"class":111,"line":34272},[109,80941,80942],{"class":115},"      \u002F\u002F 声明空字符串\n",[109,80944,80945,80948,80951,80953],{"class":111,"line":34321},[109,80946,80947],{"class":122},"      let",[109,80949,80950],{"class":126}," str ",[109,80952,130],{"class":122},[109,80954,71279],{"class":278},[109,80956,80957],{"class":111,"line":34368},[109,80958,71284],{"class":115},[109,80960,80961,80963,80966,80968,80971,80974],{"class":111,"line":34373},[109,80962,59182],{"class":126},[109,80964,80965],{"class":211},"forEach",[109,80967,714],{"class":126},[109,80969,80970],{"class":6553},"item",[109,80972,80973],{"class":122}," =>",[109,80975,16745],{"class":126},[109,80977,80978,80980,80983,80986,80988,80991,80993,80996,80999,81001],{"class":111,"line":34379},[109,80979,62445],{"class":122},[109,80981,80982],{"class":126}," { ",[109,80984,80985],{"class":133},"name",[109,80987,13608],{"class":126},[109,80989,80990],{"class":133},"price",[109,80992,13608],{"class":126},[109,80994,80995],{"class":133},"picture",[109,80997,80998],{"class":126}," } ",[109,81000,130],{"class":122},[109,81002,81003],{"class":126}," item\n",[109,81005,81006,81009,81011],{"class":111,"line":34398},[109,81007,81008],{"class":126},"        str ",[109,81010,10795],{"class":122},[109,81012,71343],{"class":278},[109,81014,81015],{"class":111,"line":34404},[109,81016,81017],{"class":278},"          \u003Cdiv class=\"item\">\n",[109,81019,81020,81023,81025],{"class":111,"line":34424},[109,81021,81022],{"class":278},"            \u003Cimg src=\"${",[109,81024,80995],{"class":126},[109,81026,81027],{"class":278},"}\" alt=\"\">\n",[109,81029,81030,81033,81035],{"class":111,"line":34430},[109,81031,81032],{"class":278},"            \u003Cp class=\"name\">${",[109,81034,80985],{"class":126},[109,81036,81037],{"class":278},"}\u003C\u002Fp>\n",[109,81039,81040,81043,81045],{"class":111,"line":34436},[109,81041,81042],{"class":278},"            \u003Cp class=\"price\">${",[109,81044,80990],{"class":126},[109,81046,81037],{"class":278},[109,81048,81049],{"class":111,"line":34446},[109,81050,81051],{"class":278},"          \u003C\u002Fdiv>\n",[109,81053,81054],{"class":111,"line":34451},[109,81055,81056],{"class":278},"        `\n",[109,81058,81059],{"class":111,"line":34457},[109,81060,65990],{"class":126},[109,81062,81063],{"class":111,"line":34473},[109,81064,81065],{"class":115},"      \u002F\u002F 追加给List\n",[109,81067,81068,81070,81072,81074,81077,81079,81081],{"class":111,"line":34518},[109,81069,56946],{"class":126},[109,81071,55574],{"class":211},[109,81073,714],{"class":126},[109,81075,81076],{"class":278},"'.list'",[109,81078,75424],{"class":126},[109,81080,130],{"class":122},[109,81082,75160],{"class":126},[109,81084,81085],{"class":111,"line":34524},[109,81086,1361],{"class":126},[109,81088,81089],{"class":111,"line":34530},[109,81090,81091],{"class":115},"    \u002F\u002F 页面一打开就需要渲染\n",[109,81093,81094,81097],{"class":111,"line":34536},[109,81095,81096],{"class":211},"    render",[109,81098,81099],{"class":126},"(goodsList)\n",[109,81101,81102],{"class":111,"line":34547},[109,81103,81104],{"class":115},"    \u002F\u002F 2.过滤筛选\n",[109,81106,81107,81109,81111,81113,81116,81118,81120,81122,81124,81126,81128,81130],{"class":111,"line":34553},[109,81108,53582],{"class":126},[109,81110,55574],{"class":211},[109,81112,714],{"class":126},[109,81114,81115],{"class":278},"'.filter'",[109,81117,32001],{"class":126},[109,81119,58988],{"class":211},[109,81121,714],{"class":126},[109,81123,58993],{"class":278},[109,81125,13608],{"class":126},[109,81127,1615],{"class":6553},[109,81129,80973],{"class":122},[109,81131,16745],{"class":126},[109,81133,81134],{"class":111,"line":34559},[109,81135,81136],{"class":115},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[109,81138,81139,81141,81143,81146,81148,81150,81152,81154],{"class":111,"line":34565},[109,81140,59403],{"class":122},[109,81142,80982],{"class":126},[109,81144,81145],{"class":133},"tagName",[109,81147,13608],{"class":126},[109,81149,32712],{"class":133},[109,81151,80998],{"class":126},[109,81153,130],{"class":122},[109,81155,81156],{"class":126}," e.target\n",[109,81158,81159],{"class":111,"line":34583},[109,81160,81161],{"class":115},"      \u002F\u002F 判断\n",[109,81163,81164,81166,81168,81170,81172],{"class":111,"line":34597},[109,81165,55655],{"class":122},[109,81167,68209],{"class":126},[109,81169,55661],{"class":122},[109,81171,69431],{"class":278},[109,81173,13615],{"class":126},[109,81175,81176],{"class":111,"line":34606},[109,81177,81178],{"class":115},"        \u002F\u002F console.log(11)\n",[109,81180,81181],{"class":111,"line":34615},[109,81182,81183],{"class":115},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[109,81185,81186],{"class":111,"line":34624},[109,81187,81188],{"class":115},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[109,81190,81191,81193,81195,81197],{"class":111,"line":34633},[109,81192,53005],{"class":122},[109,81194,53008],{"class":126},[109,81196,130],{"class":122},[109,81198,81199],{"class":126}," goodsList\n",[109,81201,81202,81204,81207,81209,81212],{"class":111,"line":34639},[109,81203,3852],{"class":122},[109,81205,81206],{"class":126}," (dataset.index ",[109,81208,55661],{"class":122},[109,81210,81211],{"class":278}," '1'",[109,81213,13615],{"class":126},[109,81215,81216,81219,81221,81224,81227,81229,81231,81233,81236,81238,81240,81243,81245,81247,81249],{"class":111,"line":34645},[109,81217,81218],{"class":126},"          arr ",[109,81220,130],{"class":122},[109,81222,81223],{"class":126}," goodsList.",[109,81225,81226],{"class":211},"filter",[109,81228,714],{"class":126},[109,81230,80970],{"class":6553},[109,81232,80973],{"class":122},[109,81234,81235],{"class":126}," item.price ",[109,81237,3086],{"class":122},[109,81239,734],{"class":133},[109,81241,81242],{"class":122}," &&",[109,81244,81235],{"class":126},[109,81246,2976],{"class":122},[109,81248,7085],{"class":133},[109,81250,1330],{"class":126},[109,81252,81253,81256,81258,81260,81262,81264,81267],{"class":111,"line":34653},[109,81254,81255],{"class":126},"        } ",[109,81257,3077],{"class":122},[109,81259,3080],{"class":122},[109,81261,81206],{"class":126},[109,81263,55661],{"class":122},[109,81265,81266],{"class":278}," '2'",[109,81268,13615],{"class":126},[109,81270,81271,81273,81275,81277,81279,81281,81283,81285,81287,81289,81291,81293,81295,81297,81300],{"class":111,"line":34658},[109,81272,81218],{"class":126},[109,81274,130],{"class":122},[109,81276,81223],{"class":126},[109,81278,81226],{"class":211},[109,81280,714],{"class":126},[109,81282,80970],{"class":6553},[109,81284,80973],{"class":122},[109,81286,81235],{"class":126},[109,81288,3086],{"class":122},[109,81290,7085],{"class":133},[109,81292,81242],{"class":122},[109,81294,81235],{"class":126},[109,81296,2976],{"class":122},[109,81298,81299],{"class":133}," 300",[109,81301,1330],{"class":126},[109,81303,81304,81306,81308,81310,81312,81314,81317],{"class":111,"line":34664},[109,81305,81255],{"class":126},[109,81307,3077],{"class":122},[109,81309,3080],{"class":122},[109,81311,81206],{"class":126},[109,81313,55661],{"class":122},[109,81315,81316],{"class":278}," '3'",[109,81318,13615],{"class":126},[109,81320,81321,81323,81325,81327,81329,81331,81333,81335,81337,81339,81341],{"class":111,"line":34675},[109,81322,81218],{"class":126},[109,81324,130],{"class":122},[109,81326,81223],{"class":126},[109,81328,81226],{"class":211},[109,81330,714],{"class":126},[109,81332,80970],{"class":6553},[109,81334,80973],{"class":122},[109,81336,81235],{"class":126},[109,81338,3086],{"class":122},[109,81340,81299],{"class":133},[109,81342,1330],{"class":126},[109,81344,81345],{"class":111,"line":34681},[109,81346,3884],{"class":126},[109,81348,81349],{"class":111,"line":34701},[109,81350,81351],{"class":115},"        \u002F\u002F 渲染函数\n",[109,81353,81354,81356],{"class":111,"line":34707},[109,81355,71583],{"class":211},[109,81357,53587],{"class":126},[109,81359,81360],{"class":111,"line":34713},[109,81361,53573],{"class":126},[109,81363,81364],{"class":111,"line":34719},[109,81365,158],{"emptyLinePlaceholder":157},[109,81367,81368],{"class":111,"line":34736},[109,81369,34636],{"class":126},[109,81371,81372,81374,81376],{"class":111,"line":34742},[109,81373,53592],{"class":126},[109,81375,52988],{"class":52475},[109,81377,52482],{"class":126},[109,81379,81380,81382,81384],{"class":111,"line":34748},[109,81381,52960],{"class":126},[109,81383,52975],{"class":52475},[109,81385,52482],{"class":126},[109,81387,81388],{"class":111,"line":34754},[109,81389,158],{"emptyLinePlaceholder":157},[109,81391,81392,81394,81396],{"class":111,"line":34760},[109,81393,52960],{"class":126},[109,81395,51810],{"class":52475},[109,81397,52482],{"class":126},[14,81399,81401],{"id":81400},"_410-深入了解对象","4.10 深入了解对象",[51,81403,81405],{"id":81404},"_4101-创建对象","4.10.1 创建对象",[19,81407,81408],{},[938,81409],{"alt":104,"src":81410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81412,81413],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[51,81415,81417],{"id":81416},"_4102-构造函数","4.10.2 构造函数",[19,81419,81420,81423],{},[23,81421,81422],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81425,81426,81429],{},[23,81427,81428],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[99,81431,81433],{"className":51808,"code":81432,"language":51810,"meta":104,"style":104},"\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",[106,81434,81435,81443,81448,81469,81482,81494,81506,81510,81515,81542,81547,81574],{"__ignoreMap":104},[109,81436,81437,81439,81441],{"class":111,"line":112},[109,81438,1320],{"class":126},[109,81440,52988],{"class":52475},[109,81442,52482],{"class":126},[109,81444,81445],{"class":111,"line":119},[109,81446,81447],{"class":115},"\u002F\u002F例：\n",[109,81449,81450,81452,81455,81457,81459,81461,81463,81465,81467],{"class":111,"line":140},[109,81451,55624],{"class":122},[109,81453,81454],{"class":211}," Pig",[109,81456,714],{"class":126},[109,81458,80985],{"class":6553},[109,81460,1914],{"class":126},[109,81462,71396],{"class":6553},[109,81464,1914],{"class":126},[109,81466,71413],{"class":6553},[109,81468,13615],{"class":126},[109,81470,81471,81474,81477,81479],{"class":111,"line":154},[109,81472,81473],{"class":133},"    this",[109,81475,81476],{"class":126},".name",[109,81478,130],{"class":122},[109,81480,81481],{"class":126},"name\n",[109,81483,81484,81486,81489,81491],{"class":111,"line":161},[109,81485,81473],{"class":133},[109,81487,81488],{"class":126},".age",[109,81490,130],{"class":122},[109,81492,81493],{"class":126},"age\n",[109,81495,81496,81498,81501,81503],{"class":111,"line":167},[109,81497,81473],{"class":133},[109,81499,81500],{"class":126},".gender",[109,81502,130],{"class":122},[109,81504,81505],{"class":126},"gender    \n",[109,81507,81508],{"class":111,"line":185},[109,81509,742],{"class":126},[109,81511,81512],{"class":111,"line":201},[109,81513,81514],{"class":115},"\u002F\u002F创建佩奇对象\n",[109,81516,81517,81519,81522,81524,81526,81528,81531,81533,81535,81537,81540],{"class":111,"line":206},[109,81518,170],{"class":122},[109,81520,81521],{"class":133}," Peppa",[109,81523,1145],{"class":122},[109,81525,81454],{"class":211},[109,81527,714],{"class":126},[109,81529,81530],{"class":278},"'佩奇'",[109,81532,1914],{"class":126},[109,81534,1881],{"class":133},[109,81536,1914],{"class":126},[109,81538,81539],{"class":278},"'女'",[109,81541,1330],{"class":126},[109,81543,81544],{"class":111,"line":218},[109,81545,81546],{"class":115},"\u002F\u002F创建乔治对象\n",[109,81548,81549,81551,81554,81556,81558,81560,81563,81565,81567,81569,81572],{"class":111,"line":223},[109,81550,170],{"class":122},[109,81552,81553],{"class":133}," George",[109,81555,1145],{"class":122},[109,81557,81454],{"class":211},[109,81559,714],{"class":126},[109,81561,81562],{"class":278},"'乔治'",[109,81564,1914],{"class":126},[109,81566,1612],{"class":133},[109,81568,1914],{"class":126},[109,81570,81571],{"class":278},"'男'",[109,81573,1330],{"class":126},[109,81575,81576,81578,81580],{"class":111,"line":229},[109,81577,52960],{"class":126},[109,81579,52988],{"class":52475},[109,81581,52482],{"class":126},[19,81583,81584],{},[938,81585],{"alt":104,"src":81586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81588,81589],{},[938,81590],{"alt":104,"src":81591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81593,81594],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81596,81597],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81599,81600],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81602,81603],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81605,81606],{},"这里用等号是因为：对象.属性=值",[19,81608,81609],{},"①利用对象字面量创建对象",[19,81611,81612],{},"const o={",[19,81614,81615],{},"name:'pink'",[19,81617,81618],{},"} ②利用new Object创建对象",[19,81620,81621],{},"const o=new Object({name:'pink'})",[19,81623,81624],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81626,81627],{},"构造函数创建对象的执行过程：",[19,81629,81630],{},[938,81631],{"alt":104,"src":81632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[51,81634,81636],{"id":81635},"_4103-实例成员","4.10.3 实例成员",[19,81638,81639],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[765,81641,81642,81645,81648],{},[30,81643,81644],{},"实例对象的属性和方法即为实例成员",[30,81646,81647],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[30,81649,81650],{},"构造函数创建的实例对象彼此独立互不影响",[51,81652,81654],{"id":81653},"_4104-静态成员","4.10.4 静态成员",[19,81656,81657],{},[938,81658],{"alt":104,"src":81659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81661,81662],{},"静态成员有Date.now() Math.PI Math.random()",[19,81664,81665],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81667,81668],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81670,81671],{},"function Pig(name) n {",[19,81673,81674],{},"this.name=name",[19,81676,2476],{},[19,81678,81679],{},"Pig.eyes=2",[19,81681,81682],{},"Pig.sayHai=function () { console.log(this) }",[19,81684,81685],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81687,81688],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81690,745],{},[765,81692,81693,81696,81699,81702,81705],{},[30,81694,81695],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[30,81697,81698],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[30,81700,81701],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[30,81703,81704],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[30,81706,81707],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81709,81710],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[51,81712,81714],{"id":81713},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81716,81717],{},"内置构造函数包含：",[19,81719,81720],{},[938,81721],{"alt":104,"src":81722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81724,81725],{},[938,81726],{"alt":104,"src":81727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81729,81730],{},"这些基本数据类型，js对他们进行了包装",[52988,81732,81733],{},"\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",[23171,81735,81737],{"id":81736},"_41051-object","4.10.5.1 Object",[19,81739,81740],{},"Object 是内置的构造函数，用于创建普通对象",[19,81742,81743],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[99,81745,81747],{"className":51808,"code":81746,"language":51810,"meta":104,"style":104},"const user=new Object({name:'小明',age:15})\n",[106,81748,81749],{"__ignoreMap":104},[109,81750,81751],{"class":111,"line":112},[109,81752,81746],{"class":126},[19,81754,81755],{},"三个常用的静态方法：",[24083,81757,81759],{"id":81758},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81761,81762],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81764,81765],{},[938,81766],{"alt":104,"src":81767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81769,81770],{},[938,81771],{"alt":104,"src":81772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[99,81774,81776],{"className":54242,"code":81775,"language":54244,"meta":104,"style":104},"\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",[106,81777,81778,81786,81794,81799,81804,81809,81814,81819,81824,81832],{"__ignoreMap":104},[109,81779,81780,81782,81784],{"class":111,"line":112},[109,81781,1320],{"class":126},[109,81783,52975],{"class":52475},[109,81785,52482],{"class":126},[109,81787,81788,81790,81792],{"class":111,"line":119},[109,81789,53319],{"class":126},[109,81791,52988],{"class":52475},[109,81793,52482],{"class":126},[109,81795,81796],{"class":111,"line":140},[109,81797,81798],{"class":126},"    const o = { name: 'pink', age: 6 }\n",[109,81800,81801],{"class":111,"line":154},[109,81802,81803],{"class":126},"    \u002F\u002F 获得所有属性名\n",[109,81805,81806],{"class":111,"line":161},[109,81807,81808],{"class":126},"    const arr = Object.keys(o)\n",[109,81810,81811],{"class":111,"line":167},[109,81812,81813],{"class":126},"    console.log(arr)\n",[109,81815,81816],{"class":111,"line":185},[109,81817,81818],{"class":126},"    \u002F\u002F 获得所有属性值\n",[109,81820,81821],{"class":111,"line":201},[109,81822,81823],{"class":126},"    console.log(Object.values(o))\n",[109,81825,81826,81828,81830],{"class":111,"line":206},[109,81827,53592],{"class":126},[109,81829,52988],{"class":52475},[109,81831,52482],{"class":126},[109,81833,81834,81836,81838],{"class":111,"line":218},[109,81835,52960],{"class":126},[109,81837,52975],{"class":52475},[109,81839,52482],{"class":126},[24083,81841,81843],{"id":81842},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81845,81846],{},"Object.assign(oo,o)",[19,81848,81849],{},"后的东西添加给前 是追加",[19,81851,81852],{},[938,81853],{"alt":104,"src":81854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81856,81857],{},[938,81858],{"alt":104,"src":81859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[99,81861,81863],{"className":54242,"code":81862,"language":54244,"meta":104,"style":104},"\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",[106,81864,81865,81873,81881,81885,81889,81893,81897,81901,81905,81910,81915,81920,81925,81930,81938],{"__ignoreMap":104},[109,81866,81867,81869,81871],{"class":111,"line":112},[109,81868,1320],{"class":126},[109,81870,52975],{"class":52475},[109,81872,52482],{"class":126},[109,81874,81875,81877,81879],{"class":111,"line":119},[109,81876,53319],{"class":126},[109,81878,52988],{"class":52475},[109,81880,52482],{"class":126},[109,81882,81883],{"class":111,"line":140},[109,81884,81798],{"class":126},[109,81886,81887],{"class":111,"line":154},[109,81888,81803],{"class":126},[109,81890,81891],{"class":111,"line":161},[109,81892,81808],{"class":126},[109,81894,81895],{"class":111,"line":167},[109,81896,81813],{"class":126},[109,81898,81899],{"class":111,"line":185},[109,81900,81818],{"class":126},[109,81902,81903],{"class":111,"line":201},[109,81904,81823],{"class":126},[109,81906,81907],{"class":111,"line":206},[109,81908,81909],{"class":126},"    const oo = {}\n",[109,81911,81912],{"class":111,"line":218},[109,81913,81914],{"class":126},"    Object.assign(oo, o)\n",[109,81916,81917],{"class":111,"line":223},[109,81918,81919],{"class":126},"    console.log(oo)\n",[109,81921,81922],{"class":111,"line":229},[109,81923,81924],{"class":126},"    Object.assign(o, { gender: '女' })\n",[109,81926,81927],{"class":111,"line":244},[109,81928,81929],{"class":126},"    console.log(o)\n",[109,81931,81932,81934,81936],{"class":111,"line":258},[109,81933,53592],{"class":126},[109,81935,52988],{"class":52475},[109,81937,52482],{"class":126},[109,81939,81940,81942,81944],{"class":111,"line":263},[109,81941,52960],{"class":126},[109,81943,52975],{"class":52475},[109,81945,52482],{"class":126},[19,81947,81948],{},[938,81949],{"alt":104,"src":81950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23171,81952,81954],{"id":81953},"_41052-array","4.10.5.2 Array",[19,81956,81957],{},"Array 是内置的构造函数，用于创建数组",[19,81959,81960],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[99,81962,81964],{"className":51808,"code":81963,"language":51810,"meta":104,"style":104},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[106,81965,81966,81971],{"__ignoreMap":104},[109,81967,81968],{"class":111,"line":112},[109,81969,81970],{"class":126},"const arr=new Array(3,5)\n",[109,81972,81973],{"class":111,"line":119},[109,81974,81975],{"class":126},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81977,81978],{},"Array的实例方法，这个方法是实例成员",[19,81980,81981],{},[938,81982],{"alt":104,"src":81983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24083,81985,81987],{"id":81986},"_410521-reduce","4.10.5.2.1 reduce",[19,81989,81990],{},[938,81991],{"alt":104,"src":81992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[99,81994,81996],{"className":54242,"code":81995,"language":54244,"meta":104,"style":104},"\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",[106,81997,81998,82006,82014,82019,82024,82029,82034,82038,82043,82048,82053,82057,82062,82067,82071,82076,82081,82086,82094],{"__ignoreMap":104},[109,81999,82000,82002,82004],{"class":111,"line":112},[109,82001,1320],{"class":126},[109,82003,52975],{"class":52475},[109,82005,52482],{"class":126},[109,82007,82008,82010,82012],{"class":111,"line":119},[109,82009,53319],{"class":126},[109,82011,52988],{"class":52475},[109,82013,52482],{"class":126},[109,82015,82016],{"class":111,"line":140},[109,82017,82018],{"class":126},"    const arr = [1, 5, 8]\n",[109,82020,82021],{"class":111,"line":154},[109,82022,82023],{"class":126},"    \u002F\u002F 1.没有初始值\n",[109,82025,82026],{"class":111,"line":161},[109,82027,82028],{"class":126},"    const total = arr.reduce(function (prev, current) {\n",[109,82030,82031],{"class":111,"line":167},[109,82032,82033],{"class":126},"      return prev + current\n",[109,82035,82036],{"class":111,"line":185},[109,82037,34636],{"class":126},[109,82039,82040],{"class":111,"line":201},[109,82041,82042],{"class":126},"    console.log(total)   \u002F\u002F14\n",[109,82044,82045],{"class":111,"line":206},[109,82046,82047],{"class":126},"    \u002F\u002F 2.有初始值\n",[109,82049,82050],{"class":111,"line":218},[109,82051,82052],{"class":126},"    const total1 = arr.reduce(function (prev, current) {\n",[109,82054,82055],{"class":111,"line":223},[109,82056,82033],{"class":126},[109,82058,82059],{"class":111,"line":229},[109,82060,82061],{"class":126},"    }, 10)\n",[109,82063,82064],{"class":111,"line":244},[109,82065,82066],{"class":126},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[109,82068,82069],{"class":111,"line":258},[109,82070,158],{"emptyLinePlaceholder":157},[109,82072,82073],{"class":111,"line":263},[109,82074,82075],{"class":126},"    \u002F\u002F 3.箭头函数写法\n",[109,82077,82078],{"class":111,"line":269},[109,82079,82080],{"class":126},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[109,82082,82083],{"class":111,"line":304},[109,82084,82085],{"class":126},"    console.log(total2)   \u002F\u002F24\n",[109,82087,82088,82090,82092],{"class":111,"line":331},[109,82089,53592],{"class":126},[109,82091,52988],{"class":52475},[109,82093,52482],{"class":126},[109,82095,82096,82098,82100],{"class":111,"line":336},[109,82097,52960],{"class":126},[109,82099,52975],{"class":52475},[109,82101,52482],{"class":126},[19,82103,82104],{},"执行过程：",[765,82106,82107,82110,82113],{},[30,82108,82109],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[30,82111,82112],{},"每一次循环，把返回值给作为下一次循环的上一次值",[30,82114,82115],{},"如果有起始值，则起始值作为上一次值",[99,82117,82119],{"className":54242,"code":82118,"language":54244,"meta":104,"style":104},"\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",[106,82120,82121,82129,82137,82141,82145,82149,82153,82157,82161,82166,82171,82176,82181,82186,82190,82194,82198,82202,82206,82210,82215,82219,82224,82228,82233,82238,82242,82246,82250,82258],{"__ignoreMap":104},[109,82122,82123,82125,82127],{"class":111,"line":112},[109,82124,1320],{"class":126},[109,82126,52975],{"class":52475},[109,82128,52482],{"class":126},[109,82130,82131,82133,82135],{"class":111,"line":119},[109,82132,53319],{"class":126},[109,82134,52988],{"class":52475},[109,82136,52482],{"class":126},[109,82138,82139],{"class":111,"line":140},[109,82140,82018],{"class":126},[109,82142,82143],{"class":111,"line":154},[109,82144,82023],{"class":126},[109,82146,82147],{"class":111,"line":161},[109,82148,82028],{"class":126},[109,82150,82151],{"class":111,"line":167},[109,82152,82033],{"class":126},[109,82154,82155],{"class":111,"line":185},[109,82156,34636],{"class":126},[109,82158,82159],{"class":111,"line":201},[109,82160,82042],{"class":126},[109,82162,82163],{"class":111,"line":206},[109,82164,82165],{"class":126},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[109,82167,82168],{"class":111,"line":218},[109,82169,82170],{"class":126},"    \u002F\u002F     1              5                    6\n",[109,82172,82173],{"class":111,"line":223},[109,82174,82175],{"class":126},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[109,82177,82178],{"class":111,"line":229},[109,82179,82180],{"class":126},"    \u002F\u002F     6              8                    14\n",[109,82182,82183],{"class":111,"line":244},[109,82184,82185],{"class":126},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[109,82187,82188],{"class":111,"line":258},[109,82189,82047],{"class":126},[109,82191,82192],{"class":111,"line":263},[109,82193,82052],{"class":126},[109,82195,82196],{"class":111,"line":269},[109,82197,82033],{"class":126},[109,82199,82200],{"class":111,"line":304},[109,82201,82061],{"class":126},[109,82203,82204],{"class":111,"line":331},[109,82205,82066],{"class":126},[109,82207,82208],{"class":111,"line":336},[109,82209,82165],{"class":126},[109,82211,82212],{"class":111,"line":364},[109,82213,82214],{"class":126},"    \u002F\u002F     10             1                     11\n",[109,82216,82217],{"class":111,"line":391},[109,82218,82175],{"class":126},[109,82220,82221],{"class":111,"line":396},[109,82222,82223],{"class":126},"    \u002F\u002F     11             5                    16\n",[109,82225,82226],{"class":111,"line":402},[109,82227,82175],{"class":126},[109,82229,82230],{"class":111,"line":419},[109,82231,82232],{"class":126},"    \u002F\u002F     16             8                    24\n",[109,82234,82235],{"class":111,"line":435},[109,82236,82237],{"class":126},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[109,82239,82240],{"class":111,"line":440},[109,82241,82075],{"class":126},[109,82243,82244],{"class":111,"line":467},[109,82245,82080],{"class":126},[109,82247,82248],{"class":111,"line":494},[109,82249,82085],{"class":126},[109,82251,82252,82254,82256],{"class":111,"line":499},[109,82253,53592],{"class":126},[109,82255,52988],{"class":52475},[109,82257,52482],{"class":126},[109,82259,82260,82262,82264],{"class":111,"line":526},[109,82261,52960],{"class":126},[109,82263,52975],{"class":52475},[109,82265,52482],{"class":126},[24083,82267,82269],{"id":82268},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82271,82272],{},[938,82273],{"alt":104,"src":82274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[99,82276,82278],{"className":54242,"code":82277,"language":54244,"meta":104,"style":104},"\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",[106,82279,82280,82288,82296,82301,82306,82311,82316,82320,82325,82330,82335,82340,82345,82350,82354,82359,82363,82368,82376],{"__ignoreMap":104},[109,82281,82282,82284,82286],{"class":111,"line":112},[109,82283,1320],{"class":126},[109,82285,52975],{"class":52475},[109,82287,52482],{"class":126},[109,82289,82290,82292,82294],{"class":111,"line":119},[109,82291,53319],{"class":126},[109,82293,52988],{"class":52475},[109,82295,52482],{"class":126},[109,82297,82298],{"class":111,"line":140},[109,82299,82300],{"class":126},"    const arr = [\n",[109,82302,82303],{"class":111,"line":154},[109,82304,82305],{"class":126},"      { name: '张三', salary: 10000 },\n",[109,82307,82308],{"class":111,"line":161},[109,82309,82310],{"class":126},"      { name: '李四', salary: 10000 },\n",[109,82312,82313],{"class":111,"line":167},[109,82314,82315],{"class":126},"      { name: '王五', salary: 10000 }\n",[109,82317,82318],{"class":111,"line":185},[109,82319,54284],{"class":126},[109,82321,82322],{"class":111,"line":201},[109,82323,82324],{"class":126},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[109,82326,82327],{"class":111,"line":206},[109,82328,82329],{"class":126},"    \u002F\u002F prev是累计值\n",[109,82331,82332],{"class":111,"line":218},[109,82333,82334],{"class":126},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[109,82336,82337],{"class":111,"line":223},[109,82338,82339],{"class":126},"    console.log(total)\n",[109,82341,82342],{"class":111,"line":229},[109,82343,82344],{"class":126},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[109,82346,82347],{"class":111,"line":244},[109,82348,82349],{"class":126},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[109,82351,82352],{"class":111,"line":258},[109,82353,82344],{"class":126},[109,82355,82356],{"class":111,"line":263},[109,82357,82358],{"class":126},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[109,82360,82361],{"class":111,"line":269},[109,82362,82344],{"class":126},[109,82364,82365],{"class":111,"line":304},[109,82366,82367],{"class":126},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[109,82369,82370,82372,82374],{"class":111,"line":331},[109,82371,53592],{"class":126},[109,82373,52988],{"class":52475},[109,82375,52482],{"class":126},[109,82377,82378,82380,82382],{"class":111,"line":336},[109,82379,52960],{"class":126},[109,82381,52975],{"class":52475},[109,82383,52482],{"class":126},[24083,82385,82387],{"id":82386},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82389,82390],{},[938,82391],{"alt":104,"src":82392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82394,82395],{},[938,82396],{"alt":104,"src":82397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[765,82399,82400],{},[30,82401,82402],{},"find()",[19,82404,82405],{},"循环查找，找到第一个就ok",[19,82407,82408],{},[1776,82409,82412],{"href":82410,"rel":82411},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25039],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[99,82414,82416],{"className":51808,"code":82415,"language":51810,"meta":104,"style":104},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[106,82417,82418,82423,82428],{"__ignoreMap":104},[109,82419,82420],{"class":111,"line":112},[109,82421,82422],{"class":126},"const array1 = [5, 12, 8, 130, 44]\n",[109,82424,82425],{"class":111,"line":119},[109,82426,82427],{"class":126},"const found = array1.find((element) => element > 10)\n",[109,82429,82430],{"class":111,"line":140},[109,82431,82432],{"class":126},"console.log(found)  \u002F\u002F12\n",[19,82434,82435,82437,82438,82443,82444,82447,82448,82450,82451,82456,82457,82459,82460,82462,82463,82465,82466],{},[106,82436,82402],{}," 方法是一个",[1776,82439,82442],{"href":82440,"rel":82441},"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",[25039],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[106,82445,82446],{},"callbackFn"," 函数，直到 ",[106,82449,82446],{}," 返回一个",[1776,82452,82455],{"href":82453,"rel":82454},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25039],"真值","。然后 ",[106,82458,82402],{}," 返回该元素并停止迭代数组。如果 ",[106,82461,82446],{}," 从未返回真值，则 ",[106,82464,82402],{}," 返回 ",[106,82467,82468],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[99,82470,82472],{"className":54242,"code":82471,"language":54244,"meta":104,"style":104},"\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",[106,82473,82474,82482,82490,82495,82500,82505,82509,82514,82519,82523,82528,82533,82537,82541,82546,82551,82555,82559,82564,82569,82574,82579,82584,82588,82593,82598,82603,82608,82612,82617,82625],{"__ignoreMap":104},[109,82475,82476,82478,82480],{"class":111,"line":112},[109,82477,1320],{"class":126},[109,82479,52975],{"class":52475},[109,82481,52482],{"class":126},[109,82483,82484,82486,82488],{"class":111,"line":119},[109,82485,53319],{"class":126},[109,82487,52988],{"class":52475},[109,82489,52482],{"class":126},[109,82491,82492],{"class":111,"line":140},[109,82493,82494],{"class":126},"    const arr = ['red', 'blue', 'green']\n",[109,82496,82497],{"class":111,"line":154},[109,82498,82499],{"class":126},"    const found = arr.find(item => item === 'pink')\n",[109,82501,82502],{"class":111,"line":161},[109,82503,82504],{"class":126},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[109,82506,82507],{"class":111,"line":167},[109,82508,158],{"emptyLinePlaceholder":157},[109,82510,82511],{"class":111,"line":185},[109,82512,82513],{"class":126},"    \u002F\u002F 使用场景，用于查找数据\n",[109,82515,82516],{"class":111,"line":201},[109,82517,82518],{"class":126},"    const arr1 = [\n",[109,82520,82521],{"class":111,"line":206},[109,82522,80561],{"class":126},[109,82524,82525],{"class":111,"line":218},[109,82526,82527],{"class":126},"        name: '小米',\n",[109,82529,82530],{"class":111,"line":223},[109,82531,82532],{"class":126},"        price: 1999\n",[109,82534,82535],{"class":111,"line":229},[109,82536,79067],{"class":126},[109,82538,82539],{"class":111,"line":244},[109,82540,80561],{"class":126},[109,82542,82543],{"class":111,"line":258},[109,82544,82545],{"class":126},"        name: '华为',\n",[109,82547,82548],{"class":111,"line":263},[109,82549,82550],{"class":126},"        price: 3999\n",[109,82552,82553],{"class":111,"line":269},[109,82554,53573],{"class":126},[109,82556,82557],{"class":111,"line":304},[109,82558,54284],{"class":126},[109,82560,82561],{"class":111,"line":331},[109,82562,82563],{"class":126},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[109,82565,82566],{"class":111,"line":336},[109,82567,82568],{"class":126},"    \u002F\u002F const found1 = arr1.find(item => {\n",[109,82570,82571],{"class":111,"line":364},[109,82572,82573],{"class":126},"    \u002F\u002F   if (item.name === '小米') {\n",[109,82575,82576],{"class":111,"line":391},[109,82577,82578],{"class":126},"    \u002F\u002F     return item\n",[109,82580,82581],{"class":111,"line":396},[109,82582,82583],{"class":126},"    \u002F\u002F   }\n",[109,82585,82586],{"class":111,"line":402},[109,82587,64465],{"class":126},[109,82589,82590],{"class":111,"line":419},[109,82591,82592],{"class":126},"    \u002F\u002F 另一种写法\n",[109,82594,82595],{"class":111,"line":435},[109,82596,82597],{"class":126},"    const found1 = arr1.find(item => {\n",[109,82599,82600],{"class":111,"line":440},[109,82601,82602],{"class":126},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[109,82604,82605],{"class":111,"line":467},[109,82606,82607],{"class":126},"      return item.name = '小米'\n",[109,82609,82610],{"class":111,"line":494},[109,82611,34636],{"class":126},[109,82613,82614],{"class":111,"line":499},[109,82615,82616],{"class":126},"    console.log(found1)\n",[109,82618,82619,82621,82623],{"class":111,"line":526},[109,82620,53592],{"class":126},[109,82622,52988],{"class":52475},[109,82624,52482],{"class":126},[109,82626,82627,82629,82631],{"class":111,"line":552},[109,82628,52960],{"class":126},[109,82630,52975],{"class":52475},[109,82632,52482],{"class":126},[19,82634,82635],{},[938,82636],{"alt":104,"src":82637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82639,82640],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[765,82642,82643],{"start":119},[30,82644,82645],{},"every()返回的是布尔值",[19,82647,82648],{},[1776,82649,82652],{"href":82650,"rel":82651},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25039],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82654,82655],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82657,82658],{},"some是只有有一个就没问题",[19,82660,82661],{},"every是必须全是才行",[99,82663,82667],{"className":82664,"code":82665,"language":82666,"meta":104,"style":104},"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",[106,82668,82669,82685,82699,82703,82712],{"__ignoreMap":104},[109,82670,82671,82673,82676,82678,82680,82683],{"class":111,"line":112},[109,82672,55624],{"class":122},[109,82674,82675],{"class":126}," isBigEnough(element, ",[109,82677,75233],{"class":122},[109,82679,13608],{"class":126},[109,82681,82682],{"class":122},"array",[109,82684,13615],{"class":126},[109,82686,82687,82690,82693,82695,82697],{"class":111,"line":119},[109,82688,82689],{"class":122},"  return",[109,82691,82692],{"class":126}," element ",[109,82694,3086],{"class":122},[109,82696,134],{"class":133},[109,82698,137],{"class":126},[109,82700,82701],{"class":111,"line":140},[109,82702,742],{"class":126},[109,82704,82705,82708,82710],{"class":111,"line":154},[109,82706,82707],{"class":126},"[12, 5, 8, 130, 44].every(isBigEnough); ",[109,82709,34504],{"class":122},[109,82711,55691],{"class":126},[109,82713,82714,82717,82719],{"class":111,"line":161},[109,82715,82716],{"class":126},"[12, 54, 18, 130, 44].every(isBigEnough); ",[109,82718,34504],{"class":122},[109,82720,59115],{"class":126},[99,82722,82724],{"className":54242,"code":82723,"language":54244,"meta":104,"style":104},"\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",[106,82725,82726,82734,82742,82747,82751,82756,82761,82769],{"__ignoreMap":104},[109,82727,82728,82730,82732],{"class":111,"line":112},[109,82729,1320],{"class":126},[109,82731,52975],{"class":52475},[109,82733,52482],{"class":126},[109,82735,82736,82738,82740],{"class":111,"line":119},[109,82737,53319],{"class":126},[109,82739,52988],{"class":52475},[109,82741,52482],{"class":126},[109,82743,82744],{"class":111,"line":140},[109,82745,82746],{"class":126},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[109,82748,82749],{"class":111,"line":154},[109,82750,79497],{"class":126},[109,82752,82753],{"class":111,"line":161},[109,82754,82755],{"class":126},"    const flag = arr.every(item => item >= 10)\n",[109,82757,82758],{"class":111,"line":167},[109,82759,82760],{"class":126},"    console.log(flag)    \u002F\u002Ftrue\n",[109,82762,82763,82765,82767],{"class":111,"line":185},[109,82764,53592],{"class":126},[109,82766,52988],{"class":52475},[109,82768,52482],{"class":126},[109,82770,82771,82773,82775],{"class":111,"line":201},[109,82772,52960],{"class":126},[109,82774,52975],{"class":52475},[109,82776,52482],{"class":126},[99,82778,82780],{"className":54242,"code":82779,"language":54244,"meta":104,"style":104},"\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",[106,82781,82782,82790,82798,82802,82807,82812,82817,82825],{"__ignoreMap":104},[109,82783,82784,82786,82788],{"class":111,"line":112},[109,82785,1320],{"class":126},[109,82787,52975],{"class":52475},[109,82789,52482],{"class":126},[109,82791,82792,82794,82796],{"class":111,"line":119},[109,82793,53319],{"class":126},[109,82795,52988],{"class":52475},[109,82797,52482],{"class":126},[109,82799,82800],{"class":111,"line":140},[109,82801,82746],{"class":126},[109,82803,82804],{"class":111,"line":154},[109,82805,82806],{"class":126},"    const arr = [10, 0, 5]\n",[109,82808,82809],{"class":111,"line":161},[109,82810,82811],{"class":126},"    const flag = arr.some(item => item >= 10)\n",[109,82813,82814],{"class":111,"line":167},[109,82815,82816],{"class":126},"    console.log(flag)   \u002F\u002Ftrue\n",[109,82818,82819,82821,82823],{"class":111,"line":185},[109,82820,53592],{"class":126},[109,82822,52988],{"class":52475},[109,82824,52482],{"class":126},[109,82826,82827,82829,82831],{"class":111,"line":201},[109,82828,52960],{"class":126},[109,82830,52975],{"class":52475},[109,82832,52482],{"class":126},[24083,82834,82836],{"id":82835},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82838,82839],{},[938,82840],{"alt":104,"src":82841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[99,82843,82845],{"className":51808,"code":82844,"language":51810,"meta":104,"style":104},"\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",[106,82846,82847,82857,82871,82875,82883,82897,82917,82929,82937,82944,82956,82968,82980,82992,83002,83012,83016,83024,83032,83036,83044,83056,83064,83086,83091,83096,83129,83137,83145,83149],{"__ignoreMap":104},[109,82848,82849,82851,82853,82855],{"class":111,"line":112},[109,82850,52472],{"class":126},[109,82852,52476],{"class":52475},[109,82854,52479],{"class":211},[109,82856,52482],{"class":126},[109,82858,82859,82861,82863,82865,82867,82869],{"class":111,"line":119},[109,82860,1320],{"class":126},[109,82862,51810],{"class":52475},[109,82864,52491],{"class":211},[109,82866,130],{"class":126},[109,82868,52496],{"class":278},[109,82870,52482],{"class":126},[109,82872,82873],{"class":111,"line":140},[109,82874,158],{"emptyLinePlaceholder":157},[109,82876,82877,82879,82881],{"class":111,"line":154},[109,82878,1320],{"class":126},[109,82880,52509],{"class":52475},[109,82882,52482],{"class":126},[109,82884,82885,82887,82889,82891,82893,82895],{"class":111,"line":161},[109,82886,53319],{"class":126},[109,82888,52519],{"class":52475},[109,82890,52522],{"class":211},[109,82892,130],{"class":126},[109,82894,52527],{"class":278},[109,82896,52482],{"class":126},[109,82898,82899,82901,82903,82905,82907,82909,82911,82913,82915],{"class":111,"line":167},[109,82900,53319],{"class":126},[109,82902,52519],{"class":52475},[109,82904,16093],{"class":211},[109,82906,130],{"class":126},[109,82908,52566],{"class":278},[109,82910,52546],{"class":211},[109,82912,130],{"class":126},[109,82914,52573],{"class":278},[109,82916,52482],{"class":126},[109,82918,82919,82921,82923,82925,82927],{"class":111,"line":185},[109,82920,53319],{"class":126},[109,82922,52582],{"class":52475},[109,82924,52585],{"class":126},[109,82926,52582],{"class":52475},[109,82928,52482],{"class":126},[109,82930,82931,82933,82935],{"class":111,"line":201},[109,82932,53319],{"class":126},[109,82934,1467],{"class":52475},[109,82936,52482],{"class":126},[109,82938,82939,82942],{"class":111,"line":206},[109,82940,82941],{"class":52475},"    div",[109,82943,16745],{"class":126},[109,82945,82946,82948,82950,82952,82954],{"class":111,"line":218},[109,82947,55946],{"class":133},[109,82949,52612],{"class":126},[109,82951,3098],{"class":133},[109,82953,52667],{"class":122},[109,82955,137],{"class":126},[109,82957,82958,82960,82962,82964,82966],{"class":111,"line":223},[109,82959,55960],{"class":133},[109,82961,52612],{"class":126},[109,82963,1937],{"class":133},[109,82965,52667],{"class":122},[109,82967,137],{"class":126},[109,82969,82970,82972,82974,82976,82978],{"class":111,"line":229},[109,82971,58534],{"class":133},[109,82973,52612],{"class":126},[109,82975,1937],{"class":133},[109,82977,52667],{"class":122},[109,82979,137],{"class":126},[109,82981,82982,82984,82986,82988,82990],{"class":111,"line":244},[109,82983,66308],{"class":133},[109,82985,52612],{"class":126},[109,82987,2030],{"class":133},[109,82989,52667],{"class":122},[109,82991,137],{"class":126},[109,82993,82994,82996,82998,83000],{"class":111,"line":258},[109,82995,58461],{"class":133},[109,82997,52612],{"class":126},[109,82999,52767],{"class":133},[109,83001,137],{"class":126},[109,83003,83004,83006,83008,83010],{"class":111,"line":263},[109,83005,56059],{"class":133},[109,83007,52612],{"class":126},[109,83009,52820],{"class":133},[109,83011,137],{"class":126},[109,83013,83014],{"class":111,"line":269},[109,83015,1361],{"class":126},[109,83017,83018,83020,83022],{"class":111,"line":304},[109,83019,53592],{"class":126},[109,83021,1467],{"class":52475},[109,83023,52482],{"class":126},[109,83025,83026,83028,83030],{"class":111,"line":331},[109,83027,52960],{"class":126},[109,83029,52509],{"class":52475},[109,83031,52482],{"class":126},[109,83033,83034],{"class":111,"line":336},[109,83035,158],{"emptyLinePlaceholder":157},[109,83037,83038,83040,83042],{"class":111,"line":364},[109,83039,1320],{"class":126},[109,83041,52975],{"class":52475},[109,83043,52482],{"class":126},[109,83045,83046,83048,83050,83052,83054],{"class":111,"line":391},[109,83047,53319],{"class":126},[109,83049,52786],{"class":52475},[109,83051,56489],{"class":126},[109,83053,52786],{"class":52475},[109,83055,52482],{"class":126},[109,83057,83058,83060,83062],{"class":111,"line":396},[109,83059,53319],{"class":126},[109,83061,52988],{"class":52475},[109,83063,52482],{"class":126},[109,83065,83066,83068,83071,83073,83076,83079,83081,83084],{"class":111,"line":402},[109,83067,619],{"class":122},[109,83069,83070],{"class":133}," spec",[109,83072,14737],{"class":122},[109,83074,83075],{"class":126}," { size: ",[109,83077,83078],{"class":278},"'40cm*40cm'",[109,83080,56639],{"class":126},[109,83082,83083],{"class":278},"'黑色'",[109,83085,56779],{"class":126},[109,83087,83088],{"class":111,"line":419},[109,83089,83090],{"class":115},"    \u002F\u002F const arr = Object.values(spec)\n",[109,83092,83093],{"class":111,"line":435},[109,83094,83095],{"class":115},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[109,83097,83098,83100,83102,83104,83107,83109,83111,83114,83117,83120,83122,83124,83127],{"class":111,"line":440},[109,83099,53582],{"class":126},[109,83101,55574],{"class":211},[109,83103,714],{"class":126},[109,83105,83106],{"class":278},"'div'",[109,83108,75424],{"class":126},[109,83110,130],{"class":122},[109,83112,83113],{"class":126}," Object.",[109,83115,83116],{"class":211},"values",[109,83118,83119],{"class":126},"(spec).",[109,83121,75398],{"class":211},[109,83123,714],{"class":126},[109,83125,83126],{"class":278},"'\u002F'",[109,83128,1330],{"class":126},[109,83130,83131,83133,83135],{"class":111,"line":467},[109,83132,53592],{"class":126},[109,83134,52988],{"class":52475},[109,83136,52482],{"class":126},[109,83138,83139,83141,83143],{"class":111,"line":494},[109,83140,52960],{"class":126},[109,83142,52975],{"class":52475},[109,83144,52482],{"class":126},[109,83146,83147],{"class":111,"line":499},[109,83148,158],{"emptyLinePlaceholder":157},[109,83150,83151,83153,83155],{"class":111,"line":526},[109,83152,52960],{"class":126},[109,83154,51810],{"class":52475},[109,83156,52482],{"class":126},[19,83158,83159],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24083,83161,83163],{"id":83162},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83165,83166],{},"静态方法，将伪数组转换为真数组",[19,83168,83169],{},[938,83170],{"alt":104,"src":83171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[99,83173,83175],{"className":54242,"code":83174,"language":54244,"meta":104,"style":104},"\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",[106,83176,83177,83185,83193,83205,83217,83229,83237,83245,83250,83255,83260,83265,83273],{"__ignoreMap":104},[109,83178,83179,83181,83183],{"class":111,"line":112},[109,83180,1320],{"class":126},[109,83182,52975],{"class":52475},[109,83184,52482],{"class":126},[109,83186,83187,83189,83191],{"class":111,"line":119},[109,83188,53319],{"class":126},[109,83190,27],{"class":52475},[109,83192,52482],{"class":126},[109,83194,83195,83197,83199,83201,83203],{"class":111,"line":140},[109,83196,52516],{"class":126},[109,83198,30],{"class":52475},[109,83200,56489],{"class":126},[109,83202,30],{"class":52475},[109,83204,52482],{"class":126},[109,83206,83207,83209,83211,83213,83215],{"class":111,"line":154},[109,83208,52516],{"class":126},[109,83210,30],{"class":52475},[109,83212,56489],{"class":126},[109,83214,30],{"class":52475},[109,83216,52482],{"class":126},[109,83218,83219,83221,83223,83225,83227],{"class":111,"line":161},[109,83220,52516],{"class":126},[109,83222,30],{"class":52475},[109,83224,56489],{"class":126},[109,83226,30],{"class":52475},[109,83228,52482],{"class":126},[109,83230,83231,83233,83235],{"class":111,"line":167},[109,83232,53592],{"class":126},[109,83234,27],{"class":52475},[109,83236,52482],{"class":126},[109,83238,83239,83241,83243],{"class":111,"line":185},[109,83240,53319],{"class":126},[109,83242,52988],{"class":52475},[109,83244,52482],{"class":126},[109,83246,83247],{"class":111,"line":201},[109,83248,83249],{"class":126},"    const lis = document.querySelectorAll('li')\n",[109,83251,83252],{"class":111,"line":206},[109,83253,83254],{"class":126},"    const liss = Array.from(lis)\n",[109,83256,83257],{"class":111,"line":218},[109,83258,83259],{"class":126},"    liss.pop()\n",[109,83261,83262],{"class":111,"line":223},[109,83263,83264],{"class":126},"    console.log(liss)\n",[109,83266,83267,83269,83271],{"class":111,"line":229},[109,83268,53592],{"class":126},[109,83270,52988],{"class":52475},[109,83272,52482],{"class":126},[109,83274,83275,83277,83279],{"class":111,"line":244},[109,83276,52960],{"class":126},[109,83278,52975],{"class":52475},[109,83280,52482],{"class":126},[19,83282,83283],{},[938,83284],{"alt":104,"src":83285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23171,83287,83289],{"id":83288},"_41053-string","4.10.5.3 String",[19,83291,83292],{},[938,83293],{"alt":104,"src":83294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24083,83296,83298],{"id":83297},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[99,83300,83302],{"className":54242,"code":83301,"language":54244,"meta":104,"style":104},"\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",[106,83303,83304,83312,83320,83325,83330,83335,83339,83344,83349,83354,83362],{"__ignoreMap":104},[109,83305,83306,83308,83310],{"class":111,"line":112},[109,83307,1320],{"class":126},[109,83309,52975],{"class":52475},[109,83311,52482],{"class":126},[109,83313,83314,83316,83318],{"class":111,"line":119},[109,83315,53319],{"class":126},[109,83317,52988],{"class":52475},[109,83319,52482],{"class":126},[109,83321,83322],{"class":111,"line":140},[109,83323,83324],{"class":126},"    \u002F\u002F 把字符串转化为数组\n",[109,83326,83327],{"class":111,"line":154},[109,83328,83329],{"class":126},"    const str = 'pink,red'\n",[109,83331,83332],{"class":111,"line":161},[109,83333,83334],{"class":126},"    const arr = str.split(',')\n",[109,83336,83337],{"class":111,"line":167},[109,83338,81813],{"class":126},[109,83340,83341],{"class":111,"line":185},[109,83342,83343],{"class":126},"    const str1 = '2025-8-25'\n",[109,83345,83346],{"class":111,"line":201},[109,83347,83348],{"class":126},"    const arr1 = str1.split('-')\n",[109,83350,83351],{"class":111,"line":206},[109,83352,83353],{"class":126},"    console.log(arr1)\n",[109,83355,83356,83358,83360],{"class":111,"line":218},[109,83357,53592],{"class":126},[109,83359,52988],{"class":52475},[109,83361,52482],{"class":126},[109,83363,83364,83366,83368],{"class":111,"line":223},[109,83365,52960],{"class":126},[109,83367,52975],{"class":52475},[109,83369,52482],{"class":126},[24083,83371,83373],{"id":83372},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83375,6518],{},[19,83377,83378],{},"substring(indexStart)",[19,83380,83381],{},"substring(indexStart, indexEnd)",[27,83383,83384,83395,83407,83417],{},[30,83385,83386,83387,83390,83391,83394],{},"如果省略了 ",[106,83388,83389],{},"indexEnd","，则 ",[106,83392,83393],{},"substring()"," 提取字符直到字符串的末尾",[30,83396,83397,83398,83401,83402,83390,83404,83406],{},"如果 ",[106,83399,83400],{},"indexStart"," 等于 ",[106,83403,83389],{},[106,83405,83393],{}," 返回一个空字符串",[30,83408,83397,83409,83411,83412,83390,83414,83416],{},[106,83410,83400],{}," 大于 ",[106,83413,83389],{},[106,83415,83393],{}," 的效果就像交换了这两个参数一样",[30,83418,83419],{},"结束的索引号不包含想要截取的部分",[99,83421,83423],{"className":82664,"code":83422,"language":82666,"meta":104,"style":104},"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",[106,83424,83425,83437,83441,83475,83505,83509,83540,83544,83571,83601,83631,83635,83666],{"__ignoreMap":104},[109,83426,83427,83430,83432,83435],{"class":111,"line":112},[109,83428,83429],{"class":126},"const anyString ",[109,83431,130],{"class":122},[109,83433,83434],{"class":278}," \"Mozilla\"",[109,83436,137],{"class":126},[109,83438,83439],{"class":111,"line":119},[109,83440,158],{"emptyLinePlaceholder":157},[109,83442,83443,83446,83448,83450,83452,83455,83457,83460,83462,83464,83466,83468,83470,83472],{"class":111,"line":140},[109,83444,83445],{"class":133},"console",[109,83447,2090],{"class":126},[109,83449,59422],{"class":133},[109,83451,714],{"class":126},[109,83453,83454],{"class":133},"anyString",[109,83456,2090],{"class":126},[109,83458,83459],{"class":133},"substring",[109,83461,714],{"class":126},[109,83463,1314],{"class":133},[109,83465,13608],{"class":126},[109,83467,1755],{"class":133},[109,83469,76428],{"class":126},[109,83471,34504],{"class":122},[109,83473,83474],{"class":278}," 'M'\n",[109,83476,83477,83479,83481,83483,83485,83487,83489,83491,83493,83495,83497,83499,83501,83503],{"class":111,"line":154},[109,83478,83445],{"class":133},[109,83480,2090],{"class":126},[109,83482,59422],{"class":133},[109,83484,714],{"class":126},[109,83486,83454],{"class":133},[109,83488,2090],{"class":126},[109,83490,83459],{"class":133},[109,83492,714],{"class":126},[109,83494,1755],{"class":133},[109,83496,13608],{"class":126},[109,83498,1314],{"class":133},[109,83500,76428],{"class":126},[109,83502,34504],{"class":122},[109,83504,83474],{"class":278},[109,83506,83507],{"class":111,"line":161},[109,83508,158],{"emptyLinePlaceholder":157},[109,83510,83511,83513,83515,83517,83519,83521,83523,83525,83527,83529,83531,83533,83535,83537],{"class":111,"line":167},[109,83512,83445],{"class":133},[109,83514,2090],{"class":126},[109,83516,59422],{"class":133},[109,83518,714],{"class":126},[109,83520,83454],{"class":133},[109,83522,2090],{"class":126},[109,83524,83459],{"class":133},[109,83526,714],{"class":126},[109,83528,1314],{"class":133},[109,83530,13608],{"class":126},[109,83532,1881],{"class":133},[109,83534,76428],{"class":126},[109,83536,34504],{"class":122},[109,83538,83539],{"class":278}," 'Mozill'\n",[109,83541,83542],{"class":111,"line":185},[109,83543,158],{"emptyLinePlaceholder":157},[109,83545,83546,83548,83550,83552,83554,83556,83558,83560,83562,83564,83566,83568],{"class":111,"line":201},[109,83547,83445],{"class":133},[109,83549,2090],{"class":126},[109,83551,59422],{"class":133},[109,83553,714],{"class":126},[109,83555,83454],{"class":133},[109,83557,2090],{"class":126},[109,83559,83459],{"class":133},[109,83561,714],{"class":126},[109,83563,1831],{"class":133},[109,83565,76428],{"class":126},[109,83567,34504],{"class":122},[109,83569,83570],{"class":278}," 'lla'\n",[109,83572,83573,83575,83577,83579,83581,83583,83585,83587,83589,83591,83593,83595,83597,83599],{"class":111,"line":206},[109,83574,83445],{"class":133},[109,83576,2090],{"class":126},[109,83578,59422],{"class":133},[109,83580,714],{"class":126},[109,83582,83454],{"class":133},[109,83584,2090],{"class":126},[109,83586,83459],{"class":133},[109,83588,714],{"class":126},[109,83590,1831],{"class":133},[109,83592,13608],{"class":126},[109,83594,1905],{"class":133},[109,83596,76484],{"class":126},[109,83598,34504],{"class":122},[109,83600,83570],{"class":278},[109,83602,83603,83605,83607,83609,83611,83613,83615,83617,83619,83621,83623,83625,83627,83629],{"class":111,"line":218},[109,83604,83445],{"class":133},[109,83606,2090],{"class":126},[109,83608,59422],{"class":133},[109,83610,714],{"class":126},[109,83612,83454],{"class":133},[109,83614,2090],{"class":126},[109,83616,83459],{"class":133},[109,83618,714],{"class":126},[109,83620,1905],{"class":133},[109,83622,13608],{"class":126},[109,83624,1831],{"class":133},[109,83626,76428],{"class":126},[109,83628,34504],{"class":122},[109,83630,83570],{"class":278},[109,83632,83633],{"class":111,"line":223},[109,83634,158],{"emptyLinePlaceholder":157},[109,83636,83637,83639,83641,83643,83645,83647,83649,83651,83653,83655,83657,83659,83661,83663],{"class":111,"line":229},[109,83638,83445],{"class":133},[109,83640,2090],{"class":126},[109,83642,59422],{"class":133},[109,83644,714],{"class":126},[109,83646,83454],{"class":133},[109,83648,2090],{"class":126},[109,83650,83459],{"class":133},[109,83652,714],{"class":126},[109,83654,1314],{"class":133},[109,83656,13608],{"class":126},[109,83658,1905],{"class":133},[109,83660,76428],{"class":126},[109,83662,34504],{"class":122},[109,83664,83665],{"class":278}," 'Mozilla'\n",[109,83667,83668,83670,83672,83674,83676,83678,83680,83682,83684,83686,83688,83690,83692,83694],{"class":111,"line":244},[109,83669,83445],{"class":133},[109,83671,2090],{"class":126},[109,83673,59422],{"class":133},[109,83675,714],{"class":126},[109,83677,83454],{"class":133},[109,83679,2090],{"class":126},[109,83681,83459],{"class":133},[109,83683,714],{"class":126},[109,83685,1314],{"class":133},[109,83687,13608],{"class":126},[109,83689,1008],{"class":133},[109,83691,76428],{"class":126},[109,83693,34504],{"class":122},[109,83695,83665],{"class":278},[24083,83697,83699],{"id":83698},"_410533-startswith","4.10.5.3.3 startsWith",[19,83701,83702,83705,83706,83711,83712,83714,83715],{},[106,83703,83704],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[23,83707,83708],{},[106,83709,83710],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[106,83713,2755],{}," 或 ",[106,83716,67195],{},[99,83718,83720],{"className":78670,"code":83719,"language":78672,"meta":104,"style":104},"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",[106,83721,83722,83734,83753,83758,83778],{"__ignoreMap":104},[109,83723,83724,83726,83729,83731],{"class":111,"line":112},[109,83725,170],{"class":122},[109,83727,83728],{"class":126}," str1 ",[109,83730,130],{"class":122},[109,83732,83733],{"class":278}," \"Saturday night plans\"\n",[109,83735,83736,83738,83740,83743,83746,83748,83751],{"class":111,"line":119},[109,83737,78707],{"class":126},[109,83739,59422],{"class":211},[109,83741,83742],{"class":126},"(str1.",[109,83744,83745],{"class":211},"startsWith",[109,83747,714],{"class":126},[109,83749,83750],{"class":278},"\"Sat\"",[109,83752,31672],{"class":126},[109,83754,83755],{"class":111,"line":140},[109,83756,83757],{"class":115},"\u002F\u002F Expected output: true\n",[109,83759,83760,83762,83764,83766,83768,83770,83772,83774,83776],{"class":111,"line":154},[109,83761,78707],{"class":126},[109,83763,59422],{"class":211},[109,83765,83742],{"class":126},[109,83767,83745],{"class":211},[109,83769,714],{"class":126},[109,83771,83750],{"class":278},[109,83773,13608],{"class":126},[109,83775,1612],{"class":133},[109,83777,31672],{"class":126},[109,83779,83780],{"class":111,"line":161},[109,83781,83782],{"class":115},"\u002F\u002F Expected output: false\n",[99,83784,83786],{"className":51808,"code":83785,"language":51810,"meta":104,"style":104},"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",[106,83787,83788,83793,83798,83802,83807,83812],{"__ignoreMap":104},[109,83789,83790],{"class":111,"line":112},[109,83791,83792],{"class":126},"startsWith(searchString)\n",[109,83794,83795],{"class":111,"line":119},[109,83796,83797],{"class":126},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[109,83799,83800],{"class":111,"line":140},[109,83801,158],{"emptyLinePlaceholder":157},[109,83803,83804],{"class":111,"line":154},[109,83805,83806],{"class":126},"const str3 = 'pink老师上课中'\n",[109,83808,83809],{"class":111,"line":161},[109,83810,83811],{"class":126},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[109,83813,83814],{"class":111,"line":167},[109,83815,83816],{"class":126},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24083,83818,83820],{"id":83819},"_410534-includes","4.10.5.3.4 includes",[19,83822,83823],{},"includes(searchString) includes(searchString, position)",[765,83825,83826],{},[30,83827,83828],{},"searchString:",[19,83830,83831,83832,83834,83835,83840,83841,83846,83847,22673,83850,83853,83854,83857],{},"一个要在 ",[106,83833,2695],{}," 中查找的字符串。",[1776,83836,83839],{"href":83837,"rel":83838},"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",[25039],"不能是正则表达式","。所有非正则表达式的值都会被",[1776,83842,83845],{"href":83843,"rel":83844},"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",[25039],"强制转换为字符串","，因此如果该参数被省略或传入 ",[106,83848,83849],{},"undefined",[106,83851,83852],{},"includes()"," 方法会在字符串中搜索 ",[106,83855,83856],{},"\"undefined\"","，这通常不是你想要的",[765,83859,83860],{"start":119},[30,83861,83862,2391],{},[106,83863,83864],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83866,83867,83868,83871,83872],{},"在字符串中开始搜索 ",[106,83869,83870],{},"searchString"," 的位置。默认值为 ",[106,83873,1314],{},[765,83875,83876],{"start":140},[30,83877,83878],{},"返回值：",[19,83880,83881,83882,83884,83885,83889,83890],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[106,83883,83870],{}," 为空字符串的情况），则返回 ",[23,83886,83887],{},[106,83888,2755],{}," ，否则返回 ",[23,83891,83892],{},[106,83893,67195],{},[765,83895,83896],{"start":154},[30,83897,83898],{},"异常：",[19,83900,83397,83901,14968,83903,83907],{},[106,83902,83870],{},[1776,83904,83906],{"href":83837,"rel":83905},[25039],"是一个正则表达式","，则会抛出",[19,83909,83910],{},"只要是有就是true，不需要非得以谁开头结尾",[99,83912,83914],{"className":78670,"code":83913,"language":78672,"meta":104,"style":104},"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",[106,83915,83916,83927,83950,83969,83989,84011,84030],{"__ignoreMap":104},[109,83917,83918,83920,83922,83924],{"class":111,"line":112},[109,83919,170],{"class":122},[109,83921,80950],{"class":126},[109,83923,130],{"class":122},[109,83925,83926],{"class":278}," \"To be, or not to be, that is the question.\"\n",[109,83928,83929,83931,83933,83936,83939,83941,83944,83947],{"class":111,"line":119},[109,83930,78707],{"class":126},[109,83932,59422],{"class":211},[109,83934,83935],{"class":126},"(str.",[109,83937,83938],{"class":211},"includes",[109,83940,714],{"class":126},[109,83942,83943],{"class":278},"\"To be\"",[109,83945,83946],{"class":126},"))",[109,83948,83949],{"class":115},"  \u002F\u002F true\n",[109,83951,83952,83954,83956,83958,83960,83962,83965,83967],{"class":111,"line":140},[109,83953,78707],{"class":126},[109,83955,59422],{"class":211},[109,83957,83935],{"class":126},[109,83959,83938],{"class":211},[109,83961,714],{"class":126},[109,83963,83964],{"class":278},"\"question\"",[109,83966,83946],{"class":126},[109,83968,83949],{"class":115},[109,83970,83971,83973,83975,83977,83979,83981,83984,83986],{"class":111,"line":154},[109,83972,78707],{"class":126},[109,83974,59422],{"class":211},[109,83976,83935],{"class":126},[109,83978,83938],{"class":211},[109,83980,714],{"class":126},[109,83982,83983],{"class":278},"\"nonexistent\"",[109,83985,83946],{"class":126},[109,83987,83988],{"class":115},"  \u002F\u002F false\n",[109,83990,83991,83993,83995,83997,83999,84001,84003,84005,84007,84009],{"class":111,"line":161},[109,83992,78707],{"class":126},[109,83994,59422],{"class":211},[109,83996,83935],{"class":126},[109,83998,83938],{"class":211},[109,84000,714],{"class":126},[109,84002,83943],{"class":278},[109,84004,13608],{"class":126},[109,84006,1755],{"class":133},[109,84008,83946],{"class":126},[109,84010,83988],{"class":115},[109,84012,84013,84015,84017,84019,84021,84023,84026,84028],{"class":111,"line":167},[109,84014,78707],{"class":126},[109,84016,59422],{"class":211},[109,84018,83935],{"class":126},[109,84020,83938],{"class":211},[109,84022,714],{"class":126},[109,84024,84025],{"class":278},"\"TO BE\"",[109,84027,83946],{"class":126},[109,84029,83988],{"class":115},[109,84031,84032,84034,84036,84038,84040,84042,84044,84046],{"class":111,"line":185},[109,84033,78707],{"class":126},[109,84035,59422],{"class":211},[109,84037,83935],{"class":126},[109,84039,83938],{"class":211},[109,84041,714],{"class":126},[109,84043,8978],{"class":278},[109,84045,83946],{"class":126},[109,84047,83949],{"class":115},[24083,84049,84051],{"id":84050},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[99,84053,84055],{"className":54242,"code":84054,"language":54244,"meta":104,"style":104},"\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",[106,84056,84057,84065,84073,84078,84083,84088,84093,84098,84106],{"__ignoreMap":104},[109,84058,84059,84061,84063],{"class":111,"line":112},[109,84060,1320],{"class":126},[109,84062,52975],{"class":52475},[109,84064,52482],{"class":126},[109,84066,84067,84069,84071],{"class":111,"line":119},[109,84068,53319],{"class":126},[109,84070,52988],{"class":52475},[109,84072,52482],{"class":126},[109,84074,84075],{"class":111,"line":140},[109,84076,84077],{"class":126},"    const num = 10\n",[109,84079,84080],{"class":111,"line":154},[109,84081,84082],{"class":126},"    \u002F\u002F 强制转换\n",[109,84084,84085],{"class":111,"line":161},[109,84086,84087],{"class":126},"    console.log(String(num))\n",[109,84089,84090],{"class":111,"line":167},[109,84091,84092],{"class":126},"    \u002F\u002F toString()方法转换\n",[109,84094,84095],{"class":111,"line":185},[109,84096,84097],{"class":126},"    console.log(num.toString())\n",[109,84099,84100,84102,84104],{"class":111,"line":201},[109,84101,53592],{"class":126},[109,84103,52988],{"class":52475},[109,84105,52482],{"class":126},[109,84107,84108,84110,84112],{"class":111,"line":206},[109,84109,52960],{"class":126},[109,84111,52975],{"class":52475},[109,84113,52482],{"class":126},[24083,84115,84117],{"id":84116},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84119,84120],{},[938,84121],{"alt":104,"src":84122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[99,84124,84126],{"className":51808,"code":84125,"language":51810,"meta":104,"style":104},"\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",[106,84127,84128,84138,84152,84156,84164,84178,84198,84210,84218,84222,84230,84242,84250,84262,84267,84272,84277,84324,84340,84348,84356,84360],{"__ignoreMap":104},[109,84129,84130,84132,84134,84136],{"class":111,"line":112},[109,84131,52472],{"class":126},[109,84133,52476],{"class":52475},[109,84135,52479],{"class":211},[109,84137,52482],{"class":126},[109,84139,84140,84142,84144,84146,84148,84150],{"class":111,"line":119},[109,84141,1320],{"class":126},[109,84143,51810],{"class":52475},[109,84145,52491],{"class":211},[109,84147,130],{"class":126},[109,84149,52496],{"class":278},[109,84151,52482],{"class":126},[109,84153,84154],{"class":111,"line":140},[109,84155,158],{"emptyLinePlaceholder":157},[109,84157,84158,84160,84162],{"class":111,"line":154},[109,84159,1320],{"class":126},[109,84161,52509],{"class":52475},[109,84163,52482],{"class":126},[109,84165,84166,84168,84170,84172,84174,84176],{"class":111,"line":161},[109,84167,53319],{"class":126},[109,84169,52519],{"class":52475},[109,84171,52522],{"class":211},[109,84173,130],{"class":126},[109,84175,52527],{"class":278},[109,84177,52482],{"class":126},[109,84179,84180,84182,84184,84186,84188,84190,84192,84194,84196],{"class":111,"line":167},[109,84181,53319],{"class":126},[109,84183,52519],{"class":52475},[109,84185,16093],{"class":211},[109,84187,130],{"class":126},[109,84189,52566],{"class":278},[109,84191,52546],{"class":211},[109,84193,130],{"class":126},[109,84195,52573],{"class":278},[109,84197,52482],{"class":126},[109,84199,84200,84202,84204,84206,84208],{"class":111,"line":185},[109,84201,53319],{"class":126},[109,84203,52582],{"class":52475},[109,84205,52585],{"class":126},[109,84207,52582],{"class":52475},[109,84209,52482],{"class":126},[109,84211,84212,84214,84216],{"class":111,"line":201},[109,84213,52960],{"class":126},[109,84215,52509],{"class":52475},[109,84217,52482],{"class":126},[109,84219,84220],{"class":111,"line":206},[109,84221,158],{"emptyLinePlaceholder":157},[109,84223,84224,84226,84228],{"class":111,"line":218},[109,84225,1320],{"class":126},[109,84227,52975],{"class":52475},[109,84229,52482],{"class":126},[109,84231,84232,84234,84236,84238,84240],{"class":111,"line":223},[109,84233,53319],{"class":126},[109,84235,52786],{"class":52475},[109,84237,56489],{"class":126},[109,84239,52786],{"class":52475},[109,84241,52482],{"class":126},[109,84243,84244,84246,84248],{"class":111,"line":229},[109,84245,53319],{"class":126},[109,84247,52988],{"class":52475},[109,84249,52482],{"class":126},[109,84251,84252,84254,84257,84259],{"class":111,"line":244},[109,84253,619],{"class":122},[109,84255,84256],{"class":133}," gift",[109,84258,14737],{"class":122},[109,84260,84261],{"class":278}," '50g的茶叶，清洗球'\n",[109,84263,84264],{"class":111,"line":258},[109,84265,84266],{"class":115},"    \u002F\u002F 1.把字符串拆分为数组\n",[109,84268,84269],{"class":111,"line":263},[109,84270,84271],{"class":115},"    \u002F\u002F console.log(gift.split(','))\n",[109,84273,84274],{"class":111,"line":269},[109,84275,84276],{"class":115},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[109,84278,84279,84281,84283,84285,84288,84291,84293,84296,84298,84300,84302,84304,84306,84309,84311,84314,84316,84318,84320,84322],{"class":111,"line":304},[109,84280,619],{"class":122},[109,84282,75094],{"class":133},[109,84284,14737],{"class":122},[109,84286,84287],{"class":126}," gift.",[109,84289,84290],{"class":211},"split",[109,84292,714],{"class":126},[109,84294,84295],{"class":278},"'，'",[109,84297,32001],{"class":126},[109,84299,75219],{"class":211},[109,84301,714],{"class":126},[109,84303,80970],{"class":6553},[109,84305,80973],{"class":122},[109,84307,84308],{"class":278}," `\u003Cspan>【赠品】${",[109,84310,80970],{"class":126},[109,84312,84313],{"class":278},"}\u003C\u002Fspan>\u003Cbr>`",[109,84315,32001],{"class":126},[109,84317,75398],{"class":211},[109,84319,714],{"class":126},[109,84321,75403],{"class":278},[109,84323,1330],{"class":126},[109,84325,84326,84328,84330,84332,84334,84336,84338],{"class":111,"line":331},[109,84327,53582],{"class":126},[109,84329,55574],{"class":211},[109,84331,714],{"class":126},[109,84333,83106],{"class":278},[109,84335,75424],{"class":126},[109,84337,130],{"class":122},[109,84339,75160],{"class":126},[109,84341,84342,84344,84346],{"class":111,"line":336},[109,84343,53592],{"class":126},[109,84345,52988],{"class":52475},[109,84347,52482],{"class":126},[109,84349,84350,84352,84354],{"class":111,"line":364},[109,84351,52960],{"class":126},[109,84353,52975],{"class":52475},[109,84355,52482],{"class":126},[109,84357,84358],{"class":111,"line":391},[109,84359,158],{"emptyLinePlaceholder":157},[109,84361,84362,84364,84366],{"class":111,"line":396},[109,84363,52960],{"class":126},[109,84365,51810],{"class":52475},[109,84367,52482],{"class":126},[23171,84369,84371],{"id":84370},"_41054-number","4.10.5.4 Number",[19,84373,84374],{},[938,84375],{"alt":104,"src":84376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84378,84379],{},"整数也可以进行toFixed来保留小数",[19,84381,84382],{},"比如：",[19,84384,84385],{},"const price=10",[19,84387,84388],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23171,84390,84392],{"id":84391},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84394,84395],{},[938,84396],{"alt":104,"src":84397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[99,84399,84401],{"className":51808,"code":84400,"language":51810,"meta":104,"style":104},"\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",[106,84402,84403,84413,84427,84431,84439,84453,84473,84485,84493,84499,84509,84519,84529,84533,84537,84543,84555,84569,84573,84577,84583,84595,84611,84621,84637,84641,84645,84651,84661,84671,84675,84679,84687,84699,84711,84723,84727,84731,84739,84751,84755,84759,84770,84780,84792,84804,84814,84818,84822,84830,84839,84851,84861,84871,84875,84879,84887,84896,84903,84913,84925,84929,84933,84942,84952,84963,84975,84987,84991,84995,85004,85014,85025,85029,85033,85039,85051,85063,85073,85083,85101,85113,85117,85121,85130,85142,85152,85162,85174,85178,85186,85194,85198,85206,85220,85228,85242,85270,85278,85286,85296,85300,85308,85316,85325,85333,85342,85352,85356,85360,85368,85376,85385,85393,85401,85414,85418,85422,85430,85438,85447,85455,85463,85478,85482,85486,85494,85502,85511,85519,85527,85541,85549,85553,85557,85562,85588,85593,85630,85635,85658,85663,85717,85722,85758,85762,85768,85773,85782,85796,85805,85824,85833,85843,85848,85853,85866,85871,85925,85951,85959,85967,85971],{"__ignoreMap":104},[109,84404,84405,84407,84409,84411],{"class":111,"line":112},[109,84406,52472],{"class":126},[109,84408,52476],{"class":52475},[109,84410,52479],{"class":211},[109,84412,52482],{"class":126},[109,84414,84415,84417,84419,84421,84423,84425],{"class":111,"line":119},[109,84416,1320],{"class":126},[109,84418,51810],{"class":52475},[109,84420,52491],{"class":211},[109,84422,130],{"class":126},[109,84424,52496],{"class":278},[109,84426,52482],{"class":126},[109,84428,84429],{"class":111,"line":140},[109,84430,158],{"emptyLinePlaceholder":157},[109,84432,84433,84435,84437],{"class":111,"line":154},[109,84434,1320],{"class":126},[109,84436,52509],{"class":52475},[109,84438,52482],{"class":126},[109,84440,84441,84443,84445,84447,84449,84451],{"class":111,"line":161},[109,84442,53319],{"class":126},[109,84444,52519],{"class":52475},[109,84446,52522],{"class":211},[109,84448,130],{"class":126},[109,84450,52527],{"class":278},[109,84452,52482],{"class":126},[109,84454,84455,84457,84459,84461,84463,84465,84467,84469,84471],{"class":111,"line":167},[109,84456,53319],{"class":126},[109,84458,52519],{"class":52475},[109,84460,16093],{"class":211},[109,84462,130],{"class":126},[109,84464,52566],{"class":278},[109,84466,52546],{"class":211},[109,84468,130],{"class":126},[109,84470,52573],{"class":278},[109,84472,52482],{"class":126},[109,84474,84475,84477,84479,84481,84483],{"class":111,"line":185},[109,84476,53319],{"class":126},[109,84478,52582],{"class":52475},[109,84480,52585],{"class":126},[109,84482,52582],{"class":52475},[109,84484,52482],{"class":126},[109,84486,84487,84489,84491],{"class":111,"line":201},[109,84488,53319],{"class":126},[109,84490,1467],{"class":52475},[109,84492,52482],{"class":126},[109,84494,84495,84497],{"class":111,"line":206},[109,84496,7733],{"class":52475},[109,84498,16745],{"class":126},[109,84500,84501,84503,84505,84507],{"class":111,"line":218},[109,84502,55870],{"class":133},[109,84504,52612],{"class":126},[109,84506,1314],{"class":133},[109,84508,137],{"class":126},[109,84510,84511,84513,84515,84517],{"class":111,"line":223},[109,84512,55881],{"class":133},[109,84514,52612],{"class":126},[109,84516,1314],{"class":133},[109,84518,137],{"class":126},[109,84520,84521,84523,84525,84527],{"class":111,"line":229},[109,84522,73771],{"class":133},[109,84524,52612],{"class":126},[109,84526,61680],{"class":133},[109,84528,137],{"class":126},[109,84530,84531],{"class":111,"line":244},[109,84532,1361],{"class":126},[109,84534,84535],{"class":111,"line":258},[109,84536,158],{"emptyLinePlaceholder":157},[109,84538,84539,84541],{"class":111,"line":263},[109,84540,63298],{"class":211},[109,84542,16745],{"class":126},[109,84544,84545,84547,84549,84551,84553],{"class":111,"line":269},[109,84546,55946],{"class":133},[109,84548,52612],{"class":126},[109,84550,79749],{"class":133},[109,84552,52667],{"class":122},[109,84554,137],{"class":126},[109,84556,84557,84559,84561,84563,84565,84567],{"class":111,"line":304},[109,84558,55881],{"class":133},[109,84560,52612],{"class":126},[109,84562,1351],{"class":133},[109,84564,52667],{"class":122},[109,84566,52731],{"class":133},[109,84568,137],{"class":126},[109,84570,84571],{"class":111,"line":331},[109,84572,1361],{"class":126},[109,84574,84575],{"class":111,"line":336},[109,84576,158],{"emptyLinePlaceholder":157},[109,84578,84579,84581],{"class":111,"line":364},[109,84580,79800],{"class":211},[109,84582,16745],{"class":126},[109,84584,84585,84587,84589,84591,84593],{"class":111,"line":391},[109,84586,55870],{"class":133},[109,84588,52612],{"class":126},[109,84590,2107],{"class":133},[109,84592,52667],{"class":122},[109,84594,137],{"class":126},[109,84596,84597,84599,84601,84603,84605,84607,84609],{"class":111,"line":396},[109,84598,63035],{"class":133},[109,84600,52612],{"class":126},[109,84602,29296],{"class":133},[109,84604,79855],{"class":133},[109,84606,79858],{"class":133},[109,84608,2227],{"class":122},[109,84610,137],{"class":126},[109,84612,84613,84615,84617,84619],{"class":111,"line":402},[109,84614,56184],{"class":133},[109,84616,52612],{"class":126},[109,84618,52652],{"class":133},[109,84620,137],{"class":126},[109,84622,84623,84625,84627,84629,84631,84633,84635],{"class":111,"line":419},[109,84624,63152],{"class":133},[109,84626,52612],{"class":126},[109,84628,1755],{"class":133},[109,84630,52667],{"class":122},[109,84632,52696],{"class":133},[109,84634,63419],{"class":133},[109,84636,137],{"class":126},[109,84638,84639],{"class":111,"line":435},[109,84640,1361],{"class":126},[109,84642,84643],{"class":111,"line":440},[109,84644,158],{"emptyLinePlaceholder":157},[109,84646,84647,84649],{"class":111,"line":467},[109,84648,79918],{"class":211},[109,84650,16745],{"class":126},[109,84652,84653,84655,84657,84659],{"class":111,"line":494},[109,84654,63200],{"class":133},[109,84656,52612],{"class":126},[109,84658,63205],{"class":133},[109,84660,137],{"class":126},[109,84662,84663,84665,84667,84669],{"class":111,"line":499},[109,84664,56059],{"class":133},[109,84666,52612],{"class":126},[109,84668,62993],{"class":133},[109,84670,137],{"class":126},[109,84672,84673],{"class":111,"line":526},[109,84674,1361],{"class":126},[109,84676,84677],{"class":111,"line":552},[109,84678,158],{"emptyLinePlaceholder":157},[109,84680,84681,84683,84685],{"class":111,"line":557},[109,84682,79800],{"class":211},[109,84684,56790],{"class":52475},[109,84686,16745],{"class":126},[109,84688,84689,84691,84693,84695,84697],{"class":111,"line":584},[109,84690,55946],{"class":133},[109,84692,52612],{"class":126},[109,84694,2144],{"class":133},[109,84696,52667],{"class":122},[109,84698,137],{"class":126},[109,84700,84701,84703,84705,84707,84709],{"class":111,"line":611},[109,84702,55960],{"class":133},[109,84704,52612],{"class":126},[109,84706,2144],{"class":133},[109,84708,52667],{"class":122},[109,84710,137],{"class":126},[109,84712,84713,84715,84717,84719,84721],{"class":111,"line":616},[109,84714,62925],{"class":133},[109,84716,52612],{"class":126},[109,84718,1856],{"class":133},[109,84720,52667],{"class":122},[109,84722,137],{"class":126},[109,84724,84725],{"class":111,"line":633},[109,84726,1361],{"class":126},[109,84728,84729],{"class":111,"line":649},[109,84730,158],{"emptyLinePlaceholder":157},[109,84732,84733,84735,84737],{"class":111,"line":676},[109,84734,79800],{"class":211},[109,84736,63479],{"class":211},[109,84738,16745],{"class":126},[109,84740,84741,84743,84745,84747,84749],{"class":111,"line":703},[109,84742,55946],{"class":133},[109,84744,52612],{"class":126},[109,84746,3098],{"class":133},[109,84748,52667],{"class":122},[109,84750,137],{"class":126},[109,84752,84753],{"class":111,"line":708},[109,84754,1361],{"class":126},[109,84756,84757],{"class":111,"line":723},[109,84758,158],{"emptyLinePlaceholder":157},[109,84760,84761,84763,84765,84768],{"class":111,"line":728},[109,84762,79800],{"class":211},[109,84764,63479],{"class":211},[109,84766,84767],{"class":211}," .tag",[109,84769,16745],{"class":126},[109,84771,84772,84774,84776,84778],{"class":111,"line":739},[109,84773,56184],{"class":133},[109,84775,52612],{"class":126},[109,84777,62044],{"class":133},[109,84779,137],{"class":126},[109,84781,84782,84784,84786,84788,84790],{"class":111,"line":9352},[109,84783,55870],{"class":133},[109,84785,52612],{"class":126},[109,84787,1618],{"class":133},[109,84789,52667],{"class":122},[109,84791,137],{"class":126},[109,84793,84794,84796,84798,84800,84802],{"class":111,"line":9364},[109,84795,56097],{"class":133},[109,84797,52612],{"class":126},[109,84799,2030],{"class":133},[109,84801,52667],{"class":122},[109,84803,137],{"class":126},[109,84805,84806,84808,84810,84812],{"class":111,"line":9376},[109,84807,58591],{"class":133},[109,84809,52612],{"class":126},[109,84811,63245],{"class":133},[109,84813,137],{"class":126},[109,84815,84816],{"class":111,"line":11034},[109,84817,1361],{"class":126},[109,84819,84820],{"class":111,"line":11059},[109,84821,158],{"emptyLinePlaceholder":157},[109,84823,84824,84826,84828],{"class":111,"line":11082},[109,84825,79800],{"class":211},[109,84827,80092],{"class":211},[109,84829,32641],{"class":126},[109,84831,84832,84834,84837],{"class":111,"line":11106},[109,84833,79800],{"class":211},[109,84835,84836],{"class":211}," .sub-total",[109,84838,16745],{"class":126},[109,84840,84841,84843,84845,84847,84849],{"class":111,"line":11111},[109,84842,56097],{"class":133},[109,84844,52612],{"class":126},[109,84846,2182],{"class":133},[109,84848,52667],{"class":122},[109,84850,137],{"class":126},[109,84852,84853,84855,84857,84859],{"class":111,"line":11116},[109,84854,58591],{"class":133},[109,84856,52612],{"class":126},[109,84858,80115],{"class":133},[109,84860,137],{"class":126},[109,84862,84863,84865,84867,84869],{"class":111,"line":11121},[109,84864,63012],{"class":133},[109,84866,52612],{"class":126},[109,84868,1755],{"class":133},[109,84870,137],{"class":126},[109,84872,84873],{"class":111,"line":11130},[109,84874,1361],{"class":126},[109,84876,84877],{"class":111,"line":11135},[109,84878,158],{"emptyLinePlaceholder":157},[109,84880,84881,84883,84885],{"class":111,"line":11141},[109,84882,79800],{"class":211},[109,84884,80132],{"class":211},[109,84886,32641],{"class":126},[109,84888,84889,84891,84894],{"class":111,"line":11162},[109,84890,79800],{"class":211},[109,84892,84893],{"class":211}," .sub-total::before",[109,84895,32641],{"class":126},[109,84897,84898,84901],{"class":111,"line":11168},[109,84899,84900],{"class":211},"    .amount::before",[109,84902,16745],{"class":126},[109,84904,84905,84907,84909,84911],{"class":111,"line":11182},[109,84906,80139],{"class":133},[109,84908,52612],{"class":126},[109,84910,80144],{"class":278},[109,84912,137],{"class":126},[109,84914,84915,84917,84919,84921,84923],{"class":111,"line":11188},[109,84916,56097],{"class":133},[109,84918,52612],{"class":126},[109,84920,2030],{"class":133},[109,84922,52667],{"class":122},[109,84924,137],{"class":126},[109,84926,84927],{"class":111,"line":11215},[109,84928,1361],{"class":126},[109,84930,84931],{"class":111,"line":11224},[109,84932,158],{"emptyLinePlaceholder":157},[109,84934,84935,84937,84940],{"class":111,"line":11230},[109,84936,79800],{"class":211},[109,84938,84939],{"class":211}," .spec",[109,84941,16745],{"class":126},[109,84943,84944,84946,84948,84950],{"class":111,"line":11238},[109,84945,63012],{"class":133},[109,84947,52612],{"class":126},[109,84949,1618],{"class":133},[109,84951,137],{"class":126},[109,84953,84954,84956,84958,84961],{"class":111,"line":11243},[109,84955,58591],{"class":133},[109,84957,52612],{"class":126},[109,84959,84960],{"class":133},"#888",[109,84962,137],{"class":126},[109,84964,84965,84967,84969,84971,84973],{"class":111,"line":17777},[109,84966,56097],{"class":133},[109,84968,52612],{"class":126},[109,84970,2081],{"class":133},[109,84972,52667],{"class":122},[109,84974,137],{"class":126},[109,84976,84977,84979,84981,84983,84985],{"class":111,"line":17783},[109,84978,63175],{"class":133},[109,84980,52612],{"class":126},[109,84982,2232],{"class":133},[109,84984,52667],{"class":122},[109,84986,137],{"class":126},[109,84988,84989],{"class":111,"line":17806},[109,84990,1361],{"class":126},[109,84992,84993],{"class":111,"line":17812},[109,84994,158],{"emptyLinePlaceholder":157},[109,84996,84997,84999,85002],{"class":111,"line":17835},[109,84998,79800],{"class":211},[109,85000,85001],{"class":211}," .count",[109,85003,16745],{"class":126},[109,85005,85006,85008,85010,85012],{"class":111,"line":17849},[109,85007,63012],{"class":133},[109,85009,52612],{"class":126},[109,85011,1755],{"class":133},[109,85013,137],{"class":126},[109,85015,85016,85018,85020,85023],{"class":111,"line":17869},[109,85017,58591],{"class":133},[109,85019,52612],{"class":126},[109,85021,85022],{"class":133},"#aaa",[109,85024,137],{"class":126},[109,85026,85027],{"class":111,"line":17875},[109,85028,1361],{"class":126},[109,85030,85031],{"class":111,"line":17886},[109,85032,158],{"emptyLinePlaceholder":157},[109,85034,85035,85037],{"class":111,"line":17909},[109,85036,73650],{"class":211},[109,85038,16745],{"class":126},[109,85040,85041,85043,85045,85047,85049],{"class":111,"line":17931},[109,85042,55946],{"class":133},[109,85044,52612],{"class":126},[109,85046,79749],{"class":133},[109,85048,52667],{"class":122},[109,85050,137],{"class":126},[109,85052,85053,85055,85057,85059,85061],{"class":111,"line":17936},[109,85054,55881],{"class":133},[109,85056,52612],{"class":126},[109,85058,1314],{"class":133},[109,85060,52731],{"class":133},[109,85062,137],{"class":126},[109,85064,85065,85067,85069,85071],{"class":111,"line":17942},[109,85066,56184],{"class":133},[109,85068,52612],{"class":126},[109,85070,52652],{"class":133},[109,85072,137],{"class":126},[109,85074,85075,85077,85079,85081],{"class":111,"line":17956},[109,85076,56195],{"class":133},[109,85078,52612],{"class":126},[109,85080,52755],{"class":133},[109,85082,137],{"class":126},[109,85084,85085,85088,85090,85092,85094,85096,85099],{"class":111,"line":17969},[109,85086,85087],{"class":133},"      border-top",[109,85089,52612],{"class":126},[109,85091,1755],{"class":133},[109,85093,52667],{"class":122},[109,85095,52696],{"class":133},[109,85097,85098],{"class":133}," #4e4e4e",[109,85100,137],{"class":126},[109,85102,85103,85105,85107,85109,85111],{"class":111,"line":17974},[109,85104,55870],{"class":133},[109,85106,52612],{"class":126},[109,85108,2232],{"class":133},[109,85110,52667],{"class":122},[109,85112,137],{"class":126},[109,85114,85115],{"class":111,"line":17988},[109,85116,1361],{"class":126},[109,85118,85119],{"class":111,"line":17993},[109,85120,158],{"emptyLinePlaceholder":157},[109,85122,85123,85125,85128],{"class":111,"line":17999},[109,85124,73650],{"class":211},[109,85126,85127],{"class":211}," .amount",[109,85129,16745],{"class":126},[109,85131,85132,85134,85136,85138,85140],{"class":111,"line":18004},[109,85133,56097],{"class":133},[109,85135,52612],{"class":126},[109,85137,2182],{"class":133},[109,85139,52667],{"class":122},[109,85141,137],{"class":126},[109,85143,85144,85146,85148,85150],{"class":111,"line":18018},[109,85145,58591],{"class":133},[109,85147,52612],{"class":126},[109,85149,80115],{"class":133},[109,85151,137],{"class":126},[109,85153,85154,85156,85158,85160],{"class":111,"line":18023},[109,85155,63509],{"class":133},[109,85157,52612],{"class":126},[109,85159,52664],{"class":133},[109,85161,137],{"class":126},[109,85163,85164,85166,85168,85170,85172],{"class":111,"line":18028},[109,85165,62925],{"class":133},[109,85167,52612],{"class":126},[109,85169,2188],{"class":133},[109,85171,52667],{"class":122},[109,85173,137],{"class":126},[109,85175,85176],{"class":111,"line":18042},[109,85177,1361],{"class":126},[109,85179,85180,85182,85184],{"class":111,"line":18054},[109,85181,53592],{"class":126},[109,85183,1467],{"class":52475},[109,85185,52482],{"class":126},[109,85187,85188,85190,85192],{"class":111,"line":18059},[109,85189,52960],{"class":126},[109,85191,52509],{"class":52475},[109,85193,52482],{"class":126},[109,85195,85196],{"class":111,"line":18072},[109,85197,158],{"emptyLinePlaceholder":157},[109,85199,85200,85202,85204],{"class":111,"line":18077},[109,85201,1320],{"class":126},[109,85203,52975],{"class":52475},[109,85205,52482],{"class":126},[109,85207,85208,85210,85212,85214,85216,85218],{"class":111,"line":18082},[109,85209,53319],{"class":126},[109,85211,52786],{"class":52475},[109,85213,54661],{"class":211},[109,85215,130],{"class":126},[109,85217,63783],{"class":278},[109,85219,52482],{"class":126},[109,85221,85222,85224,85226],{"class":111,"line":18087},[109,85223,53592],{"class":126},[109,85225,52786],{"class":52475},[109,85227,52482],{"class":126},[109,85229,85230,85232,85234,85236,85238,85240],{"class":111,"line":18100},[109,85231,53319],{"class":126},[109,85233,52786],{"class":52475},[109,85235,54661],{"class":211},[109,85237,130],{"class":126},[109,85239,63755],{"class":278},[109,85241,52482],{"class":126},[109,85243,85244,85246,85248,85251,85253,85255,85257,85260,85262,85264,85266,85268],{"class":111,"line":18105},[109,85245,52516],{"class":126},[109,85247,52786],{"class":52475},[109,85249,85250],{"class":126},">合计：\u003C",[109,85252,109],{"class":52475},[109,85254,54661],{"class":211},[109,85256,130],{"class":126},[109,85258,85259],{"class":278},"\"amount\"",[109,85261,56489],{"class":126},[109,85263,109],{"class":52475},[109,85265,56489],{"class":126},[109,85267,52786],{"class":52475},[109,85269,52482],{"class":126},[109,85271,85272,85274,85276],{"class":111,"line":33808},[109,85273,53592],{"class":126},[109,85275,52786],{"class":52475},[109,85277,52482],{"class":126},[109,85279,85280,85282,85284],{"class":111,"line":33814},[109,85281,53319],{"class":126},[109,85283,52988],{"class":52475},[109,85285,52482],{"class":126},[109,85287,85288,85290,85292,85294],{"class":111,"line":33820},[109,85289,619],{"class":122},[109,85291,80552],{"class":133},[109,85293,14737],{"class":122},[109,85295,56622],{"class":126},[109,85297,85298],{"class":111,"line":33826},[109,85299,80561],{"class":126},[109,85301,85302,85304,85306],{"class":111,"line":33832},[109,85303,80566],{"class":126},[109,85305,80569],{"class":278},[109,85307,32641],{"class":126},[109,85309,85310,85312,85314],{"class":111,"line":33843},[109,85311,80576],{"class":126},[109,85313,80579],{"class":278},[109,85315,32641],{"class":126},[109,85317,85318,85320,85323],{"class":111,"line":33849},[109,85319,80586],{"class":126},[109,85321,85322],{"class":133},"289.9",[109,85324,32641],{"class":126},[109,85326,85327,85329,85331],{"class":111,"line":33869},[109,85328,80596],{"class":126},[109,85330,80599],{"class":278},[109,85332,32641],{"class":126},[109,85334,85335,85338,85340],{"class":111,"line":33875},[109,85336,85337],{"class":126},"        count: ",[109,85339,1618],{"class":133},[109,85341,32641],{"class":126},[109,85343,85344,85347,85350],{"class":111,"line":33886},[109,85345,85346],{"class":126},"        spec: { color: ",[109,85348,85349],{"class":278},"'白色'",[109,85351,56779],{"class":126},[109,85353,85354],{"class":111,"line":33892},[109,85355,79067],{"class":126},[109,85357,85358],{"class":111,"line":33898},[109,85359,80561],{"class":126},[109,85361,85362,85364,85366],{"class":111,"line":33904},[109,85363,80566],{"class":126},[109,85365,80660],{"class":278},[109,85367,32641],{"class":126},[109,85369,85370,85372,85374],{"class":111,"line":33910},[109,85371,80576],{"class":126},[109,85373,80669],{"class":278},[109,85375,32641],{"class":126},[109,85377,85378,85380,85383],{"class":111,"line":33916},[109,85379,80586],{"class":126},[109,85381,85382],{"class":133},"109.8",[109,85384,32641],{"class":126},[109,85386,85387,85389,85391],{"class":111,"line":33922},[109,85388,80596],{"class":126},[109,85390,80687],{"class":278},[109,85392,32641],{"class":126},[109,85394,85395,85397,85399],{"class":111,"line":33928},[109,85396,85337],{"class":126},[109,85398,1612],{"class":133},[109,85400,32641],{"class":126},[109,85402,85403,85406,85408,85410,85412],{"class":111,"line":33948},[109,85404,85405],{"class":126},"        spec: { size: ",[109,85407,83078],{"class":278},[109,85409,56639],{"class":126},[109,85411,83083],{"class":278},[109,85413,56779],{"class":126},[109,85415,85416],{"class":111,"line":33954},[109,85417,79067],{"class":126},[109,85419,85420],{"class":111,"line":33970},[109,85421,80561],{"class":126},[109,85423,85424,85426,85428],{"class":111,"line":33976},[109,85425,80566],{"class":126},[109,85427,80704],{"class":278},[109,85429,32641],{"class":126},[109,85431,85432,85434,85436],{"class":111,"line":33990},[109,85433,80576],{"class":126},[109,85435,80713],{"class":278},[109,85437,32641],{"class":126},[109,85439,85440,85442,85445],{"class":111,"line":33996},[109,85441,80586],{"class":126},[109,85443,85444],{"class":133},"488",[109,85446,32641],{"class":126},[109,85448,85449,85451,85453],{"class":111,"line":34011},[109,85450,80596],{"class":126},[109,85452,80731],{"class":278},[109,85454,32641],{"class":126},[109,85456,85457,85459,85461],{"class":111,"line":34017},[109,85458,85337],{"class":126},[109,85460,1755],{"class":133},[109,85462,32641],{"class":126},[109,85464,85465,85467,85470,85473,85476],{"class":111,"line":34026},[109,85466,85346],{"class":126},[109,85468,85469],{"class":278},"'青色'",[109,85471,85472],{"class":126},", sum: ",[109,85474,85475],{"class":278},"'一大四小'",[109,85477,56779],{"class":126},[109,85479,85480],{"class":111,"line":34032},[109,85481,79067],{"class":126},[109,85483,85484],{"class":111,"line":34041},[109,85485,80561],{"class":126},[109,85487,85488,85490,85492],{"class":111,"line":34047},[109,85489,80566],{"class":126},[109,85491,80748],{"class":278},[109,85493,32641],{"class":126},[109,85495,85496,85498,85500],{"class":111,"line":34053},[109,85497,80576],{"class":126},[109,85499,80757],{"class":278},[109,85501,32641],{"class":126},[109,85503,85504,85506,85509],{"class":111,"line":34062},[109,85505,80586],{"class":126},[109,85507,85508],{"class":133},"139",[109,85510,32641],{"class":126},[109,85512,85513,85515,85517],{"class":111,"line":34068},[109,85514,80596],{"class":126},[109,85516,80775],{"class":278},[109,85518,32641],{"class":126},[109,85520,85521,85523,85525],{"class":111,"line":34079},[109,85522,85337],{"class":126},[109,85524,1755],{"class":133},[109,85526,32641],{"class":126},[109,85528,85529,85531,85534,85536,85539],{"class":111,"line":34085},[109,85530,85405],{"class":126},[109,85532,85533],{"class":278},"'小号'",[109,85535,56639],{"class":126},[109,85537,85538],{"class":278},"'紫色'",[109,85540,56645],{"class":126},[109,85542,85543,85546],{"class":111,"line":34104},[109,85544,85545],{"class":126},"        gift: ",[109,85547,85548],{"class":278},"'50g茶叶,清洗球'\n",[109,85550,85551],{"class":111,"line":34110},[109,85552,53573],{"class":126},[109,85554,85555],{"class":111,"line":34121},[109,85556,54284],{"class":126},[109,85558,85559],{"class":111,"line":34127},[109,85560,85561],{"class":115},"    \u002F\u002F  1.根据数据渲染页面\n",[109,85563,85564,85566,85568,85570,85572,85574,85576,85578,85580,85582,85584,85586],{"class":111,"line":34147},[109,85565,53582],{"class":126},[109,85567,55574],{"class":211},[109,85569,714],{"class":126},[109,85571,81076],{"class":278},[109,85573,75424],{"class":126},[109,85575,130],{"class":122},[109,85577,81223],{"class":126},[109,85579,75219],{"class":211},[109,85581,714],{"class":126},[109,85583,80970],{"class":6553},[109,85585,80973],{"class":122},[109,85587,16745],{"class":126},[109,85589,85590],{"class":111,"line":34163},[109,85591,85592],{"class":115},"      \u002F\u002F 对象解构\n",[109,85594,85595,85597,85599,85601,85603,85605,85607,85610,85612,85614,85616,85619,85621,85624,85626,85628],{"class":111,"line":34169},[109,85596,59403],{"class":122},[109,85598,80982],{"class":126},[109,85600,80995],{"class":133},[109,85602,13608],{"class":126},[109,85604,80985],{"class":133},[109,85606,13608],{"class":126},[109,85608,85609],{"class":133},"count",[109,85611,13608],{"class":126},[109,85613,80990],{"class":133},[109,85615,13608],{"class":126},[109,85617,85618],{"class":133},"spec",[109,85620,13608],{"class":126},[109,85622,85623],{"class":133},"gift",[109,85625,80998],{"class":126},[109,85627,130],{"class":122},[109,85629,81003],{"class":126},[109,85631,85632],{"class":111,"line":34183},[109,85633,85634],{"class":115},"      \u002F\u002F 规格文字模块处理\n",[109,85636,85637,85639,85642,85644,85646,85648,85650,85652,85654,85656],{"class":111,"line":34189},[109,85638,59403],{"class":122},[109,85640,85641],{"class":133}," text",[109,85643,14737],{"class":122},[109,85645,83113],{"class":126},[109,85647,83116],{"class":211},[109,85649,83119],{"class":126},[109,85651,75398],{"class":211},[109,85653,714],{"class":126},[109,85655,83126],{"class":278},[109,85657,1330],{"class":126},[109,85659,85660],{"class":111,"line":34195},[109,85661,85662],{"class":115},"      \u002F\u002F 处理赠品模块\n",[109,85664,85665,85667,85669,85671,85674,85676,85678,85680,85682,85685,85687,85689,85691,85693,85695,85698,85700,85703,85705,85707,85709,85711,85713,85715],{"class":111,"line":34206},[109,85666,59403],{"class":122},[109,85668,75094],{"class":133},[109,85670,14737],{"class":122},[109,85672,85673],{"class":126}," gift ",[109,85675,2516],{"class":122},[109,85677,84287],{"class":126},[109,85679,84290],{"class":211},[109,85681,714],{"class":126},[109,85683,85684],{"class":278},"','",[109,85686,32001],{"class":126},[109,85688,75219],{"class":211},[109,85690,714],{"class":126},[109,85692,80970],{"class":6553},[109,85694,80973],{"class":122},[109,85696,85697],{"class":278}," `\u003Cspan class=\"tag\">【赠品】${",[109,85699,80970],{"class":126},[109,85701,85702],{"class":278},"}\u003C\u002Fspan>`",[109,85704,32001],{"class":126},[109,85706,75398],{"class":211},[109,85708,714],{"class":126},[109,85710,75403],{"class":278},[109,85712,14887],{"class":126},[109,85714,2391],{"class":122},[109,85716,71279],{"class":278},[109,85718,85719],{"class":111,"line":34212},[109,85720,85721],{"class":115},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[109,85723,85724,85726,85729,85731,85734,85736,85738,85740,85743,85745,85747,85749,85752,85754,85756],{"class":111,"line":34218},[109,85725,59403],{"class":122},[109,85727,85728],{"class":133}," subtotal",[109,85730,14737],{"class":122},[109,85732,85733],{"class":126}," ((price ",[109,85735,1988],{"class":122},[109,85737,7085],{"class":133},[109,85739,797],{"class":122},[109,85741,85742],{"class":126}," count) ",[109,85744,2116],{"class":122},[109,85746,7085],{"class":133},[109,85748,32001],{"class":126},[109,85750,85751],{"class":211},"toFixed",[109,85753,714],{"class":126},[109,85755,1618],{"class":133},[109,85757,1330],{"class":126},[109,85759,85760],{"class":111,"line":34228},[109,85761,158],{"emptyLinePlaceholder":157},[109,85763,85764,85766],{"class":111,"line":34234},[109,85765,75157],{"class":122},[109,85767,71343],{"class":278},[109,85769,85770],{"class":111,"line":34245},[109,85771,85772],{"class":278},"        \u003Cdiv class=\"item\">\n",[109,85774,85775,85778,85780],{"class":111,"line":34251},[109,85776,85777],{"class":278},"          \u003Cimg src=\"${",[109,85779,80995],{"class":126},[109,85781,81027],{"class":278},[109,85783,85784,85787,85789,85792,85794],{"class":111,"line":34261},[109,85785,85786],{"class":278},"          \u003Cp class=\"name\">${",[109,85788,80985],{"class":126},[109,85790,85791],{"class":278},"}${",[109,85793,2695],{"class":126},[109,85795,81037],{"class":278},[109,85797,85798,85801,85803],{"class":111,"line":34266},[109,85799,85800],{"class":278},"          \u003Cp class=\"spec\">${",[109,85802,6524],{"class":126},[109,85804,81037],{"class":278},[109,85806,85807,85810,85812,85814,85816,85818,85820,85822],{"class":111,"line":34272},[109,85808,85809],{"class":278},"          \u003Cp class=\"price\">${",[109,85811,80990],{"class":126},[109,85813,2090],{"class":278},[109,85815,85751],{"class":211},[109,85817,714],{"class":278},[109,85819,1618],{"class":133},[109,85821,290],{"class":278},[109,85823,81037],{"class":278},[109,85825,85826,85829,85831],{"class":111,"line":34321},[109,85827,85828],{"class":278},"          \u003Cp class=\"count\">x${",[109,85830,85609],{"class":126},[109,85832,81037],{"class":278},[109,85834,85835,85838,85841],{"class":111,"line":34368},[109,85836,85837],{"class":278},"          \u003Cp class=\"sub-total\">${",[109,85839,85840],{"class":126},"subtotal",[109,85842,81037],{"class":278},[109,85844,85845],{"class":111,"line":34373},[109,85846,85847],{"class":278},"        \u003C\u002Fdiv> \n",[109,85849,85850],{"class":111,"line":34379},[109,85851,85852],{"class":278},"             `\n",[109,85854,85855,85858,85860,85862,85864],{"class":111,"line":34398},[109,85856,85857],{"class":126},"    }).",[109,85859,75398],{"class":211},[109,85861,714],{"class":126},[109,85863,75403],{"class":278},[109,85865,1330],{"class":126},[109,85867,85868],{"class":111,"line":34404},[109,85869,85870],{"class":115},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[109,85872,85873,85875,85877,85879,85881,85884,85886,85889,85891,85893,85895,85898,85901,85903,85906,85908,85910,85912,85915,85917,85919,85921,85923],{"class":111,"line":34424},[109,85874,619],{"class":122},[109,85876,63960],{"class":133},[109,85878,14737],{"class":122},[109,85880,81223],{"class":126},[109,85882,85883],{"class":211},"reduce",[109,85885,3734],{"class":126},[109,85887,85888],{"class":6553},"prev",[109,85890,13608],{"class":126},[109,85892,80970],{"class":6553},[109,85894,14887],{"class":126},[109,85896,85897],{"class":122},"=>",[109,85899,85900],{"class":126}," prev ",[109,85902,1348],{"class":122},[109,85904,85905],{"class":126}," (item.price ",[109,85907,1988],{"class":122},[109,85909,7085],{"class":133},[109,85911,797],{"class":122},[109,85913,85914],{"class":126}," item.count) ",[109,85916,2116],{"class":122},[109,85918,7085],{"class":133},[109,85920,13608],{"class":126},[109,85922,1314],{"class":133},[109,85924,1330],{"class":126},[109,85926,85927,85929,85931,85933,85936,85938,85940,85943,85945,85947,85949],{"class":111,"line":34430},[109,85928,53582],{"class":126},[109,85930,55574],{"class":211},[109,85932,714],{"class":126},[109,85934,85935],{"class":278},"'.amount'",[109,85937,75424],{"class":126},[109,85939,130],{"class":122},[109,85941,85942],{"class":126}," total.",[109,85944,85751],{"class":211},[109,85946,714],{"class":126},[109,85948,1618],{"class":133},[109,85950,1330],{"class":126},[109,85952,85953,85955,85957],{"class":111,"line":34436},[109,85954,53592],{"class":126},[109,85956,52988],{"class":52475},[109,85958,52482],{"class":126},[109,85960,85961,85963,85965],{"class":111,"line":34446},[109,85962,52960],{"class":126},[109,85964,52975],{"class":52475},[109,85966,52482],{"class":126},[109,85968,85969],{"class":111,"line":34451},[109,85970,158],{"emptyLinePlaceholder":157},[109,85972,85973,85975,85977],{"class":111,"line":34457},[109,85974,52960],{"class":126},[109,85976,51810],{"class":52475},[109,85978,52482],{"class":126},[14,85980,85982],{"id":85981},"_411-编程思想","4.11 编程思想",[51,85984,85986],{"id":85985},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85988,85989,85992],{},[23,85990,85991],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85994,85995],{},"调用就可以了",[19,85997,85998],{},[938,85999],{"alt":104,"src":86000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[51,86002,86004],{"id":86003},"_4112-面向对象","4.11.2 面向对象",[19,86006,86007],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86009,86010],{},[938,86011],{"alt":104,"src":86012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86014,86015],{},"面向对象的特性：",[27,86017,86018,86021,86024],{},[30,86019,86020],{},"封装性",[30,86022,86023],{},"继承性",[30,86025,86026],{},"多态性",[51,86028,86030],{"id":86029},"_4113-两者比较","4.11.3 两者比较",[19,86032,86033],{},[938,86034],{"alt":104,"src":86035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86037,86039],{"id":86038},"_412-构造函数回顾","4.12 构造函数回顾",[19,86041,86042],{},[938,86043],{"alt":104,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86046,86047],{},[938,86048],{"alt":104,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86051,86052],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86054,86055],{},[938,86056],{"alt":104,"src":86057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86059,86061],{"id":86060},"_413-原型","4.13 原型",[51,86063,86065],{"id":86064},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86067,86068],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86070,86071],{},[938,86072],{"alt":104,"src":86073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86075,86076],{},[938,86077],{"alt":104,"src":86078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86080,86081],{},"原型是构造函数的属性，它也是一个对象",[19,86083,86084],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86086,86087],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[99,86089,86091],{"className":54242,"code":86090,"language":54244,"meta":104,"style":104},"\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",[106,86092,86093,86101,86106,86114,86119,86124,86129,86134,86139,86143,86147,86151,86156,86161,86165,86170,86175,86180,86185,86190,86194,86202],{"__ignoreMap":104},[109,86094,86095,86097,86099],{"class":111,"line":112},[109,86096,1320],{"class":126},[109,86098,52975],{"class":52475},[109,86100,52482],{"class":126},[109,86102,86103],{"class":111,"line":119},[109,86104,86105],{"class":115},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[109,86107,86108,86110,86112],{"class":111,"line":140},[109,86109,53319],{"class":126},[109,86111,52988],{"class":52475},[109,86113,52482],{"class":126},[109,86115,86116],{"class":111,"line":154},[109,86117,86118],{"class":126},"    function Star(uname, age) {\n",[109,86120,86121],{"class":111,"line":161},[109,86122,86123],{"class":126},"      this.uname = uname,\n",[109,86125,86126],{"class":111,"line":167},[109,86127,86128],{"class":126},"        this.age = age\n",[109,86130,86131],{"class":111,"line":185},[109,86132,86133],{"class":126},"      \u002F\u002F this.sing = function () {\n",[109,86135,86136],{"class":111,"line":201},[109,86137,86138],{"class":126},"      \u002F\u002F   console.log('唱歌')\n",[109,86140,86141],{"class":111,"line":206},[109,86142,158],{"emptyLinePlaceholder":157},[109,86144,86145],{"class":111,"line":218},[109,86146,61212],{"class":126},[109,86148,86149],{"class":111,"line":223},[109,86150,1361],{"class":126},[109,86152,86153],{"class":111,"line":229},[109,86154,86155],{"class":126},"    Star.prototype.sing = function () {\n",[109,86157,86158],{"class":111,"line":244},[109,86159,86160],{"class":126},"      console.log('唱歌')\n",[109,86162,86163],{"class":111,"line":258},[109,86164,1361],{"class":126},[109,86166,86167],{"class":111,"line":263},[109,86168,86169],{"class":126},"    \u002F\u002F console.dir(Star.prototype)\n",[109,86171,86172],{"class":111,"line":269},[109,86173,86174],{"class":126},"    const pink = new Star('pink', 18)\n",[109,86176,86177],{"class":111,"line":304},[109,86178,86179],{"class":126},"    const red = new Star('red', 20)\n",[109,86181,86182],{"class":111,"line":331},[109,86183,86184],{"class":126},"    pink.sing()\n",[109,86186,86187],{"class":111,"line":336},[109,86188,86189],{"class":126},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[109,86191,86192],{"class":111,"line":364},[109,86193,158],{"emptyLinePlaceholder":157},[109,86195,86196,86198,86200],{"class":111,"line":391},[109,86197,53592],{"class":126},[109,86199,52988],{"class":52475},[109,86201,52482],{"class":126},[109,86203,86204,86206,86208],{"class":111,"line":396},[109,86205,52960],{"class":126},[109,86207,52975],{"class":52475},[109,86209,52482],{"class":126},[19,86211,86212],{},[938,86213],{"alt":104,"src":86214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[99,86216,86218],{"className":54242,"code":86217,"language":54244,"meta":104,"style":104},"\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",[106,86219,86220,86228,86236,86241,86246,86251,86256,86260,86265,86270,86275,86279,86284,86288,86292,86297,86301,86309],{"__ignoreMap":104},[109,86221,86222,86224,86226],{"class":111,"line":112},[109,86223,1320],{"class":126},[109,86225,52975],{"class":52475},[109,86227,52482],{"class":126},[109,86229,86230,86232,86234],{"class":111,"line":119},[109,86231,53319],{"class":126},[109,86233,52988],{"class":52475},[109,86235,52482],{"class":126},[109,86237,86238],{"class":111,"line":140},[109,86239,86240],{"class":126},"    let that\n",[109,86242,86243],{"class":111,"line":154},[109,86244,86245],{"class":126},"    function Star(uname) {\n",[109,86247,86248],{"class":111,"line":161},[109,86249,86250],{"class":126},"      this.uname = uname\n",[109,86252,86253],{"class":111,"line":167},[109,86254,86255],{"class":126},"      that = this\n",[109,86257,86258],{"class":111,"line":185},[109,86259,1361],{"class":126},[109,86261,86262],{"class":111,"line":201},[109,86263,86264],{"class":126},"    \u002F\u002F 实例对象是 ldh\n",[109,86266,86267],{"class":111,"line":206},[109,86268,86269],{"class":126},"    const ldh = new Star('刘德华')\n",[109,86271,86272],{"class":111,"line":218},[109,86273,86274],{"class":126},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[109,86276,86277],{"class":111,"line":223},[109,86278,158],{"emptyLinePlaceholder":157},[109,86280,86281],{"class":111,"line":229},[109,86282,86283],{"class":126},"    Star.sing = function () {\n",[109,86285,86286],{"class":111,"line":244},[109,86287,86160],{"class":126},[109,86289,86290],{"class":111,"line":258},[109,86291,1361],{"class":126},[109,86293,86294],{"class":111,"line":263},[109,86295,86296],{"class":126},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[109,86298,86299],{"class":111,"line":269},[109,86300,158],{"emptyLinePlaceholder":157},[109,86302,86303,86305,86307],{"class":111,"line":304},[109,86304,53592],{"class":126},[109,86306,52988],{"class":52475},[109,86308,52482],{"class":126},[109,86310,86311,86313,86315],{"class":111,"line":331},[109,86312,52960],{"class":126},[109,86314,52975],{"class":52475},[109,86316,52482],{"class":126},[19,86318,86319],{},"构造函数的this指向的是实例对象；",[19,86321,86322],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[51,86324,86326],{"id":86325},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86328,86329],{},[938,86330],{"alt":104,"src":86331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[99,86333,86335],{"className":54242,"code":86334,"language":54244,"meta":104,"style":104},"\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",[106,86336,86337,86345,86353,86358,86363,86368,86373,86378,86383,86388,86393,86398,86403,86407,86412,86417,86422,86427,86431,86436,86441,86446,86451,86455,86460,86465,86470,86475,86479,86484,86488,86496],{"__ignoreMap":104},[109,86338,86339,86341,86343],{"class":111,"line":112},[109,86340,1320],{"class":126},[109,86342,52975],{"class":52475},[109,86344,52482],{"class":126},[109,86346,86347,86349,86351],{"class":111,"line":119},[109,86348,53319],{"class":126},[109,86350,52988],{"class":52475},[109,86352,52482],{"class":126},[109,86354,86355],{"class":111,"line":140},[109,86356,86357],{"class":126},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[109,86359,86360],{"class":111,"line":154},[109,86361,86362],{"class":126},"    const arr = [1, 2, 3]\n",[109,86364,86365],{"class":111,"line":161},[109,86366,86367],{"class":126},"    \u002F\u002F 自己定义数组的扩展方法\n",[109,86369,86370],{"class":111,"line":167},[109,86371,86372],{"class":126},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[109,86374,86375],{"class":111,"line":185},[109,86376,86377],{"class":126},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[109,86379,86380],{"class":111,"line":201},[109,86381,86382],{"class":126},"    \u002F\u002F ①.最大值\n",[109,86384,86385],{"class":111,"line":206},[109,86386,86387],{"class":126},"    Array.prototype.max = function () {\n",[109,86389,86390],{"class":111,"line":218},[109,86391,86392],{"class":126},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[109,86394,86395],{"class":111,"line":223},[109,86396,86397],{"class":126},"      return Math.max(...this)\n",[109,86399,86400],{"class":111,"line":229},[109,86401,86402],{"class":126},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[109,86404,86405],{"class":111,"line":244},[109,86406,1361],{"class":126},[109,86408,86409],{"class":111,"line":258},[109,86410,86411],{"class":126},"    console.log(arr.max())\n",[109,86413,86414],{"class":111,"line":263},[109,86415,86416],{"class":126},"    \u002F\u002F ②最小值\n",[109,86418,86419],{"class":111,"line":269},[109,86420,86421],{"class":126},"    Array.prototype.min = function () {\n",[109,86423,86424],{"class":111,"line":304},[109,86425,86426],{"class":126},"      return Math.min(...this)\n",[109,86428,86429],{"class":111,"line":331},[109,86430,1361],{"class":126},[109,86432,86433],{"class":111,"line":336},[109,86434,86435],{"class":126},"    console.log(arr.min())\n",[109,86437,86438],{"class":111,"line":364},[109,86439,86440],{"class":126},"    \u002F\u002F③求和\n",[109,86442,86443],{"class":111,"line":391},[109,86444,86445],{"class":126},"    Array.prototype.sum = function () {\n",[109,86447,86448],{"class":111,"line":396},[109,86449,86450],{"class":126},"      return this.reduce((prev, current) => prev + current, 0)\n",[109,86452,86453],{"class":111,"line":402},[109,86454,1361],{"class":126},[109,86456,86457],{"class":111,"line":419},[109,86458,86459],{"class":126},"    console.log(arr.sum())\n",[109,86461,86462],{"class":111,"line":435},[109,86463,86464],{"class":126},"    \u002F\u002F ③排序\n",[109,86466,86467],{"class":111,"line":440},[109,86468,86469],{"class":126},"    Array.prototype.rever = function () {\n",[109,86471,86472],{"class":111,"line":467},[109,86473,86474],{"class":126},"      return this.reverse()\n",[109,86476,86477],{"class":111,"line":494},[109,86478,1361],{"class":126},[109,86480,86481],{"class":111,"line":499},[109,86482,86483],{"class":126},"    console.log(arr.rever())\n",[109,86485,86486],{"class":111,"line":526},[109,86487,158],{"emptyLinePlaceholder":157},[109,86489,86490,86492,86494],{"class":111,"line":552},[109,86491,53592],{"class":126},[109,86493,52988],{"class":52475},[109,86495,52482],{"class":126},[109,86497,86498,86500,86502],{"class":111,"line":557},[109,86499,52960],{"class":126},[109,86501,52975],{"class":52475},[109,86503,52482],{"class":126},[19,86505,86506],{},[938,86507],{"alt":104,"src":86508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[51,86510,86512],{"id":86511},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86514,86515],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86517,86518],{},[938,86519],{"alt":104,"src":86520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[99,86522,86524],{"className":54242,"code":86523,"language":54244,"meta":104,"style":104},"\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",[106,86525,86526,86534,86542,86547,86552,86556,86561,86566,86571,86579],{"__ignoreMap":104},[109,86527,86528,86530,86532],{"class":111,"line":112},[109,86529,1320],{"class":126},[109,86531,52975],{"class":52475},[109,86533,52482],{"class":126},[109,86535,86536,86538,86540],{"class":111,"line":119},[109,86537,53319],{"class":126},[109,86539,52988],{"class":52475},[109,86541,52482],{"class":126},[109,86543,86544],{"class":111,"line":140},[109,86545,86546],{"class":126},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[109,86548,86549],{"class":111,"line":154},[109,86550,86551],{"class":126},"    function Star() {\n",[109,86553,86554],{"class":111,"line":161},[109,86555,1361],{"class":126},[109,86557,86558],{"class":111,"line":167},[109,86559,86560],{"class":126},"    const ldh = new Star()\n",[109,86562,86563],{"class":111,"line":185},[109,86564,86565],{"class":126},"    console.log(Star.prototype)\n",[109,86567,86568],{"class":111,"line":201},[109,86569,86570],{"class":126},"    console.log(Star.prototype.constructor === Star)\n",[109,86572,86573,86575,86577],{"class":111,"line":206},[109,86574,53592],{"class":126},[109,86576,52988],{"class":52475},[109,86578,52482],{"class":126},[109,86580,86581,86583,86585],{"class":111,"line":218},[109,86582,52960],{"class":126},[109,86584,52975],{"class":52475},[109,86586,52482],{"class":126},[19,86588,86589],{},[938,86590],{"alt":104,"src":86591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86593,86594],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[99,86596,86598],{"className":54242,"code":86597,"language":54244,"meta":104,"style":104},"  \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",[106,86599,86600,86608,86612,86616,86620,86625,86630,86635,86639,86644,86649,86654,86659,86664,86669,86673,86677,86682,86687,86692,86696,86701,86706,86710,86714,86718],{"__ignoreMap":104},[109,86601,86602,86604,86606],{"class":111,"line":112},[109,86603,53319],{"class":126},[109,86605,52988],{"class":52475},[109,86607,52482],{"class":126},[109,86609,86610],{"class":111,"line":119},[109,86611,86546],{"class":126},[109,86613,86614],{"class":111,"line":140},[109,86615,86551],{"class":126},[109,86617,86618],{"class":111,"line":154},[109,86619,1361],{"class":126},[109,86621,86622],{"class":111,"line":161},[109,86623,86624],{"class":126},"    \u002F\u002F const ldh = new Star()\n",[109,86626,86627],{"class":111,"line":167},[109,86628,86629],{"class":126},"    \u002F\u002F console.log(Star.prototype)\n",[109,86631,86632],{"class":111,"line":185},[109,86633,86634],{"class":126},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[109,86636,86637],{"class":111,"line":201},[109,86638,158],{"emptyLinePlaceholder":157},[109,86640,86641],{"class":111,"line":206},[109,86642,86643],{"class":126},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[109,86645,86646],{"class":111,"line":218},[109,86647,86648],{"class":126},"    \u002F\u002F Star.prototype.sing = function () {\n",[109,86650,86651],{"class":111,"line":223},[109,86652,86653],{"class":126},"    \u002F\u002F   console.log('唱歌')\n",[109,86655,86656],{"class":111,"line":229},[109,86657,86658],{"class":126},"    \u002F\u002F }\n",[109,86660,86661],{"class":111,"line":244},[109,86662,86663],{"class":126},"    \u002F\u002F Star.prototype.dance = function () {\n",[109,86665,86666],{"class":111,"line":258},[109,86667,86668],{"class":126},"    \u002F\u002F   console.log('跳舞')\n",[109,86670,86671],{"class":111,"line":263},[109,86672,86658],{"class":126},[109,86674,86675],{"class":111,"line":269},[109,86676,86565],{"class":126},[109,86678,86679],{"class":111,"line":304},[109,86680,86681],{"class":126},"    Star.prototype = {\n",[109,86683,86684],{"class":111,"line":331},[109,86685,86686],{"class":126},"      sing: function () {\n",[109,86688,86689],{"class":111,"line":336},[109,86690,86691],{"class":126},"        console.log('唱歌')\n",[109,86693,86694],{"class":111,"line":364},[109,86695,79067],{"class":126},[109,86697,86698],{"class":111,"line":391},[109,86699,86700],{"class":126},"      dance: function () {\n",[109,86702,86703],{"class":111,"line":396},[109,86704,86705],{"class":126},"        console.log('跳舞')\n",[109,86707,86708],{"class":111,"line":402},[109,86709,53573],{"class":126},[109,86711,86712],{"class":111,"line":419},[109,86713,1361],{"class":126},[109,86715,86716],{"class":111,"line":435},[109,86717,86565],{"class":126},[109,86719,86720,86722,86724],{"class":111,"line":440},[109,86721,53592],{"class":126},[109,86723,52988],{"class":52475},[109,86725,52482],{"class":126},[19,86727,86728],{},"进行输出结果后会发现：",[19,86730,86731],{},[938,86732],{"alt":104,"src":86733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86735,86736],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86738,86739],{},"所以，要重新指回创造这个原型对象的构造函数",[99,86741,86743],{"className":72388,"code":86742,"language":72390,"meta":104,"style":104},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[106,86744,86745,86759,86764,86769,86780,86793,86798,86809,86823,86827],{"__ignoreMap":104},[109,86746,86747,86750,86752,86755,86757],{"class":111,"line":112},[109,86748,86749],{"class":133},"Star",[109,86751,2090],{"class":126},[109,86753,86754],{"class":133},"prototype",[109,86756,14737],{"class":122},[109,86758,16745],{"class":126},[109,86760,86761],{"class":111,"line":119},[109,86762,86763],{"class":115},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[109,86765,86766],{"class":111,"line":140},[109,86767,86768],{"class":126},"  constructor: Star,\n",[109,86770,86771,86774,86776,86778],{"class":111,"line":154},[109,86772,86773],{"class":211},"  sing",[109,86775,52612],{"class":126},[109,86777,55624],{"class":122},[109,86779,55627],{"class":126},[109,86781,86782,86784,86786,86788,86791],{"class":111,"line":161},[109,86783,74928],{"class":126},[109,86785,59422],{"class":211},[109,86787,714],{"class":126},[109,86789,86790],{"class":278},"'唱歌'",[109,86792,1330],{"class":126},[109,86794,86795],{"class":111,"line":167},[109,86796,86797],{"class":126},"   },\n",[109,86799,86800,86803,86805,86807],{"class":111,"line":185},[109,86801,86802],{"class":211},"   dance",[109,86804,52612],{"class":126},[109,86806,55624],{"class":122},[109,86808,55627],{"class":126},[109,86810,86811,86814,86816,86818,86821],{"class":111,"line":201},[109,86812,86813],{"class":126},"     console.",[109,86815,59422],{"class":211},[109,86817,714],{"class":126},[109,86819,86820],{"class":278},"'跳舞'",[109,86822,1330],{"class":126},[109,86824,86825],{"class":111,"line":206},[109,86826,5648],{"class":126},[109,86828,86829],{"class":111,"line":218},[109,86830,742],{"class":126},[19,86832,86833],{},[938,86834],{"alt":104,"src":86835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86837,86838],{},"总结1：",[19,86840,86841],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86843,86844],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86846,86847],{},"constructor指的是他的来源",[19,86849,86850],{},[938,86851],{"alt":104,"src":86852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86854,86855],{},[938,86856],{"alt":104,"src":86857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86859,86860],{},"总结2：",[19,86862,86863],{},[938,86864],{"alt":104,"src":86865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86867,86868],{},[938,86869],{"alt":104,"src":86870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86872,86873],{},[938,86874],{"alt":104,"src":86875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[51,86877,86879],{"id":86878},"_4134-对象原型","4.13.4 对象原型",[19,86881,86882],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86884,86885],{},"对象原型就是__proto__这个属性",[19,86887,86888],{},[938,86889],{"alt":104,"src":86890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86892,86893],{},[938,86894],{"alt":104,"src":86895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86897,86898],{},[938,86899],{"alt":104,"src":86900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86902,86903],{},[938,86904],{"alt":104,"src":86905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[99,86907,86909],{"className":54242,"code":86908,"language":54244,"meta":104,"style":104},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[106,86910,86911,86919,86927,86931,86935,86939,86944,86952],{"__ignoreMap":104},[109,86912,86913,86915,86917],{"class":111,"line":112},[109,86914,1320],{"class":126},[109,86916,52975],{"class":52475},[109,86918,52482],{"class":126},[109,86920,86921,86923,86925],{"class":111,"line":119},[109,86922,53319],{"class":126},[109,86924,52988],{"class":52475},[109,86926,52482],{"class":126},[109,86928,86929],{"class":111,"line":140},[109,86930,86551],{"class":126},[109,86932,86933],{"class":111,"line":154},[109,86934,1361],{"class":126},[109,86936,86937],{"class":111,"line":161},[109,86938,86560],{"class":126},[109,86940,86941],{"class":111,"line":167},[109,86942,86943],{"class":126},"    console.log(ldh)\n",[109,86945,86946,86948,86950],{"class":111,"line":185},[109,86947,53592],{"class":126},[109,86949,52988],{"class":52475},[109,86951,52482],{"class":126},[109,86953,86954,86956,86958],{"class":111,"line":201},[109,86955,52960],{"class":126},[109,86957,52975],{"class":52475},[109,86959,52482],{"class":126},[19,86961,86962],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86964,86965],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86967,86968],{},[938,86969],{"alt":104,"src":86970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86972,86973],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86975,86976],{},"对象原型指向原型对象",[19,86978,86979],{},[938,86980],{"alt":104,"src":86981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86983,86984],{},[938,86985],{"alt":104,"src":86986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86988,86989],{},[938,86990],{"alt":104,"src":86991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[51,86993,86995],{"id":86994},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86997,86998],{},[938,86999],{"alt":104,"src":87000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[765,87002,87003,87006,87009,87012],{},[30,87004,87005],{},"构造函数通过new的形式实例化得到实例对象",[30,87007,87008],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[30,87010,87011],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[30,87013,87014],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87016,87017],{},[938,87018],{"alt":104,"src":87019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87021,87022],{},"题目梳理：",[19,87024,87025],{},[938,87026],{"alt":104,"src":87027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[51,87029,87031],{"id":87030},"_4136-原型继承","4.13.6 原型继承",[19,87033,87034],{},[938,87035],{"alt":104,"src":87036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87038,87039],{},[938,87040],{"alt":104,"src":87041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87043,87044],{},[938,87045],{"alt":104,"src":87046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87048,87049],{},[938,87050],{"alt":104,"src":87051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87053,87054],{},[938,87055],{"alt":104,"src":87056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87058,87059],{},[938,87060],{"alt":104,"src":87061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87063,87064],{},[938,87065],{"alt":104,"src":87066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87068,87069],{},[938,87070],{"alt":104,"src":87071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87073,87074],{},"回顾：构造函数每次new得到对象都是不同的",[51,87076,87078],{"id":87077},"_4137-原型链","4.13.7 原型链",[19,87080,87081],{},[938,87082],{"alt":104,"src":87083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87085,87086],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87088,87089],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87091,87092],{},"大哥是Object",[19,87094,87095],{},[938,87096],{"alt":104,"src":87097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87099,87100],{},[938,87101],{"alt":104,"src":87102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87104,87105],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87107,87108],{},"万物皆对象",[51,87110,87112],{"id":87111},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87114,87115],{},"模态框",[19,87117,87118],{},"以后遇见这个效果直接使用这个就行",[19,87120,87121],{},[938,87122],{"alt":104,"src":87123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87125,87126],{},[938,87127],{"alt":104,"src":87128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87130,87131],{},[938,87132],{"alt":104,"src":87133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87135,87136],{},[938,87137],{"alt":104,"src":87138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87140,87141],{},"补充知识点：",[765,87143,87144],{},[30,87145,87146],{},"append()",[19,87148,87149],{},[938,87150],{"alt":104,"src":87151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[99,87153,87155],{"className":51808,"code":87154,"language":51810,"meta":104,"style":104},"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",[106,87156,87157,87162,87167,87172,87176,87180,87184,87189,87194,87199,87203],{"__ignoreMap":104},[109,87158,87159],{"class":111,"line":112},[109,87160,87161],{"class":126},"append(param1)\n",[109,87163,87164],{"class":111,"line":119},[109,87165,87166],{"class":126},"append(param1, param2)\n",[109,87168,87169],{"class":111,"line":140},[109,87170,87171],{"class":126},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[109,87173,87174],{"class":111,"line":154},[109,87175,158],{"emptyLinePlaceholder":157},[109,87177,87178],{"class":111,"line":161},[109,87179,158],{"emptyLinePlaceholder":157},[109,87181,87182],{"class":111,"line":167},[109,87183,158],{"emptyLinePlaceholder":157},[109,87185,87186],{"class":111,"line":185},[109,87187,87188],{"class":126},"let div = document.createElement(\"div\");\n",[109,87190,87191],{"class":111,"line":201},[109,87192,87193],{"class":126},"let p = document.createElement(\"p\");\n",[109,87195,87196],{"class":111,"line":206},[109,87197,87198],{"class":126},"div.append(p);\n",[109,87200,87201],{"class":111,"line":218},[109,87202,158],{"emptyLinePlaceholder":157},[109,87204,87205,87208,87210],{"class":111,"line":223},[109,87206,87207],{"class":126},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[109,87209,19],{"class":52475},[109,87211,87212],{"class":126},"> ]\n",[765,87214,87215],{"start":119},[30,87216,87217],{},"remove()",[19,87219,87220],{},"自己删自己",[19,87222,87223],{},[938,87224],{"alt":104,"src":87225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[99,87227,87229],{"className":51808,"code":87228,"language":51810,"meta":104,"style":104},"\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",[106,87230,87231,87241,87255,87259,87267,87281,87301,87313,87321,87328,87340,87353,87388,87400,87411,87423,87435,87447,87474,87484,87488,87492,87501,87513,87527,87537,87549,87553,87557,87567,87578,87588,87598,87611,87624,87634,87638,87642,87651,87661,87673,87677,87681,87690,87700,87710,87722,87726,87730,87740,87756,87767,87777,87787,87799,87811,87823,87827,87831,87844,87855,87859,87867,87875,87879,87887,87907,87927,87935,87940,87966,87971,87976,87995,88000,88012,88017,88028,88038,88048,88053,88058,88062,88067,88072,88077,88097,88102,88122,88127,88141,88146,88151,88156,88172,88176,88181,88210,88215,88220,88225,88236,88240,88244,88248,88253,88278,88283,88308,88313,88322,88326,88331,88356,88360,88385,88389,88398,88402,88407,88425,88435,88439,88447,88455,88459],{"__ignoreMap":104},[109,87232,87233,87235,87237,87239],{"class":111,"line":112},[109,87234,52472],{"class":126},[109,87236,52476],{"class":52475},[109,87238,52479],{"class":211},[109,87240,52482],{"class":126},[109,87242,87243,87245,87247,87249,87251,87253],{"class":111,"line":119},[109,87244,1320],{"class":126},[109,87246,51810],{"class":52475},[109,87248,52491],{"class":211},[109,87250,130],{"class":126},[109,87252,52496],{"class":278},[109,87254,52482],{"class":126},[109,87256,87257],{"class":111,"line":140},[109,87258,158],{"emptyLinePlaceholder":157},[109,87260,87261,87263,87265],{"class":111,"line":154},[109,87262,1320],{"class":126},[109,87264,52509],{"class":52475},[109,87266,52482],{"class":126},[109,87268,87269,87271,87273,87275,87277,87279],{"class":111,"line":161},[109,87270,53319],{"class":126},[109,87272,52519],{"class":52475},[109,87274,52522],{"class":211},[109,87276,130],{"class":126},[109,87278,52527],{"class":278},[109,87280,52482],{"class":126},[109,87282,87283,87285,87287,87289,87291,87293,87295,87297,87299],{"class":111,"line":167},[109,87284,53319],{"class":126},[109,87286,52519],{"class":52475},[109,87288,16093],{"class":211},[109,87290,130],{"class":126},[109,87292,52566],{"class":278},[109,87294,52546],{"class":211},[109,87296,130],{"class":126},[109,87298,52573],{"class":278},[109,87300,52482],{"class":126},[109,87302,87303,87305,87307,87309,87311],{"class":111,"line":185},[109,87304,53319],{"class":126},[109,87306,52582],{"class":52475},[109,87308,52585],{"class":126},[109,87310,52582],{"class":52475},[109,87312,52482],{"class":126},[109,87314,87315,87317,87319],{"class":111,"line":201},[109,87316,53319],{"class":126},[109,87318,1467],{"class":52475},[109,87320,52482],{"class":126},[109,87322,87323,87326],{"class":111,"line":206},[109,87324,87325],{"class":211},"    .modal",[109,87327,16745],{"class":126},[109,87329,87330,87332,87334,87336,87338],{"class":111,"line":218},[109,87331,55946],{"class":133},[109,87333,52612],{"class":126},[109,87335,5315],{"class":133},[109,87337,52667],{"class":122},[109,87339,137],{"class":126},[109,87341,87342,87345,87347,87349,87351],{"class":111,"line":223},[109,87343,87344],{"class":133},"      min-height",[109,87346,52612],{"class":126},[109,87348,1351],{"class":133},[109,87350,52667],{"class":122},[109,87352,137],{"class":126},[109,87354,87355,87357,87359,87361,87363,87365,87367,87369,87371,87373,87375,87377,87379,87381,87383,87386],{"class":111,"line":229},[109,87356,79925],{"class":133},[109,87358,52612],{"class":126},[109,87360,1314],{"class":133},[109,87362,734],{"class":133},[109,87364,134],{"class":133},[109,87366,52667],{"class":122},[109,87368,79942],{"class":133},[109,87370,714],{"class":126},[109,87372,1314],{"class":133},[109,87374,13608],{"class":126},[109,87376,1314],{"class":133},[109,87378,13608],{"class":126},[109,87380,1314],{"class":133},[109,87382,13608],{"class":126},[109,87384,87385],{"class":133},"0.1",[109,87387,720],{"class":126},[109,87389,87390,87392,87394,87396,87398],{"class":111,"line":244},[109,87391,56309],{"class":133},[109,87393,52612],{"class":126},[109,87395,1831],{"class":133},[109,87397,52667],{"class":122},[109,87399,137],{"class":126},[109,87401,87402,87404,87406,87409],{"class":111,"line":258},[109,87403,55934],{"class":133},[109,87405,52612],{"class":126},[109,87407,87408],{"class":133},"fixed",[109,87410,137],{"class":126},[109,87412,87413,87416,87418,87421],{"class":111,"line":263},[109,87414,87415],{"class":133},"      z-index",[109,87417,52612],{"class":126},[109,87419,87420],{"class":133},"999",[109,87422,137],{"class":126},[109,87424,87425,87427,87429,87431,87433],{"class":111,"line":269},[109,87426,56013],{"class":133},[109,87428,52612],{"class":126},[109,87430,2188],{"class":133},[109,87432,1865],{"class":122},[109,87434,137],{"class":126},[109,87436,87437,87439,87441,87443,87445],{"class":111,"line":304},[109,87438,56122],{"class":133},[109,87440,52612],{"class":126},[109,87442,2188],{"class":133},[109,87444,1865],{"class":122},[109,87446,137],{"class":126},[109,87448,87449,87451,87453,87455,87457,87460,87462,87464,87466,87468,87470,87472],{"class":111,"line":331},[109,87450,79966],{"class":133},[109,87452,52612],{"class":126},[109,87454,79971],{"class":133},[109,87456,714],{"class":126},[109,87458,87459],{"class":133},"-50",[109,87461,1865],{"class":122},[109,87463,13608],{"class":126},[109,87465,87459],{"class":133},[109,87467,1865],{"class":122},[109,87469,13608],{"class":126},[109,87471,1314],{"class":133},[109,87473,720],{"class":126},[109,87475,87476,87478,87480,87482],{"class":111,"line":336},[109,87477,56059],{"class":133},[109,87479,52612],{"class":126},[109,87481,62017],{"class":133},[109,87483,137],{"class":126},[109,87485,87486],{"class":111,"line":364},[109,87487,1361],{"class":126},[109,87489,87490],{"class":111,"line":391},[109,87491,158],{"emptyLinePlaceholder":157},[109,87493,87494,87496,87499],{"class":111,"line":396},[109,87495,87325],{"class":211},[109,87497,87498],{"class":211}," .header",[109,87500,16745],{"class":126},[109,87502,87503,87505,87507,87509,87511],{"class":111,"line":402},[109,87504,58534],{"class":133},[109,87506,52612],{"class":126},[109,87508,1937],{"class":133},[109,87510,52667],{"class":122},[109,87512,137],{"class":126},[109,87514,87515,87517,87519,87521,87523,87525],{"class":111,"line":419},[109,87516,55870],{"class":133},[109,87518,52612],{"class":126},[109,87520,1314],{"class":133},[109,87522,134],{"class":133},[109,87524,52667],{"class":122},[109,87526,137],{"class":126},[109,87528,87529,87531,87533,87535],{"class":111,"line":435},[109,87530,55934],{"class":133},[109,87532,52612],{"class":126},[109,87534,55939],{"class":133},[109,87536,137],{"class":126},[109,87538,87539,87541,87543,87545,87547],{"class":111,"line":440},[109,87540,56097],{"class":133},[109,87542,52612],{"class":126},[109,87544,2232],{"class":133},[109,87546,52667],{"class":122},[109,87548,137],{"class":126},[109,87550,87551],{"class":111,"line":467},[109,87552,1361],{"class":126},[109,87554,87555],{"class":111,"line":494},[109,87556,158],{"emptyLinePlaceholder":157},[109,87558,87559,87561,87563,87565],{"class":111,"line":499},[109,87560,87325],{"class":211},[109,87562,87498],{"class":211},[109,87564,1309],{"class":52475},[109,87566,16745],{"class":126},[109,87568,87569,87572,87574,87576],{"class":111,"line":526},[109,87570,87571],{"class":133},"      font-style",[109,87573,52612],{"class":126},[109,87575,65016],{"class":133},[109,87577,137],{"class":126},[109,87579,87580,87582,87584,87586],{"class":111,"line":552},[109,87581,58591],{"class":133},[109,87583,52612],{"class":126},[109,87585,63245],{"class":133},[109,87587,137],{"class":126},[109,87589,87590,87592,87594,87596],{"class":111,"line":557},[109,87591,55934],{"class":133},[109,87593,52612],{"class":126},[109,87595,56006],{"class":133},[109,87597,137],{"class":126},[109,87599,87600,87603,87605,87607,87609],{"class":111,"line":584},[109,87601,87602],{"class":133},"      right",[109,87604,52612],{"class":126},[109,87606,2107],{"class":133},[109,87608,52667],{"class":122},[109,87610,137],{"class":126},[109,87612,87613,87615,87617,87620,87622],{"class":111,"line":611},[109,87614,56122],{"class":133},[109,87616,52612],{"class":126},[109,87618,87619],{"class":133},"-2",[109,87621,52667],{"class":122},[109,87623,137],{"class":126},[109,87625,87626,87628,87630,87632],{"class":111,"line":616},[109,87627,63200],{"class":133},[109,87629,52612],{"class":126},[109,87631,63205],{"class":133},[109,87633,137],{"class":126},[109,87635,87636],{"class":111,"line":633},[109,87637,1361],{"class":126},[109,87639,87640],{"class":111,"line":649},[109,87641,158],{"emptyLinePlaceholder":157},[109,87643,87644,87646,87649],{"class":111,"line":676},[109,87645,87325],{"class":211},[109,87647,87648],{"class":211}," .body",[109,87650,16745],{"class":126},[109,87652,87653,87655,87657,87659],{"class":111,"line":703},[109,87654,58461],{"class":133},[109,87656,52612],{"class":126},[109,87658,52767],{"class":133},[109,87660,137],{"class":126},[109,87662,87663,87665,87667,87669,87671],{"class":111,"line":708},[109,87664,55870],{"class":133},[109,87666,52612],{"class":126},[109,87668,1008],{"class":133},[109,87670,52667],{"class":122},[109,87672,137],{"class":126},[109,87674,87675],{"class":111,"line":723},[109,87676,1361],{"class":126},[109,87678,87679],{"class":111,"line":728},[109,87680,158],{"emptyLinePlaceholder":157},[109,87682,87683,87685,87688],{"class":111,"line":739},[109,87684,87325],{"class":211},[109,87686,87687],{"class":211}," .footer",[109,87689,16745],{"class":126},[109,87691,87692,87694,87696,87698],{"class":111,"line":9352},[109,87693,56184],{"class":133},[109,87695,52612],{"class":126},[109,87697,52652],{"class":133},[109,87699,137],{"class":126},[109,87701,87702,87704,87706,87708],{"class":111,"line":9364},[109,87703,56195],{"class":133},[109,87705,52612],{"class":126},[109,87707,52755],{"class":133},[109,87709,137],{"class":126},[109,87711,87712,87714,87716,87718,87720],{"class":111,"line":9376},[109,87713,55870],{"class":133},[109,87715,52612],{"class":126},[109,87717,1008],{"class":133},[109,87719,52667],{"class":122},[109,87721,137],{"class":126},[109,87723,87724],{"class":111,"line":11034},[109,87725,1361],{"class":126},[109,87727,87728],{"class":111,"line":11059},[109,87729,158],{"emptyLinePlaceholder":157},[109,87731,87732,87734,87736,87738],{"class":111,"line":11082},[109,87733,87325],{"class":211},[109,87735,87687],{"class":211},[109,87737,2791],{"class":52475},[109,87739,16745],{"class":126},[109,87741,87742,87744,87746,87748,87750,87752,87754],{"class":111,"line":11106},[109,87743,55870],{"class":133},[109,87745,52612],{"class":126},[109,87747,1612],{"class":133},[109,87749,52667],{"class":122},[109,87751,3445],{"class":133},[109,87753,52667],{"class":122},[109,87755,137],{"class":126},[109,87757,87758,87760,87762,87765],{"class":111,"line":11111},[109,87759,62896],{"class":133},[109,87761,52612],{"class":126},[109,87763,87764],{"class":133},"#ccc",[109,87766,137],{"class":126},[109,87768,87769,87771,87773,87775],{"class":111,"line":11116},[109,87770,65145],{"class":133},[109,87772,52612],{"class":126},[109,87774,55912],{"class":133},[109,87776,137],{"class":126},[109,87778,87779,87781,87783,87785],{"class":111,"line":11121},[109,87780,58591],{"class":133},[109,87782,52612],{"class":126},[109,87784,62017],{"class":133},[109,87786,137],{"class":126},[109,87788,87789,87791,87793,87795,87797],{"class":111,"line":11130},[109,87790,56309],{"class":133},[109,87792,52612],{"class":126},[109,87794,1618],{"class":133},[109,87796,52667],{"class":122},[109,87798,137],{"class":126},[109,87800,87801,87803,87805,87807,87809],{"class":111,"line":11135},[109,87802,62925],{"class":133},[109,87804,52612],{"class":126},[109,87806,1008],{"class":133},[109,87808,52667],{"class":122},[109,87810,137],{"class":126},[109,87812,87813,87815,87817,87819,87821],{"class":111,"line":11141},[109,87814,56097],{"class":133},[109,87816,52612],{"class":126},[109,87818,2081],{"class":133},[109,87820,52667],{"class":122},[109,87822,137],{"class":126},[109,87824,87825],{"class":111,"line":11162},[109,87826,1361],{"class":126},[109,87828,87829],{"class":111,"line":11168},[109,87830,158],{"emptyLinePlaceholder":157},[109,87832,87833,87835,87837,87839,87842],{"class":111,"line":11182},[109,87834,87325],{"class":211},[109,87836,87687],{"class":211},[109,87838,2791],{"class":52475},[109,87840,87841],{"class":211},".submit",[109,87843,16745],{"class":126},[109,87845,87846,87848,87850,87853],{"class":111,"line":11188},[109,87847,56059],{"class":133},[109,87849,52612],{"class":126},[109,87851,87852],{"class":133},"#369",[109,87854,137],{"class":126},[109,87856,87857],{"class":111,"line":11215},[109,87858,1361],{"class":126},[109,87860,87861,87863,87865],{"class":111,"line":11224},[109,87862,53592],{"class":126},[109,87864,1467],{"class":52475},[109,87866,52482],{"class":126},[109,87868,87869,87871,87873],{"class":111,"line":11230},[109,87870,52960],{"class":126},[109,87872,52509],{"class":52475},[109,87874,52482],{"class":126},[109,87876,87877],{"class":111,"line":11238},[109,87878,158],{"emptyLinePlaceholder":157},[109,87880,87881,87883,87885],{"class":111,"line":11243},[109,87882,1320],{"class":126},[109,87884,52975],{"class":52475},[109,87886,52482],{"class":126},[109,87888,87889,87891,87893,87895,87897,87900,87903,87905],{"class":111,"line":17777},[109,87890,53319],{"class":126},[109,87892,55062],{"class":52475},[109,87894,16132],{"class":211},[109,87896,130],{"class":126},[109,87898,87899],{"class":278},"\"delete\"",[109,87901,87902],{"class":126},">删除\u003C\u002F",[109,87904,55062],{"class":52475},[109,87906,52482],{"class":126},[109,87908,87909,87911,87913,87915,87917,87920,87923,87925],{"class":111,"line":17783},[109,87910,53319],{"class":126},[109,87912,55062],{"class":52475},[109,87914,16132],{"class":211},[109,87916,130],{"class":126},[109,87918,87919],{"class":278},"\"login\"",[109,87921,87922],{"class":126},">登录\u003C\u002F",[109,87924,55062],{"class":52475},[109,87926,52482],{"class":126},[109,87928,87929,87931,87933],{"class":111,"line":17806},[109,87930,53319],{"class":126},[109,87932,52988],{"class":52475},[109,87934,52482],{"class":126},[109,87936,87937],{"class":111,"line":17812},[109,87938,87939],{"class":115},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[109,87941,87942,87944,87947,87949,87951,87953,87955,87957,87960,87962,87964],{"class":111,"line":17835},[109,87943,71259],{"class":122},[109,87945,87946],{"class":211}," Modal",[109,87948,714],{"class":126},[109,87950,52582],{"class":6553},[109,87952,14737],{"class":122},[109,87954,71105],{"class":278},[109,87956,13608],{"class":126},[109,87958,87959],{"class":6553},"message",[109,87961,14737],{"class":122},[109,87963,71105],{"class":278},[109,87965,13615],{"class":126},[109,87967,87968],{"class":111,"line":17849},[109,87969,87970],{"class":115},"      \u002F\u002F 创建Model 模态框盒子\n",[109,87972,87973],{"class":111,"line":17869},[109,87974,87975],{"class":115},"      \u002F\u002F 1.1 创建div标签\n",[109,87977,87978,87980,87983,87985,87987,87989,87991,87993],{"class":111,"line":17875},[109,87979,71226],{"class":133},[109,87981,87982],{"class":126},".modalBox ",[109,87984,130],{"class":122},[109,87986,55571],{"class":126},[109,87988,71326],{"class":211},[109,87990,714],{"class":126},[109,87992,83106],{"class":278},[109,87994,1330],{"class":126},[109,87996,87997],{"class":111,"line":17886},[109,87998,87999],{"class":115},"      \u002F\u002F 1.2 给div 添加类名为model\n",[109,88001,88002,88004,88007,88009],{"class":111,"line":17909},[109,88003,71226],{"class":133},[109,88005,88006],{"class":126},".modalBox.className ",[109,88008,130],{"class":122},[109,88010,88011],{"class":278}," 'modal'\n",[109,88013,88014],{"class":111,"line":17931},[109,88015,88016],{"class":115},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[109,88018,88019,88021,88024,88026],{"class":111,"line":17936},[109,88020,71226],{"class":133},[109,88022,88023],{"class":126},".modalBox.innerHTML ",[109,88025,130],{"class":122},[109,88027,71343],{"class":278},[109,88029,88030,88033,88035],{"class":111,"line":17942},[109,88031,88032],{"class":278},"        \u003Cdiv class=\"header\">${",[109,88034,52582],{"class":126},[109,88036,88037],{"class":278},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[109,88039,88040,88043,88045],{"class":111,"line":17956},[109,88041,88042],{"class":278},"        \u003Cdiv class=\"body\">${",[109,88044,87959],{"class":126},[109,88046,88047],{"class":278},"}\u003C\u002Fdiv>\n",[109,88049,88050],{"class":111,"line":17969},[109,88051,88052],{"class":278},"      `\n",[109,88054,88055],{"class":111,"line":17974},[109,88056,88057],{"class":115},"      \u002F\u002F console.log(this.modalBox)\n",[109,88059,88060],{"class":111,"line":17988},[109,88061,1361],{"class":126},[109,88063,88064],{"class":111,"line":17993},[109,88065,88066],{"class":115},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[109,88068,88069],{"class":111,"line":17999},[109,88070,88071],{"class":115},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[109,88073,88074],{"class":111,"line":18004},[109,88075,88076],{"class":115},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[109,88078,88079,88082,88084,88086,88088,88091,88093,88095],{"class":111,"line":18018},[109,88080,88081],{"class":133},"    Modal",[109,88083,2090],{"class":126},[109,88085,86754],{"class":133},[109,88087,2090],{"class":126},[109,88089,88090],{"class":211},"open",[109,88092,14737],{"class":122},[109,88094,60093],{"class":122},[109,88096,55627],{"class":126},[109,88098,88099],{"class":111,"line":18023},[109,88100,88101],{"class":115},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[109,88103,88104,88106,88109,88111,88113,88115,88117,88120],{"class":111,"line":18028},[109,88105,59403],{"class":122},[109,88107,88108],{"class":133}," box",[109,88110,14737],{"class":122},[109,88112,55571],{"class":126},[109,88114,55574],{"class":211},[109,88116,714],{"class":126},[109,88118,88119],{"class":278},"'.modal'",[109,88121,1330],{"class":126},[109,88123,88124],{"class":111,"line":18042},[109,88125,88126],{"class":115},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[109,88128,88129,88132,88134,88137,88139],{"class":111,"line":18054},[109,88130,88131],{"class":126},"      box ",[109,88133,3091],{"class":122},[109,88135,88136],{"class":126}," box.",[109,88138,58181],{"class":211},[109,88140,803],{"class":126},[109,88142,88143],{"class":111,"line":18059},[109,88144,88145],{"class":115},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[109,88147,88148],{"class":111,"line":18072},[109,88149,88150],{"class":115},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[109,88152,88153],{"class":111,"line":18077},[109,88154,88155],{"class":115},"      \u002F\u002F append可以增加对象\n",[109,88157,88158,88161,88164,88166,88169],{"class":111,"line":18082},[109,88159,88160],{"class":126},"      document.body.",[109,88162,88163],{"class":211},"append",[109,88165,714],{"class":126},[109,88167,88168],{"class":133},"this",[109,88170,88171],{"class":126},".modalBox)\n",[109,88173,88174],{"class":111,"line":18087},[109,88175,158],{"emptyLinePlaceholder":157},[109,88177,88178],{"class":111,"line":18100},[109,88179,88180],{"class":115},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[109,88182,88183,88185,88188,88190,88192,88195,88197,88199,88201,88203,88206,88208],{"class":111,"line":18105},[109,88184,71226],{"class":133},[109,88186,88187],{"class":126},".modalBox.",[109,88189,55574],{"class":211},[109,88191,714],{"class":126},[109,88193,88194],{"class":278},"'i'",[109,88196,32001],{"class":126},[109,88198,58988],{"class":211},[109,88200,714],{"class":126},[109,88202,58993],{"class":278},[109,88204,88205],{"class":126},", () ",[109,88207,85897],{"class":122},[109,88209,16745],{"class":126},[109,88211,88212],{"class":111,"line":33808},[109,88213,88214],{"class":115},"        \u002F\u002F 这个地方需要用到箭头函数\n",[109,88216,88217],{"class":111,"line":33814},[109,88218,88219],{"class":115},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[109,88221,88222],{"class":111,"line":33820},[109,88223,88224],{"class":115},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[109,88226,88227,88229,88231,88234],{"class":111,"line":33826},[109,88228,65901],{"class":133},[109,88230,2090],{"class":126},[109,88232,88233],{"class":211},"close",[109,88235,803],{"class":126},[109,88237,88238],{"class":111,"line":33832},[109,88239,65990],{"class":126},[109,88241,88242],{"class":111,"line":33843},[109,88243,1361],{"class":126},[109,88245,88246],{"class":111,"line":33849},[109,88247,158],{"emptyLinePlaceholder":157},[109,88249,88250],{"class":111,"line":33869},[109,88251,88252],{"class":115},"    \u002F\u002F 测试一下 点击 删除按钮\n",[109,88254,88255,88257,88259,88261,88264,88266,88268,88270,88272,88274,88276],{"class":111,"line":33875},[109,88256,53582],{"class":126},[109,88258,55574],{"class":211},[109,88260,714],{"class":126},[109,88262,88263],{"class":278},"'#delete'",[109,88265,32001],{"class":126},[109,88267,58988],{"class":211},[109,88269,714],{"class":126},[109,88271,58993],{"class":278},[109,88273,88205],{"class":126},[109,88275,85897],{"class":122},[109,88277,16745],{"class":126},[109,88279,88280],{"class":111,"line":33886},[109,88281,88282],{"class":115},"      \u002F\u002F 先调用Model构造函数\n",[109,88284,88285,88287,88290,88292,88294,88296,88298,88301,88303,88306],{"class":111,"line":33892},[109,88286,59403],{"class":122},[109,88288,88289],{"class":133}," del",[109,88291,14737],{"class":122},[109,88293,1001],{"class":122},[109,88295,87946],{"class":211},[109,88297,714],{"class":126},[109,88299,88300],{"class":278},"'温馨的提示'",[109,88302,13608],{"class":126},[109,88304,88305],{"class":278},"'您没有删除权限操作'",[109,88307,1330],{"class":126},[109,88309,88310],{"class":111,"line":33898},[109,88311,88312],{"class":115},"      \u002F\u002F 实例对象调用open方法\n",[109,88314,88315,88318,88320],{"class":111,"line":33904},[109,88316,88317],{"class":126},"      del.",[109,88319,88090],{"class":211},[109,88321,803],{"class":126},[109,88323,88324],{"class":111,"line":33910},[109,88325,34636],{"class":126},[109,88327,88328],{"class":111,"line":33916},[109,88329,88330],{"class":115},"    \u002F\u002F 测试一下 点击 登录按钮\n",[109,88332,88333,88335,88337,88339,88342,88344,88346,88348,88350,88352,88354],{"class":111,"line":33922},[109,88334,53582],{"class":126},[109,88336,55574],{"class":211},[109,88338,714],{"class":126},[109,88340,88341],{"class":278},"'#login'",[109,88343,32001],{"class":126},[109,88345,58988],{"class":211},[109,88347,714],{"class":126},[109,88349,58993],{"class":278},[109,88351,88205],{"class":126},[109,88353,85897],{"class":122},[109,88355,16745],{"class":126},[109,88357,88358],{"class":111,"line":33928},[109,88359,88282],{"class":115},[109,88361,88362,88364,88367,88369,88371,88373,88375,88378,88380,88383],{"class":111,"line":33948},[109,88363,59403],{"class":122},[109,88365,88366],{"class":133}," log",[109,88368,14737],{"class":122},[109,88370,1001],{"class":122},[109,88372,87946],{"class":211},[109,88374,714],{"class":126},[109,88376,88377],{"class":278},"'友情提示'",[109,88379,13608],{"class":126},[109,88381,88382],{"class":278},"'您还没有登录呢'",[109,88384,1330],{"class":126},[109,88386,88387],{"class":111,"line":33954},[109,88388,88312],{"class":115},[109,88390,88391,88394,88396],{"class":111,"line":33970},[109,88392,88393],{"class":126},"      log.",[109,88395,88090],{"class":211},[109,88397,803],{"class":126},[109,88399,88400],{"class":111,"line":33976},[109,88401,34636],{"class":126},[109,88403,88404],{"class":111,"line":33990},[109,88405,88406],{"class":115},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[109,88408,88409,88411,88413,88415,88417,88419,88421,88423],{"class":111,"line":33996},[109,88410,88081],{"class":133},[109,88412,2090],{"class":126},[109,88414,86754],{"class":133},[109,88416,2090],{"class":126},[109,88418,88233],{"class":211},[109,88420,14737],{"class":122},[109,88422,60093],{"class":122},[109,88424,55627],{"class":126},[109,88426,88427,88429,88431,88433],{"class":111,"line":34011},[109,88428,71226],{"class":133},[109,88430,88187],{"class":126},[109,88432,58181],{"class":211},[109,88434,803],{"class":126},[109,88436,88437],{"class":111,"line":34017},[109,88438,1361],{"class":126},[109,88440,88441,88443,88445],{"class":111,"line":34026},[109,88442,53592],{"class":126},[109,88444,52988],{"class":52475},[109,88446,52482],{"class":126},[109,88448,88449,88451,88453],{"class":111,"line":34032},[109,88450,52960],{"class":126},[109,88452,52975],{"class":52475},[109,88454,52482],{"class":126},[109,88456,88457],{"class":111,"line":34041},[109,88458,158],{"emptyLinePlaceholder":157},[109,88460,88461,88463,88465],{"class":111,"line":34047},[109,88462,52960],{"class":126},[109,88464,51810],{"class":52475},[109,88466,52482],{"class":126},[19,88468,88469],{},[938,88470],{"alt":104,"src":88471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88473,88475],{"id":88474},"_414-深浅拷贝","4.14 深浅拷贝",[51,88477,88479],{"id":88478},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88481,88482],{},[938,88483],{"alt":104,"src":88484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88486,88487],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88489,88490],{},[938,88491],{"alt":104,"src":88492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88494,88495],{},[938,88496],{"alt":104,"src":88497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88499,88500],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88502,88503],{},[938,88504],{"alt":104,"src":88505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88507,745],{},[19,88509,88510],{},[938,88511],{"alt":104,"src":88512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[51,88514,88516],{"id":88515},"_4142-深拷贝","4.14.2 深拷贝",[19,88518,88519],{},"深拷贝：拷贝的是对象，不是地址",[19,88521,88522],{},"常用的三种方法：",[765,88524,88525,88528,88531],{},[30,88526,88527],{},"通过递归实现深拷贝",[30,88529,88530],{},"lodash\u002FcloneDeep",[30,88532,88533],{},"通过JSON.stringify()实现",[23171,88535,88537],{"id":88536},"_41421-递归函数","4.14.2.1 递归函数",[19,88539,88540],{},[938,88541],{"alt":104,"src":88542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[765,88544,88545],{},[30,88546,88547],{},"死递归占溢出：",[99,88549,88551],{"className":54242,"code":88550,"language":54244,"meta":104,"style":104},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[106,88552,88553,88561,88569,88573,88578,88582,88587,88595],{"__ignoreMap":104},[109,88554,88555,88557,88559],{"class":111,"line":112},[109,88556,1320],{"class":126},[109,88558,52975],{"class":52475},[109,88560,52482],{"class":126},[109,88562,88563,88565,88567],{"class":111,"line":119},[109,88564,53319],{"class":126},[109,88566,52988],{"class":52475},[109,88568,52482],{"class":126},[109,88570,88571],{"class":111,"line":140},[109,88572,78318],{"class":126},[109,88574,88575],{"class":111,"line":154},[109,88576,88577],{"class":126},"      fn()\n",[109,88579,88580],{"class":111,"line":161},[109,88581,1361],{"class":126},[109,88583,88584],{"class":111,"line":167},[109,88585,88586],{"class":126},"    fn()\n",[109,88588,88589,88591,88593],{"class":111,"line":185},[109,88590,53592],{"class":126},[109,88592,52988],{"class":52475},[109,88594,52482],{"class":126},[109,88596,88597,88599,88601],{"class":111,"line":201},[109,88598,52960],{"class":126},[109,88600,52975],{"class":52475},[109,88602,52482],{"class":126},[765,88604,88605],{"start":119},[30,88606,88607],{},"递归函数要加判断条件：",[19,88609,88610],{},[938,88611],{"alt":104,"src":88612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[765,88614,88615],{"start":140},[30,88616,88617],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[99,88619,88621],{"className":51808,"code":88620,"language":51810,"meta":104,"style":104},"\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",[106,88622,88623,88633,88647,88651,88659,88673,88693,88705,88713,88717,88725,88737,88745,88753,88778,88790,88794,88801,88809,88817,88821],{"__ignoreMap":104},[109,88624,88625,88627,88629,88631],{"class":111,"line":112},[109,88626,52472],{"class":126},[109,88628,52476],{"class":52475},[109,88630,52479],{"class":211},[109,88632,52482],{"class":126},[109,88634,88635,88637,88639,88641,88643,88645],{"class":111,"line":119},[109,88636,1320],{"class":126},[109,88638,51810],{"class":52475},[109,88640,52491],{"class":211},[109,88642,130],{"class":126},[109,88644,52496],{"class":278},[109,88646,52482],{"class":126},[109,88648,88649],{"class":111,"line":140},[109,88650,158],{"emptyLinePlaceholder":157},[109,88652,88653,88655,88657],{"class":111,"line":154},[109,88654,1320],{"class":126},[109,88656,52509],{"class":52475},[109,88658,52482],{"class":126},[109,88660,88661,88663,88665,88667,88669,88671],{"class":111,"line":161},[109,88662,53319],{"class":126},[109,88664,52519],{"class":52475},[109,88666,52522],{"class":211},[109,88668,130],{"class":126},[109,88670,52527],{"class":278},[109,88672,52482],{"class":126},[109,88674,88675,88677,88679,88681,88683,88685,88687,88689,88691],{"class":111,"line":167},[109,88676,53319],{"class":126},[109,88678,52519],{"class":52475},[109,88680,16093],{"class":211},[109,88682,130],{"class":126},[109,88684,52566],{"class":278},[109,88686,52546],{"class":211},[109,88688,130],{"class":126},[109,88690,52573],{"class":278},[109,88692,52482],{"class":126},[109,88694,88695,88697,88699,88701,88703],{"class":111,"line":185},[109,88696,53319],{"class":126},[109,88698,52582],{"class":52475},[109,88700,52585],{"class":126},[109,88702,52582],{"class":52475},[109,88704,52482],{"class":126},[109,88706,88707,88709,88711],{"class":111,"line":201},[109,88708,52960],{"class":126},[109,88710,52509],{"class":52475},[109,88712,52482],{"class":126},[109,88714,88715],{"class":111,"line":206},[109,88716,158],{"emptyLinePlaceholder":157},[109,88718,88719,88721,88723],{"class":111,"line":218},[109,88720,1320],{"class":126},[109,88722,52975],{"class":52475},[109,88724,52482],{"class":126},[109,88726,88727,88729,88731,88733,88735],{"class":111,"line":223},[109,88728,53319],{"class":126},[109,88730,52786],{"class":52475},[109,88732,56489],{"class":126},[109,88734,52786],{"class":52475},[109,88736,52482],{"class":126},[109,88738,88739,88741,88743],{"class":111,"line":229},[109,88740,53319],{"class":126},[109,88742,52988],{"class":52475},[109,88744,52482],{"class":126},[109,88746,88747,88749,88751],{"class":111,"line":244},[109,88748,71259],{"class":122},[109,88750,74948],{"class":211},[109,88752,215],{"class":126},[109,88754,88755,88757,88759,88761,88763,88765,88767,88769,88771,88773,88776],{"class":111,"line":258},[109,88756,56946],{"class":126},[109,88758,55574],{"class":211},[109,88760,714],{"class":126},[109,88762,83106],{"class":278},[109,88764,75424],{"class":126},[109,88766,130],{"class":122},[109,88768,1001],{"class":122},[109,88770,74964],{"class":211},[109,88772,18434],{"class":126},[109,88774,88775],{"class":211},"toLocaleString",[109,88777,803],{"class":126},[109,88779,88780,88783,88786,88788],{"class":111,"line":263},[109,88781,88782],{"class":211},"      setTimeout",[109,88784,88785],{"class":126},"(getTime, ",[109,88787,7740],{"class":133},[109,88789,1330],{"class":126},[109,88791,88792],{"class":111,"line":269},[109,88793,1361],{"class":126},[109,88795,88796,88799],{"class":111,"line":304},[109,88797,88798],{"class":211},"    getTime",[109,88800,803],{"class":126},[109,88802,88803,88805,88807],{"class":111,"line":331},[109,88804,53592],{"class":126},[109,88806,52988],{"class":52475},[109,88808,52482],{"class":126},[109,88810,88811,88813,88815],{"class":111,"line":336},[109,88812,52960],{"class":126},[109,88814,52975],{"class":52475},[109,88816,52482],{"class":126},[109,88818,88819],{"class":111,"line":364},[109,88820,158],{"emptyLinePlaceholder":157},[109,88822,88823,88825,88827],{"class":111,"line":391},[109,88824,52960],{"class":126},[109,88826,51810],{"class":52475},[109,88828,52482],{"class":126},[19,88830,88831],{},[938,88832],{"alt":104,"src":88833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[765,88835,88836],{"start":154},[30,88837,88527],{},[19,88839,88840],{},[938,88841],{"alt":104,"src":88842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88844,88845],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88847,40364],{},[19,88849,88850],{},"这个是简易版的递归函数深拷贝",[19,88852,88853],{},"一定要注意先数组再对象，因为万物皆可对象",[99,88855,88857],{"className":51808,"code":88856,"language":51810,"meta":104,"style":104},"\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",[106,88858,88859,88869,88883,88887,88895,88909,88929,88941,88949,88953,88961,88969,88979,88988,88996,89012,89016,89024,89028,89032,89044,89049,89068,89084,89089,89094,89099,89114,89119,89124,89133,89141,89158,89166,89172,89180,89185,89190,89199,89203,89207,89211,89222,89231,89241,89255,89265,89273,89281,89289,89293],{"__ignoreMap":104},[109,88860,88861,88863,88865,88867],{"class":111,"line":112},[109,88862,52472],{"class":126},[109,88864,52476],{"class":52475},[109,88866,52479],{"class":211},[109,88868,52482],{"class":126},[109,88870,88871,88873,88875,88877,88879,88881],{"class":111,"line":119},[109,88872,1320],{"class":126},[109,88874,51810],{"class":52475},[109,88876,52491],{"class":211},[109,88878,130],{"class":126},[109,88880,52496],{"class":278},[109,88882,52482],{"class":126},[109,88884,88885],{"class":111,"line":140},[109,88886,158],{"emptyLinePlaceholder":157},[109,88888,88889,88891,88893],{"class":111,"line":154},[109,88890,1320],{"class":126},[109,88892,52509],{"class":52475},[109,88894,52482],{"class":126},[109,88896,88897,88899,88901,88903,88905,88907],{"class":111,"line":161},[109,88898,53319],{"class":126},[109,88900,52519],{"class":52475},[109,88902,52522],{"class":211},[109,88904,130],{"class":126},[109,88906,52527],{"class":278},[109,88908,52482],{"class":126},[109,88910,88911,88913,88915,88917,88919,88921,88923,88925,88927],{"class":111,"line":167},[109,88912,53319],{"class":126},[109,88914,52519],{"class":52475},[109,88916,16093],{"class":211},[109,88918,130],{"class":126},[109,88920,52566],{"class":278},[109,88922,52546],{"class":211},[109,88924,130],{"class":126},[109,88926,52573],{"class":278},[109,88928,52482],{"class":126},[109,88930,88931,88933,88935,88937,88939],{"class":111,"line":185},[109,88932,53319],{"class":126},[109,88934,52582],{"class":52475},[109,88936,52585],{"class":126},[109,88938,52582],{"class":52475},[109,88940,52482],{"class":126},[109,88942,88943,88945,88947],{"class":111,"line":201},[109,88944,52960],{"class":126},[109,88946,52509],{"class":52475},[109,88948,52482],{"class":126},[109,88950,88951],{"class":111,"line":206},[109,88952,158],{"emptyLinePlaceholder":157},[109,88954,88955,88957,88959],{"class":111,"line":218},[109,88956,1320],{"class":126},[109,88958,52975],{"class":52475},[109,88960,52482],{"class":126},[109,88962,88963,88965,88967],{"class":111,"line":223},[109,88964,53319],{"class":126},[109,88966,52988],{"class":52475},[109,88968,52482],{"class":126},[109,88970,88971,88973,88975,88977],{"class":111,"line":229},[109,88972,619],{"class":122},[109,88974,71146],{"class":133},[109,88976,14737],{"class":122},[109,88978,16745],{"class":126},[109,88980,88981,88983,88986],{"class":111,"line":244},[109,88982,72791],{"class":126},[109,88984,88985],{"class":278},"'pink'",[109,88987,32641],{"class":126},[109,88989,88990,88992,88994],{"class":111,"line":258},[109,88991,72801],{"class":126},[109,88993,2182],{"class":133},[109,88995,32641],{"class":126},[109,88997,88998,89001,89004,89006,89009],{"class":111,"line":263},[109,88999,89000],{"class":126},"      hobby: [",[109,89002,89003],{"class":278},"'乒乓球'",[109,89005,13608],{"class":126},[109,89007,89008],{"class":278},"'足球'",[109,89010,89011],{"class":126},"],\n",[109,89013,89014],{"class":111,"line":269},[109,89015,79047],{"class":126},[109,89017,89018,89021],{"class":111,"line":304},[109,89019,89020],{"class":126},"        baby: ",[109,89022,89023],{"class":278},"'小pink'\n",[109,89025,89026],{"class":111,"line":331},[109,89027,53573],{"class":126},[109,89029,89030],{"class":111,"line":336},[109,89031,1361],{"class":126},[109,89033,89034,89036,89039,89041],{"class":111,"line":364},[109,89035,619],{"class":122},[109,89037,89038],{"class":133}," o",[109,89040,14737],{"class":122},[109,89042,89043],{"class":126}," {}\n",[109,89045,89046],{"class":111,"line":391},[109,89047,89048],{"class":115},"    \u002F\u002F 拷贝函数\n",[109,89050,89051,89053,89056,89058,89061,89063,89066],{"class":111,"line":396},[109,89052,71259],{"class":122},[109,89054,89055],{"class":211}," deepCopy",[109,89057,714],{"class":126},[109,89059,89060],{"class":6553},"newObj",[109,89062,13608],{"class":126},[109,89064,89065],{"class":6553},"oldObj",[109,89067,13615],{"class":126},[109,89069,89070,89072,89074,89076,89079,89081],{"class":111,"line":402},[109,89071,53459],{"class":122},[109,89073,285],{"class":126},[109,89075,53022],{"class":122},[109,89077,89078],{"class":126}," k ",[109,89080,27218],{"class":122},[109,89082,89083],{"class":126}," oldObj) {\n",[109,89085,89086],{"class":111,"line":419},[109,89087,89088],{"class":115},"        \u002F\u002F 处理数组的问题\n",[109,89090,89091],{"class":111,"line":435},[109,89092,89093],{"class":115},"        \u002F\u002F 判断是否属于数组\n",[109,89095,89096],{"class":111,"line":440},[109,89097,89098],{"class":115},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[109,89100,89101,89103,89106,89109,89112],{"class":111,"line":467},[109,89102,3852],{"class":122},[109,89104,89105],{"class":126}," (oldObj[k] ",[109,89107,89108],{"class":122},"instanceof",[109,89110,89111],{"class":211}," Array",[109,89113,13615],{"class":126},[109,89115,89116],{"class":111,"line":494},[109,89117,89118],{"class":115},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[109,89120,89121],{"class":111,"line":499},[109,89122,89123],{"class":115},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[109,89125,89126,89129,89131],{"class":111,"line":526},[109,89127,89128],{"class":126},"          newObj[k] ",[109,89130,130],{"class":122},[109,89132,53013],{"class":126},[109,89134,89135,89138],{"class":111,"line":552},[109,89136,89137],{"class":211},"          deepCopy",[109,89139,89140],{"class":126},"(newObj[k], oldObj[k])\n",[109,89142,89143,89145,89147,89149,89151,89153,89156],{"class":111,"line":557},[109,89144,81255],{"class":126},[109,89146,3077],{"class":122},[109,89148,3080],{"class":122},[109,89150,89105],{"class":126},[109,89152,89108],{"class":122},[109,89154,89155],{"class":211}," Object",[109,89157,13615],{"class":126},[109,89159,89160,89162,89164],{"class":111,"line":584},[109,89161,89128],{"class":126},[109,89163,130],{"class":122},[109,89165,89043],{"class":126},[109,89167,89168,89170],{"class":111,"line":611},[109,89169,89137],{"class":211},[109,89171,89140],{"class":126},[109,89173,89174,89176,89178],{"class":111,"line":616},[109,89175,81255],{"class":126},[109,89177,3077],{"class":122},[109,89179,16745],{"class":126},[109,89181,89182],{"class":111,"line":633},[109,89183,89184],{"class":115},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[109,89186,89187],{"class":111,"line":649},[109,89188,89189],{"class":115},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[109,89191,89192,89194,89196],{"class":111,"line":676},[109,89193,89128],{"class":126},[109,89195,130],{"class":122},[109,89197,89198],{"class":126}," oldObj[k]\n",[109,89200,89201],{"class":111,"line":703},[109,89202,3884],{"class":126},[109,89204,89205],{"class":111,"line":708},[109,89206,53573],{"class":126},[109,89208,89209],{"class":111,"line":723},[109,89210,1361],{"class":126},[109,89212,89213,89216,89219],{"class":111,"line":728},[109,89214,89215],{"class":211},"    deepCopy",[109,89217,89218],{"class":126},"(o, obj) ",[109,89220,89221],{"class":115},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[109,89223,89224,89226,89228],{"class":111,"line":739},[109,89225,74928],{"class":126},[109,89227,59422],{"class":211},[109,89229,89230],{"class":126},"(o)\n",[109,89232,89233,89236,89238],{"class":111,"line":9352},[109,89234,89235],{"class":126},"    o.age ",[109,89237,130],{"class":122},[109,89239,89240],{"class":133}," 20\n",[109,89242,89243,89246,89248,89250,89252],{"class":111,"line":9364},[109,89244,89245],{"class":126},"    o.hobby[",[109,89247,1314],{"class":133},[109,89249,5780],{"class":126},[109,89251,130],{"class":122},[109,89253,89254],{"class":278}," '篮球'\n",[109,89256,89257,89260,89262],{"class":111,"line":9376},[109,89258,89259],{"class":126},"    o.family ",[109,89261,130],{"class":122},[109,89263,89264],{"class":278}," '老pink'\n",[109,89266,89267,89269,89271],{"class":111,"line":11034},[109,89268,74928],{"class":126},[109,89270,59422],{"class":211},[109,89272,71211],{"class":126},[109,89274,89275,89277,89279],{"class":111,"line":11059},[109,89276,53592],{"class":126},[109,89278,52988],{"class":52475},[109,89280,52482],{"class":126},[109,89282,89283,89285,89287],{"class":111,"line":11082},[109,89284,52960],{"class":126},[109,89286,52975],{"class":52475},[109,89288,52482],{"class":126},[109,89290,89291],{"class":111,"line":11106},[109,89292,158],{"emptyLinePlaceholder":157},[109,89294,89295,89297,89299],{"class":111,"line":11111},[109,89296,52960],{"class":126},[109,89298,51810],{"class":52475},[109,89300,52482],{"class":126},[19,89302,89303],{},[938,89304],{"alt":104,"src":89305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23171,89307,89309,89310],{"id":89308},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[23,89311,89312],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89314,89315],{},[1776,89316,89317],{"href":89317,"rel":89318},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25039],[19,89320,89321],{},"lodash里边的方法都要加上一个下划线_",[19,89323,89324],{},"_.cloneDeep()",[99,89326,89328],{"className":51808,"code":89327,"language":51810,"meta":104,"style":104},"\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",[106,89329,89330,89340,89354,89358,89366,89380,89400,89412,89420,89424,89432,89437,89456,89464,89474,89482,89490,89502,89506,89512,89516,89520,89536,89544,89553,89561,89569,89577,89581],{"__ignoreMap":104},[109,89331,89332,89334,89336,89338],{"class":111,"line":112},[109,89333,52472],{"class":126},[109,89335,52476],{"class":52475},[109,89337,52479],{"class":211},[109,89339,52482],{"class":126},[109,89341,89342,89344,89346,89348,89350,89352],{"class":111,"line":119},[109,89343,1320],{"class":126},[109,89345,51810],{"class":52475},[109,89347,52491],{"class":211},[109,89349,130],{"class":126},[109,89351,52496],{"class":278},[109,89353,52482],{"class":126},[109,89355,89356],{"class":111,"line":140},[109,89357,158],{"emptyLinePlaceholder":157},[109,89359,89360,89362,89364],{"class":111,"line":154},[109,89361,1320],{"class":126},[109,89363,52509],{"class":52475},[109,89365,52482],{"class":126},[109,89367,89368,89370,89372,89374,89376,89378],{"class":111,"line":161},[109,89369,53319],{"class":126},[109,89371,52519],{"class":52475},[109,89373,52522],{"class":211},[109,89375,130],{"class":126},[109,89377,52527],{"class":278},[109,89379,52482],{"class":126},[109,89381,89382,89384,89386,89388,89390,89392,89394,89396,89398],{"class":111,"line":167},[109,89383,53319],{"class":126},[109,89385,52519],{"class":52475},[109,89387,16093],{"class":211},[109,89389,130],{"class":126},[109,89391,52566],{"class":278},[109,89393,52546],{"class":211},[109,89395,130],{"class":126},[109,89397,52573],{"class":278},[109,89399,52482],{"class":126},[109,89401,89402,89404,89406,89408,89410],{"class":111,"line":185},[109,89403,53319],{"class":126},[109,89405,52582],{"class":52475},[109,89407,52585],{"class":126},[109,89409,52582],{"class":52475},[109,89411,52482],{"class":126},[109,89413,89414,89416,89418],{"class":111,"line":201},[109,89415,52960],{"class":126},[109,89417,52509],{"class":52475},[109,89419,52482],{"class":126},[109,89421,89422],{"class":111,"line":206},[109,89423,158],{"emptyLinePlaceholder":157},[109,89425,89426,89428,89430],{"class":111,"line":218},[109,89427,1320],{"class":126},[109,89429,52975],{"class":52475},[109,89431,52482],{"class":126},[109,89433,89434],{"class":111,"line":223},[109,89435,89436],{"class":115},"  \u003C!-- 先引用这个库 -->\n",[109,89438,89439,89441,89443,89445,89447,89450,89452,89454],{"class":111,"line":229},[109,89440,53319],{"class":126},[109,89442,52988],{"class":52475},[109,89444,56414],{"class":211},[109,89446,130],{"class":126},[109,89448,89449],{"class":278},"\"lodash.min.js\"",[109,89451,56489],{"class":126},[109,89453,52988],{"class":52475},[109,89455,52482],{"class":126},[109,89457,89458,89460,89462],{"class":111,"line":244},[109,89459,53319],{"class":126},[109,89461,52988],{"class":52475},[109,89463,52482],{"class":126},[109,89465,89466,89468,89470,89472],{"class":111,"line":258},[109,89467,619],{"class":122},[109,89469,71146],{"class":133},[109,89471,14737],{"class":122},[109,89473,16745],{"class":126},[109,89475,89476,89478,89480],{"class":111,"line":263},[109,89477,72791],{"class":126},[109,89479,88985],{"class":278},[109,89481,32641],{"class":126},[109,89483,89484,89486,89488],{"class":111,"line":269},[109,89485,72801],{"class":126},[109,89487,2182],{"class":133},[109,89489,32641],{"class":126},[109,89491,89492,89494,89496,89498,89500],{"class":111,"line":304},[109,89493,89000],{"class":126},[109,89495,89003],{"class":278},[109,89497,13608],{"class":126},[109,89499,89008],{"class":278},[109,89501,89011],{"class":126},[109,89503,89504],{"class":111,"line":331},[109,89505,79047],{"class":126},[109,89507,89508,89510],{"class":111,"line":336},[109,89509,89020],{"class":126},[109,89511,89023],{"class":278},[109,89513,89514],{"class":111,"line":364},[109,89515,53573],{"class":126},[109,89517,89518],{"class":111,"line":391},[109,89519,1361],{"class":126},[109,89521,89522,89524,89526,89528,89531,89534],{"class":111,"line":396},[109,89523,619],{"class":122},[109,89525,89038],{"class":133},[109,89527,14737],{"class":122},[109,89529,89530],{"class":126}," _.",[109,89532,89533],{"class":211},"cloneDeep",[109,89535,71211],{"class":126},[109,89537,89538,89540,89542],{"class":111,"line":402},[109,89539,74928],{"class":126},[109,89541,59422],{"class":211},[109,89543,89230],{"class":126},[109,89545,89546,89549,89551],{"class":111,"line":419},[109,89547,89548],{"class":126},"    o.family.baby ",[109,89550,130],{"class":122},[109,89552,89264],{"class":278},[109,89554,89555,89557,89559],{"class":111,"line":435},[109,89556,74928],{"class":126},[109,89558,59422],{"class":211},[109,89560,71211],{"class":126},[109,89562,89563,89565,89567],{"class":111,"line":440},[109,89564,53592],{"class":126},[109,89566,52988],{"class":52475},[109,89568,52482],{"class":126},[109,89570,89571,89573,89575],{"class":111,"line":467},[109,89572,52960],{"class":126},[109,89574,52975],{"class":52475},[109,89576,52482],{"class":126},[109,89578,89579],{"class":111,"line":494},[109,89580,158],{"emptyLinePlaceholder":157},[109,89582,89583,89585,89587],{"class":111,"line":499},[109,89584,52960],{"class":126},[109,89586,51810],{"class":52475},[109,89588,52482],{"class":126},[19,89590,89591],{},[938,89592],{"alt":104,"src":89593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23171,89595,89597],{"id":89596},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[99,89599,89601],{"className":51808,"code":89600,"language":51810,"meta":104,"style":104},"\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",[106,89602,89603,89613,89627,89631,89639,89653,89673,89685,89693,89697,89705,89713,89723,89731,89739,89751,89755,89761,89765,89769,89774,89779,89784,89810,89818,89827,89835,89843,89851,89855],{"__ignoreMap":104},[109,89604,89605,89607,89609,89611],{"class":111,"line":112},[109,89606,52472],{"class":126},[109,89608,52476],{"class":52475},[109,89610,52479],{"class":211},[109,89612,52482],{"class":126},[109,89614,89615,89617,89619,89621,89623,89625],{"class":111,"line":119},[109,89616,1320],{"class":126},[109,89618,51810],{"class":52475},[109,89620,52491],{"class":211},[109,89622,130],{"class":126},[109,89624,52496],{"class":278},[109,89626,52482],{"class":126},[109,89628,89629],{"class":111,"line":140},[109,89630,158],{"emptyLinePlaceholder":157},[109,89632,89633,89635,89637],{"class":111,"line":154},[109,89634,1320],{"class":126},[109,89636,52509],{"class":52475},[109,89638,52482],{"class":126},[109,89640,89641,89643,89645,89647,89649,89651],{"class":111,"line":161},[109,89642,53319],{"class":126},[109,89644,52519],{"class":52475},[109,89646,52522],{"class":211},[109,89648,130],{"class":126},[109,89650,52527],{"class":278},[109,89652,52482],{"class":126},[109,89654,89655,89657,89659,89661,89663,89665,89667,89669,89671],{"class":111,"line":167},[109,89656,53319],{"class":126},[109,89658,52519],{"class":52475},[109,89660,16093],{"class":211},[109,89662,130],{"class":126},[109,89664,52566],{"class":278},[109,89666,52546],{"class":211},[109,89668,130],{"class":126},[109,89670,52573],{"class":278},[109,89672,52482],{"class":126},[109,89674,89675,89677,89679,89681,89683],{"class":111,"line":185},[109,89676,53319],{"class":126},[109,89678,52582],{"class":52475},[109,89680,52585],{"class":126},[109,89682,52582],{"class":52475},[109,89684,52482],{"class":126},[109,89686,89687,89689,89691],{"class":111,"line":201},[109,89688,52960],{"class":126},[109,89690,52509],{"class":52475},[109,89692,52482],{"class":126},[109,89694,89695],{"class":111,"line":206},[109,89696,158],{"emptyLinePlaceholder":157},[109,89698,89699,89701,89703],{"class":111,"line":218},[109,89700,1320],{"class":126},[109,89702,52975],{"class":52475},[109,89704,52482],{"class":126},[109,89706,89707,89709,89711],{"class":111,"line":223},[109,89708,53319],{"class":126},[109,89710,52988],{"class":52475},[109,89712,52482],{"class":126},[109,89714,89715,89717,89719,89721],{"class":111,"line":229},[109,89716,619],{"class":122},[109,89718,71146],{"class":133},[109,89720,14737],{"class":122},[109,89722,16745],{"class":126},[109,89724,89725,89727,89729],{"class":111,"line":244},[109,89726,72791],{"class":126},[109,89728,88985],{"class":278},[109,89730,32641],{"class":126},[109,89732,89733,89735,89737],{"class":111,"line":258},[109,89734,72801],{"class":126},[109,89736,2182],{"class":133},[109,89738,32641],{"class":126},[109,89740,89741,89743,89745,89747,89749],{"class":111,"line":263},[109,89742,89000],{"class":126},[109,89744,89003],{"class":278},[109,89746,13608],{"class":126},[109,89748,89008],{"class":278},[109,89750,89011],{"class":126},[109,89752,89753],{"class":111,"line":269},[109,89754,79047],{"class":126},[109,89756,89757,89759],{"class":111,"line":304},[109,89758,89020],{"class":126},[109,89760,89023],{"class":278},[109,89762,89763],{"class":111,"line":331},[109,89764,53573],{"class":126},[109,89766,89767],{"class":111,"line":336},[109,89768,1361],{"class":126},[109,89770,89771],{"class":111,"line":364},[109,89772,89773],{"class":115},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[109,89775,89776],{"class":111,"line":391},[109,89777,89778],{"class":115},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[109,89780,89781],{"class":111,"line":396},[109,89782,89783],{"class":115},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[109,89785,89786,89788,89790,89792,89795,89797,89800,89802,89804,89806,89808],{"class":111,"line":402},[109,89787,619],{"class":122},[109,89789,89038],{"class":133},[109,89791,14737],{"class":122},[109,89793,89794],{"class":133}," JSON",[109,89796,2090],{"class":126},[109,89798,89799],{"class":211},"parse",[109,89801,714],{"class":126},[109,89803,72839],{"class":133},[109,89805,2090],{"class":126},[109,89807,72844],{"class":211},[109,89809,72847],{"class":126},[109,89811,89812,89814,89816],{"class":111,"line":419},[109,89813,74928],{"class":126},[109,89815,59422],{"class":211},[109,89817,89230],{"class":126},[109,89819,89820,89822,89824],{"class":111,"line":435},[109,89821,89548],{"class":126},[109,89823,130],{"class":122},[109,89825,89826],{"class":278}," '123'\n",[109,89828,89829,89831,89833],{"class":111,"line":440},[109,89830,74928],{"class":126},[109,89832,59422],{"class":211},[109,89834,71211],{"class":126},[109,89836,89837,89839,89841],{"class":111,"line":467},[109,89838,53592],{"class":126},[109,89840,52988],{"class":52475},[109,89842,52482],{"class":126},[109,89844,89845,89847,89849],{"class":111,"line":494},[109,89846,52960],{"class":126},[109,89848,52975],{"class":52475},[109,89850,52482],{"class":126},[109,89852,89853],{"class":111,"line":499},[109,89854,158],{"emptyLinePlaceholder":157},[109,89856,89857,89859,89861],{"class":111,"line":526},[109,89858,52960],{"class":126},[109,89860,51810],{"class":52475},[109,89862,52482],{"class":126},[19,89864,89865],{},[938,89866],{"alt":104,"src":89867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89869,89871],{"id":89870},"_415-异常处理","4.15 异常处理",[765,89873,89874],{},[30,89875,89876],{},"throw抛异常",[19,89878,89879],{},[938,89880],{"alt":104,"src":89881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[765,89883,89884],{"start":119},[30,89885,89886],{},"try\u002Fcatch 捕获错误信息",[19,89888,89889],{},[938,89890],{"alt":104,"src":89891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[99,89893,89895],{"className":51808,"code":89894,"language":51810,"meta":104,"style":104},"\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",[106,89896,89897,89907,89921,89925,89933,89947,89967,89979,89987,89991,89999,90011,90019,90028,90035,90040,90059,90068,90079,90084,90094,90099,90104,90109,90126,90130,90135,90142,90154,90158,90170,90174,90178,90183,90188,90195,90203,90211,90215],{"__ignoreMap":104},[109,89898,89899,89901,89903,89905],{"class":111,"line":112},[109,89900,52472],{"class":126},[109,89902,52476],{"class":52475},[109,89904,52479],{"class":211},[109,89906,52482],{"class":126},[109,89908,89909,89911,89913,89915,89917,89919],{"class":111,"line":119},[109,89910,1320],{"class":126},[109,89912,51810],{"class":52475},[109,89914,52491],{"class":211},[109,89916,130],{"class":126},[109,89918,52496],{"class":278},[109,89920,52482],{"class":126},[109,89922,89923],{"class":111,"line":140},[109,89924,158],{"emptyLinePlaceholder":157},[109,89926,89927,89929,89931],{"class":111,"line":154},[109,89928,1320],{"class":126},[109,89930,52509],{"class":52475},[109,89932,52482],{"class":126},[109,89934,89935,89937,89939,89941,89943,89945],{"class":111,"line":161},[109,89936,53319],{"class":126},[109,89938,52519],{"class":52475},[109,89940,52522],{"class":211},[109,89942,130],{"class":126},[109,89944,52527],{"class":278},[109,89946,52482],{"class":126},[109,89948,89949,89951,89953,89955,89957,89959,89961,89963,89965],{"class":111,"line":167},[109,89950,53319],{"class":126},[109,89952,52519],{"class":52475},[109,89954,16093],{"class":211},[109,89956,130],{"class":126},[109,89958,52566],{"class":278},[109,89960,52546],{"class":211},[109,89962,130],{"class":126},[109,89964,52573],{"class":278},[109,89966,52482],{"class":126},[109,89968,89969,89971,89973,89975,89977],{"class":111,"line":185},[109,89970,53319],{"class":126},[109,89972,52582],{"class":52475},[109,89974,52585],{"class":126},[109,89976,52582],{"class":52475},[109,89978,52482],{"class":126},[109,89980,89981,89983,89985],{"class":111,"line":201},[109,89982,52960],{"class":126},[109,89984,52509],{"class":52475},[109,89986,52482],{"class":126},[109,89988,89989],{"class":111,"line":206},[109,89990,158],{"emptyLinePlaceholder":157},[109,89992,89993,89995,89997],{"class":111,"line":218},[109,89994,1320],{"class":126},[109,89996,52975],{"class":52475},[109,89998,52482],{"class":126},[109,90000,90001,90003,90005,90007,90009],{"class":111,"line":223},[109,90002,53319],{"class":126},[109,90004,19],{"class":52475},[109,90006,54669],{"class":126},[109,90008,19],{"class":52475},[109,90010,52482],{"class":126},[109,90012,90013,90015,90017],{"class":111,"line":229},[109,90014,53319],{"class":126},[109,90016,52988],{"class":52475},[109,90018,52482],{"class":126},[109,90020,90021,90023,90026],{"class":111,"line":244},[109,90022,71259],{"class":122},[109,90024,90025],{"class":211}," fn",[109,90027,215],{"class":126},[109,90029,90030,90033],{"class":111,"line":258},[109,90031,90032],{"class":122},"      try",[109,90034,16745],{"class":126},[109,90036,90037],{"class":111,"line":263},[109,90038,90039],{"class":115},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[109,90041,90042,90044,90046,90048,90050,90052,90054,90057],{"class":111,"line":269},[109,90043,62445],{"class":122},[109,90045,8151],{"class":133},[109,90047,14737],{"class":122},[109,90049,55571],{"class":126},[109,90051,55574],{"class":211},[109,90053,714],{"class":126},[109,90055,90056],{"class":278},"'.p'",[109,90058,1330],{"class":126},[109,90060,90061,90064,90066],{"class":111,"line":304},[109,90062,90063],{"class":126},"        p.style.color ",[109,90065,130],{"class":122},[109,90067,68226],{"class":278},[109,90069,90070,90073,90076],{"class":111,"line":331},[109,90071,90072],{"class":126},"      } ",[109,90074,90075],{"class":122},"catch",[109,90077,90078],{"class":126}," (err) {\n",[109,90080,90081],{"class":111,"line":336},[109,90082,90083],{"class":115},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[109,90085,90086,90089,90091],{"class":111,"line":364},[109,90087,90088],{"class":126},"        console.",[109,90090,59422],{"class":211},[109,90092,90093],{"class":126},"(err.message)\n",[109,90095,90096],{"class":111,"line":391},[109,90097,90098],{"class":115},"        \u002F\u002F 想要中断程序，需要加return\n",[109,90100,90101],{"class":111,"line":396},[109,90102,90103],{"class":115},"        \u002F\u002F return\n",[109,90105,90106],{"class":111,"line":402},[109,90107,90108],{"class":115},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[109,90110,90111,90114,90116,90119,90121,90124],{"class":111,"line":419},[109,90112,90113],{"class":122},"        throw",[109,90115,1001],{"class":122},[109,90117,90118],{"class":211}," Error",[109,90120,714],{"class":126},[109,90122,90123],{"class":278},"'你看看，选择器错误了吧'",[109,90125,1330],{"class":126},[109,90127,90128],{"class":111,"line":435},[109,90129,53573],{"class":126},[109,90131,90132],{"class":111,"line":440},[109,90133,90134],{"class":115},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[109,90136,90137,90140],{"class":111,"line":467},[109,90138,90139],{"class":122},"      finally",[109,90141,16745],{"class":126},[109,90143,90144,90147,90149,90152],{"class":111,"line":494},[109,90145,90146],{"class":211},"        alert",[109,90148,714],{"class":126},[109,90150,90151],{"class":278},"'弹出对话框'",[109,90153,1330],{"class":126},[109,90155,90156],{"class":111,"line":499},[109,90157,53573],{"class":126},[109,90159,90160,90162,90164,90166,90168],{"class":111,"line":526},[109,90161,59419],{"class":126},[109,90163,59422],{"class":211},[109,90165,714],{"class":126},[109,90167,2005],{"class":133},[109,90169,1330],{"class":126},[109,90171,90172],{"class":111,"line":552},[109,90173,158],{"emptyLinePlaceholder":157},[109,90175,90176],{"class":111,"line":557},[109,90177,1361],{"class":126},[109,90179,90180],{"class":111,"line":584},[109,90181,90182],{"class":115},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[109,90184,90185],{"class":111,"line":611},[109,90186,90187],{"class":115},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[109,90189,90190,90193],{"class":111,"line":616},[109,90191,90192],{"class":211},"    fn",[109,90194,803],{"class":126},[109,90196,90197,90199,90201],{"class":111,"line":633},[109,90198,53592],{"class":126},[109,90200,52988],{"class":52475},[109,90202,52482],{"class":126},[109,90204,90205,90207,90209],{"class":111,"line":649},[109,90206,52960],{"class":126},[109,90208,52975],{"class":52475},[109,90210,52482],{"class":126},[109,90212,90213],{"class":111,"line":676},[109,90214,158],{"emptyLinePlaceholder":157},[109,90216,90217,90219,90221],{"class":111,"line":703},[109,90218,52960],{"class":126},[109,90220,51810],{"class":52475},[109,90222,52482],{"class":126},[19,90224,90225],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[765,90227,90228],{"start":140},[30,90229,90230],{},"debugger",[19,90232,90233],{},[938,90234],{"alt":104,"src":90235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90237,90238],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90240,90242],{"id":90241},"_416-处理this","4.16 处理this",[51,90244,90246],{"id":90245},"_4161-this的指向","4.16.1 this的指向",[765,90248,90249],{},[30,90250,90251],{},"普通函数的this",[19,90253,90254],{},[938,90255],{"alt":104,"src":90256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[765,90258,90259],{"start":119},[30,90260,90261],{},"箭头函数的this",[19,90263,90264],{},[938,90265],{"alt":104,"src":90266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90268,90269],{},[938,90270],{"alt":104,"src":90271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90273,90274],{},[938,90275],{"alt":104,"src":90276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[51,90278,90280],{"id":90279},"_4162-this的改变","4.16.2 this的改变",[19,90282,90283],{},"call() apply() bind()",[765,90285,90286],{},[30,90287,90288],{},"call()",[19,90290,90291],{},[938,90292],{"alt":104,"src":90293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90295,90296],{},"两个作用：①调用函数；②改变this指向",[99,90298,90300],{"className":54242,"code":90299,"language":54244,"meta":104,"style":104},"\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",[106,90301,90302,90310,90318,90322,90327,90331,90336,90341,90346,90350,90355,90363],{"__ignoreMap":104},[109,90303,90304,90306,90308],{"class":111,"line":112},[109,90305,1320],{"class":126},[109,90307,52975],{"class":52475},[109,90309,52482],{"class":126},[109,90311,90312,90314,90316],{"class":111,"line":119},[109,90313,53319],{"class":126},[109,90315,52988],{"class":52475},[109,90317,52482],{"class":126},[109,90319,90320],{"class":111,"line":140},[109,90321,72698],{"class":126},[109,90323,90324],{"class":111,"line":154},[109,90325,90326],{"class":126},"      uname: 'pink'\n",[109,90328,90329],{"class":111,"line":161},[109,90330,1361],{"class":126},[109,90332,90333],{"class":111,"line":167},[109,90334,90335],{"class":126},"    function fn(x, y) {\n",[109,90337,90338],{"class":111,"line":185},[109,90339,90340],{"class":126},"      console.log(this)  \u002F\u002Fwindow\n",[109,90342,90343],{"class":111,"line":201},[109,90344,90345],{"class":126},"      console.log(x + y)\n",[109,90347,90348],{"class":111,"line":206},[109,90349,1361],{"class":126},[109,90351,90352],{"class":111,"line":218},[109,90353,90354],{"class":126},"    fn.call(obj, 1, 2)\n",[109,90356,90357,90359,90361],{"class":111,"line":223},[109,90358,53592],{"class":126},[109,90360,52988],{"class":52475},[109,90362,52482],{"class":126},[109,90364,90365,90367,90369],{"class":111,"line":229},[109,90366,52960],{"class":126},[109,90368,52975],{"class":52475},[109,90370,52482],{"class":126},[19,90372,90373],{},[938,90374],{"alt":104,"src":90375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[765,90377,90378],{"start":119},[30,90379,90380],{},"apply()",[19,90382,90383],{},[938,90384],{"alt":104,"src":90385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90387,90296],{},[19,90389,90390],{},"call传递的是普通参数，而apply必须传递的是数组",[99,90392,90394],{"className":51808,"code":90393,"language":51810,"meta":104,"style":104},"\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",[106,90395,90396,90406,90420,90424,90432,90446,90466,90478,90486,90490,90498,90506,90516,90523,90527,90532,90548,90560,90574,90578,90583,90602,90607,90611,90616,90621,90629,90634,90656,90661,90677,90693,90705,90709,90714,90733,90741,90749,90753],{"__ignoreMap":104},[109,90397,90398,90400,90402,90404],{"class":111,"line":112},[109,90399,52472],{"class":126},[109,90401,52476],{"class":52475},[109,90403,52479],{"class":211},[109,90405,52482],{"class":126},[109,90407,90408,90410,90412,90414,90416,90418],{"class":111,"line":119},[109,90409,1320],{"class":126},[109,90411,51810],{"class":52475},[109,90413,52491],{"class":211},[109,90415,130],{"class":126},[109,90417,52496],{"class":278},[109,90419,52482],{"class":126},[109,90421,90422],{"class":111,"line":140},[109,90423,158],{"emptyLinePlaceholder":157},[109,90425,90426,90428,90430],{"class":111,"line":154},[109,90427,1320],{"class":126},[109,90429,52509],{"class":52475},[109,90431,52482],{"class":126},[109,90433,90434,90436,90438,90440,90442,90444],{"class":111,"line":161},[109,90435,53319],{"class":126},[109,90437,52519],{"class":52475},[109,90439,52522],{"class":211},[109,90441,130],{"class":126},[109,90443,52527],{"class":278},[109,90445,52482],{"class":126},[109,90447,90448,90450,90452,90454,90456,90458,90460,90462,90464],{"class":111,"line":167},[109,90449,53319],{"class":126},[109,90451,52519],{"class":52475},[109,90453,16093],{"class":211},[109,90455,130],{"class":126},[109,90457,52566],{"class":278},[109,90459,52546],{"class":211},[109,90461,130],{"class":126},[109,90463,52573],{"class":278},[109,90465,52482],{"class":126},[109,90467,90468,90470,90472,90474,90476],{"class":111,"line":185},[109,90469,53319],{"class":126},[109,90471,52582],{"class":52475},[109,90473,52585],{"class":126},[109,90475,52582],{"class":52475},[109,90477,52482],{"class":126},[109,90479,90480,90482,90484],{"class":111,"line":201},[109,90481,52960],{"class":126},[109,90483,52509],{"class":52475},[109,90485,52482],{"class":126},[109,90487,90488],{"class":111,"line":206},[109,90489,158],{"emptyLinePlaceholder":157},[109,90491,90492,90494,90496],{"class":111,"line":218},[109,90493,1320],{"class":126},[109,90495,52975],{"class":52475},[109,90497,52482],{"class":126},[109,90499,90500,90502,90504],{"class":111,"line":223},[109,90501,53319],{"class":126},[109,90503,52988],{"class":52475},[109,90505,52482],{"class":126},[109,90507,90508,90510,90512,90514],{"class":111,"line":229},[109,90509,619],{"class":122},[109,90511,71146],{"class":133},[109,90513,14737],{"class":122},[109,90515,16745],{"class":126},[109,90517,90518,90520],{"class":111,"line":244},[109,90519,72801],{"class":126},[109,90521,90522],{"class":133},"18\n",[109,90524,90525],{"class":111,"line":258},[109,90526,1361],{"class":126},[109,90528,90529],{"class":111,"line":263},[109,90530,90531],{"class":115},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[109,90533,90534,90536,90538,90540,90542,90544,90546],{"class":111,"line":269},[109,90535,71259],{"class":122},[109,90537,90025],{"class":211},[109,90539,714],{"class":126},[109,90541,2352],{"class":6553},[109,90543,13608],{"class":126},[109,90545,2377],{"class":6553},[109,90547,13615],{"class":126},[109,90549,90550,90552,90554,90556,90558],{"class":111,"line":304},[109,90551,59419],{"class":126},[109,90553,59422],{"class":211},[109,90555,714],{"class":126},[109,90557,88168],{"class":133},[109,90559,1330],{"class":126},[109,90561,90562,90564,90566,90569,90571],{"class":111,"line":331},[109,90563,59419],{"class":126},[109,90565,59422],{"class":211},[109,90567,90568],{"class":126},"(x ",[109,90570,1348],{"class":122},[109,90572,90573],{"class":126}," y)\n",[109,90575,90576],{"class":111,"line":336},[109,90577,1361],{"class":126},[109,90579,90580],{"class":111,"line":364},[109,90581,90582],{"class":115},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[109,90584,90585,90588,90591,90594,90596,90598,90600],{"class":111,"line":391},[109,90586,90587],{"class":126},"    fn.",[109,90589,90590],{"class":211},"apply",[109,90592,90593],{"class":126},"(obj, [",[109,90595,1755],{"class":133},[109,90597,13608],{"class":126},[109,90599,1618],{"class":133},[109,90601,5994],{"class":126},[109,90603,90604],{"class":111,"line":396},[109,90605,90606],{"class":115},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[109,90608,90609],{"class":111,"line":402},[109,90610,158],{"emptyLinePlaceholder":157},[109,90612,90613],{"class":111,"line":419},[109,90614,90615],{"class":115},"    \u002F\u002F 使用场景：求数组最大值\n",[109,90617,90618],{"class":111,"line":435},[109,90619,90620],{"class":115},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[109,90622,90623,90626],{"class":111,"line":440},[109,90624,90625],{"class":115},"    \u002F\u002F console.log(max)",[109,90627,90628],{"class":115},"   \u002F\u002F3\n",[109,90630,90631],{"class":111,"line":467},[109,90632,90633],{"class":115},"    \u002F\u002F 指向空或者Math都是可以的\n",[109,90635,90636,90638,90640,90642,90644,90646,90648,90650,90652,90654],{"class":111,"line":494},[109,90637,619],{"class":122},[109,90639,58870],{"class":133},[109,90641,14737],{"class":122},[109,90643,53401],{"class":126},[109,90645,1351],{"class":133},[109,90647,13608],{"class":126},[109,90649,2036],{"class":133},[109,90651,13608],{"class":126},[109,90653,2067],{"class":133},[109,90655,34421],{"class":126},[109,90657,90658],{"class":111,"line":499},[109,90659,90660],{"class":115},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[109,90662,90663,90665,90667,90669,90672,90674],{"class":111,"line":526},[109,90664,619],{"class":122},[109,90666,7282],{"class":133},[109,90668,14737],{"class":122},[109,90670,90671],{"class":126}," Math.max.",[109,90673,90590],{"class":211},[109,90675,90676],{"class":126},"(Math, arr)\n",[109,90678,90679,90681,90684,90686,90689,90691],{"class":111,"line":552},[109,90680,619],{"class":122},[109,90682,90683],{"class":133}," min",[109,90685,14737],{"class":122},[109,90687,90688],{"class":126}," Math.min.",[109,90690,90590],{"class":211},[109,90692,90676],{"class":126},[109,90694,90695,90697,90699,90702],{"class":111,"line":557},[109,90696,74928],{"class":126},[109,90698,59422],{"class":211},[109,90700,90701],{"class":126},"(max, min)     ",[109,90703,90704],{"class":115},"\u002F\u002F100,4\n",[109,90706,90707],{"class":111,"line":584},[109,90708,158],{"emptyLinePlaceholder":157},[109,90710,90711],{"class":111,"line":611},[109,90712,90713],{"class":115},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[109,90715,90716,90718,90720,90723,90725,90727,90730],{"class":111,"line":616},[109,90717,74928],{"class":126},[109,90719,59422],{"class":211},[109,90721,90722],{"class":126},"(Max.",[109,90724,7345],{"class":211},[109,90726,714],{"class":126},[109,90728,90729],{"class":122},"...",[109,90731,90732],{"class":126},"arr))\n",[109,90734,90735,90737,90739],{"class":111,"line":633},[109,90736,53592],{"class":126},[109,90738,52988],{"class":52475},[109,90740,52482],{"class":126},[109,90742,90743,90745,90747],{"class":111,"line":649},[109,90744,52960],{"class":126},[109,90746,52975],{"class":52475},[109,90748,52482],{"class":126},[109,90750,90751],{"class":111,"line":676},[109,90752,158],{"emptyLinePlaceholder":157},[109,90754,90755,90757,90759],{"class":111,"line":703},[109,90756,52960],{"class":126},[109,90758,51810],{"class":52475},[109,90760,52482],{"class":126},[19,90762,90763],{},[938,90764],{"alt":104,"src":90765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[765,90767,90768],{"start":140},[30,90769,90770],{},"bind()",[19,90772,90773],{},[938,90774],{"alt":104,"src":90775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90777,90778],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90780,90781],{},"bind的语法跟call很相似",[99,90783,90785],{"className":54242,"code":90784,"language":54244,"meta":104,"style":104},"\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",[106,90786,90787,90795,90803,90807,90812,90816,90820,90825,90829,90834,90839,90844,90849,90854,90859,90864,90868,90876],{"__ignoreMap":104},[109,90788,90789,90791,90793],{"class":111,"line":112},[109,90790,1320],{"class":126},[109,90792,52975],{"class":52475},[109,90794,52482],{"class":126},[109,90796,90797,90799,90801],{"class":111,"line":119},[109,90798,53319],{"class":126},[109,90800,52988],{"class":52475},[109,90802,52482],{"class":126},[109,90804,90805],{"class":111,"line":140},[109,90806,72698],{"class":126},[109,90808,90809],{"class":111,"line":154},[109,90810,90811],{"class":126},"      age: 18\n",[109,90813,90814],{"class":111,"line":161},[109,90815,1361],{"class":126},[109,90817,90818],{"class":111,"line":167},[109,90819,78318],{"class":126},[109,90821,90822],{"class":111,"line":185},[109,90823,90824],{"class":126},"      console.log(this)\n",[109,90826,90827],{"class":111,"line":201},[109,90828,1361],{"class":126},[109,90830,90831],{"class":111,"line":206},[109,90832,90833],{"class":126},"    \u002F\u002F 1.bind 不会调用函数\n",[109,90835,90836],{"class":111,"line":218},[109,90837,90838],{"class":126},"    \u002F\u002F 2.bind能改变this的指向\n",[109,90840,90841],{"class":111,"line":223},[109,90842,90843],{"class":126},"    fn.bind()\n",[109,90845,90846],{"class":111,"line":229},[109,90847,90848],{"class":126},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[109,90850,90851],{"class":111,"line":244},[109,90852,90853],{"class":126},"    const fun = fn.bind(obj)\n",[109,90855,90856],{"class":111,"line":258},[109,90857,90858],{"class":126},"    \u002F\u002F console.log(fun)\n",[109,90860,90861],{"class":111,"line":263},[109,90862,90863],{"class":126},"    \u002F\u002F 调用,查看this的指向\n",[109,90865,90866],{"class":111,"line":269},[109,90867,53826],{"class":126},[109,90869,90870,90872,90874],{"class":111,"line":304},[109,90871,53592],{"class":126},[109,90873,52988],{"class":52475},[109,90875,52482],{"class":126},[109,90877,90878,90880,90882],{"class":111,"line":331},[109,90879,52960],{"class":126},[109,90881,52975],{"class":52475},[109,90883,52482],{"class":126},[19,90885,90886],{},[938,90887],{"alt":104,"src":90888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[765,90890,90891],{"start":154},[30,90892,90893],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[99,90895,90897],{"className":54242,"code":90896,"language":54244,"meta":104,"style":104},"\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",[106,90898,90899,90907,90920,90928,90933,90937,90942,90947,90952,90957,90962,90967,90972,90977,90981,90989],{"__ignoreMap":104},[109,90900,90901,90903,90905],{"class":111,"line":112},[109,90902,1320],{"class":126},[109,90904,52975],{"class":52475},[109,90906,52482],{"class":126},[109,90908,90909,90911,90913,90916,90918],{"class":111,"line":119},[109,90910,53319],{"class":126},[109,90912,55062],{"class":52475},[109,90914,90915],{"class":126},">禁用\u003C\u002F",[109,90917,55062],{"class":52475},[109,90919,52482],{"class":126},[109,90921,90922,90924,90926],{"class":111,"line":140},[109,90923,53319],{"class":126},[109,90925,52988],{"class":52475},[109,90927,52482],{"class":126},[109,90929,90930],{"class":111,"line":154},[109,90931,90932],{"class":126},"    const btn = document.querySelector('button')\n",[109,90934,90935],{"class":111,"line":161},[109,90936,60191],{"class":126},[109,90938,90939],{"class":111,"line":167},[109,90940,90941],{"class":126},"      this.disabled = true\n",[109,90943,90944],{"class":111,"line":185},[109,90945,90946],{"class":126},"      \u002F\u002F 定时器是window进行调用的\n",[109,90948,90949],{"class":111,"line":201},[109,90950,90951],{"class":126},"      setTimeout(function () {\n",[109,90953,90954],{"class":111,"line":206},[109,90955,90956],{"class":126},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[109,90958,90959],{"class":111,"line":218},[109,90960,90961],{"class":126},"        this.disabled = false\n",[109,90963,90964],{"class":111,"line":223},[109,90965,90966],{"class":126},"      }.bind(this), 2000)\n",[109,90968,90969],{"class":111,"line":229},[109,90970,90971],{"class":126},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[109,90973,90974],{"class":111,"line":244},[109,90975,90976],{"class":126},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[109,90978,90979],{"class":111,"line":258},[109,90980,34636],{"class":126},[109,90982,90983,90985,90987],{"class":111,"line":263},[109,90984,53592],{"class":126},[109,90986,52988],{"class":52475},[109,90988,52482],{"class":126},[109,90990,90991,90993,90995],{"class":111,"line":269},[109,90992,52960],{"class":126},[109,90994,52975],{"class":52475},[109,90996,52482],{"class":126},[765,90998,90999],{"start":161},[30,91000,23126],{},[19,91002,91003],{},[938,91004],{"alt":104,"src":91005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91007,91009],{"id":91008},"_417-性能优化","4.17 性能优化",[51,91011,91013],{"id":91012},"_4171-防抖","4.17.1 防抖",[19,91015,91016],{},[938,91017],{"alt":104,"src":91018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91020,91021],{},[23,91022,91023],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91025,91026],{},"防抖实现方式：",[27,91028,91029],{},[30,91030,91031],{},"lodash 提供了防抖处理",[19,91033,91034],{},"_.debounce(func,[wait=0],[options={}])",[19,91036,91037],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[99,91039,91041],{"className":51808,"code":91040,"language":51810,"meta":104,"style":104},"\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",[106,91042,91043,91053,91067,91071,91079,91093,91113,91125,91133,91139,91149,91161,91173,91184,91196,91206,91216,91229,91233,91241,91249,91253,91261,91279,91297,91305,91324,91334,91343,91354,91359,91363,91368,91373,91378,91403,91411,91419,91423],{"__ignoreMap":104},[109,91044,91045,91047,91049,91051],{"class":111,"line":112},[109,91046,52472],{"class":126},[109,91048,52476],{"class":52475},[109,91050,52479],{"class":211},[109,91052,52482],{"class":126},[109,91054,91055,91057,91059,91061,91063,91065],{"class":111,"line":119},[109,91056,1320],{"class":126},[109,91058,51810],{"class":52475},[109,91060,52491],{"class":211},[109,91062,130],{"class":126},[109,91064,52496],{"class":278},[109,91066,52482],{"class":126},[109,91068,91069],{"class":111,"line":140},[109,91070,158],{"emptyLinePlaceholder":157},[109,91072,91073,91075,91077],{"class":111,"line":154},[109,91074,1320],{"class":126},[109,91076,52509],{"class":52475},[109,91078,52482],{"class":126},[109,91080,91081,91083,91085,91087,91089,91091],{"class":111,"line":161},[109,91082,53319],{"class":126},[109,91084,52519],{"class":52475},[109,91086,52522],{"class":211},[109,91088,130],{"class":126},[109,91090,52527],{"class":278},[109,91092,52482],{"class":126},[109,91094,91095,91097,91099,91101,91103,91105,91107,91109,91111],{"class":111,"line":167},[109,91096,53319],{"class":126},[109,91098,52519],{"class":52475},[109,91100,16093],{"class":211},[109,91102,130],{"class":126},[109,91104,52566],{"class":278},[109,91106,52546],{"class":211},[109,91108,130],{"class":126},[109,91110,52573],{"class":278},[109,91112,52482],{"class":126},[109,91114,91115,91117,91119,91121,91123],{"class":111,"line":185},[109,91116,53319],{"class":126},[109,91118,52582],{"class":52475},[109,91120,52585],{"class":126},[109,91122,52582],{"class":52475},[109,91124,52482],{"class":126},[109,91126,91127,91129,91131],{"class":111,"line":201},[109,91128,53319],{"class":126},[109,91130,1467],{"class":52475},[109,91132,52482],{"class":126},[109,91134,91135,91137],{"class":111,"line":206},[109,91136,55927],{"class":211},[109,91138,16745],{"class":126},[109,91140,91141,91143,91145,91147],{"class":111,"line":218},[109,91142,73771],{"class":133},[109,91144,52612],{"class":126},[109,91146,61680],{"class":133},[109,91148,137],{"class":126},[109,91150,91151,91153,91155,91157,91159],{"class":111,"line":223},[109,91152,55946],{"class":133},[109,91154,52612],{"class":126},[109,91156,3098],{"class":133},[109,91158,52667],{"class":122},[109,91160,137],{"class":126},[109,91162,91163,91165,91167,91169,91171],{"class":111,"line":229},[109,91164,55960],{"class":133},[109,91166,52612],{"class":126},[109,91168,3098],{"class":133},[109,91170,52667],{"class":122},[109,91172,137],{"class":126},[109,91174,91175,91177,91179,91182],{"class":111,"line":244},[109,91176,56059],{"class":133},[109,91178,52612],{"class":126},[109,91180,91181],{"class":133},"gray",[109,91183,137],{"class":126},[109,91185,91186,91188,91190,91192,91194],{"class":111,"line":258},[109,91187,56097],{"class":133},[109,91189,52612],{"class":126},[109,91191,2357],{"class":133},[109,91193,52667],{"class":122},[109,91195,137],{"class":126},[109,91197,91198,91200,91202,91204],{"class":111,"line":263},[109,91199,58591],{"class":133},[109,91201,52612],{"class":126},[109,91203,62017],{"class":133},[109,91205,137],{"class":126},[109,91207,91208,91210,91212,91214],{"class":111,"line":269},[109,91209,58461],{"class":133},[109,91211,52612],{"class":126},[109,91213,52767],{"class":133},[109,91215,137],{"class":126},[109,91217,91218,91221,91223,91225,91227],{"class":111,"line":304},[109,91219,91220],{"class":133},"      padding-top",[109,91222,52612],{"class":126},[109,91224,1856],{"class":133},[109,91226,52667],{"class":122},[109,91228,137],{"class":126},[109,91230,91231],{"class":111,"line":331},[109,91232,1361],{"class":126},[109,91234,91235,91237,91239],{"class":111,"line":336},[109,91236,53592],{"class":126},[109,91238,1467],{"class":52475},[109,91240,52482],{"class":126},[109,91242,91243,91245,91247],{"class":111,"line":364},[109,91244,52960],{"class":126},[109,91246,52509],{"class":52475},[109,91248,52482],{"class":126},[109,91250,91251],{"class":111,"line":391},[109,91252,158],{"emptyLinePlaceholder":157},[109,91254,91255,91257,91259],{"class":111,"line":396},[109,91256,1320],{"class":126},[109,91258,52975],{"class":52475},[109,91260,52482],{"class":126},[109,91262,91263,91265,91267,91269,91271,91273,91275,91277],{"class":111,"line":402},[109,91264,53319],{"class":126},[109,91266,52786],{"class":52475},[109,91268,54661],{"class":211},[109,91270,130],{"class":126},[109,91272,54666],{"class":278},[109,91274,56489],{"class":126},[109,91276,52786],{"class":52475},[109,91278,52482],{"class":126},[109,91280,91281,91283,91285,91287,91289,91291,91293,91295],{"class":111,"line":419},[109,91282,53319],{"class":126},[109,91284,52988],{"class":52475},[109,91286,56414],{"class":211},[109,91288,130],{"class":126},[109,91290,89449],{"class":278},[109,91292,56489],{"class":126},[109,91294,52988],{"class":52475},[109,91296,52482],{"class":126},[109,91298,91299,91301,91303],{"class":111,"line":435},[109,91300,53319],{"class":126},[109,91302,52988],{"class":52475},[109,91304,52482],{"class":126},[109,91306,91307,91309,91311,91313,91315,91317,91319,91322],{"class":111,"line":440},[109,91308,619],{"class":122},[109,91310,88108],{"class":133},[109,91312,14737],{"class":122},[109,91314,55571],{"class":126},[109,91316,55574],{"class":211},[109,91318,714],{"class":126},[109,91320,91321],{"class":278},"'.box'",[109,91323,1330],{"class":126},[109,91325,91326,91328,91330,91332],{"class":111,"line":467},[109,91327,53394],{"class":122},[109,91329,10756],{"class":126},[109,91331,130],{"class":122},[109,91333,48508],{"class":133},[109,91335,91336,91338,91341],{"class":111,"line":494},[109,91337,71259],{"class":122},[109,91339,91340],{"class":211}," mouseMove",[109,91342,215],{"class":126},[109,91344,91345,91348,91350,91352],{"class":111,"line":499},[109,91346,91347],{"class":126},"      box.innerHTML ",[109,91349,130],{"class":122},[109,91351,1309],{"class":126},[109,91353,4050],{"class":122},[109,91355,91356],{"class":111,"line":526},[109,91357,91358],{"class":115},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[109,91360,91361],{"class":111,"line":552},[109,91362,1361],{"class":126},[109,91364,91365],{"class":111,"line":557},[109,91366,91367],{"class":115},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[109,91369,91370],{"class":111,"line":584},[109,91371,91372],{"class":115},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[109,91374,91375],{"class":111,"line":611},[109,91376,91377],{"class":115},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[109,91379,91380,91383,91385,91387,91390,91393,91396,91399,91401],{"class":111,"line":616},[109,91381,91382],{"class":126},"    box.",[109,91384,58988],{"class":211},[109,91386,714],{"class":126},[109,91388,91389],{"class":278},"'mousemove'",[109,91391,91392],{"class":126},", _.",[109,91394,91395],{"class":211},"debounce",[109,91397,91398],{"class":126},"(mouseMove, ",[109,91400,66249],{"class":133},[109,91402,31672],{"class":126},[109,91404,91405,91407,91409],{"class":111,"line":633},[109,91406,53592],{"class":126},[109,91408,52988],{"class":52475},[109,91410,52482],{"class":126},[109,91412,91413,91415,91417],{"class":111,"line":649},[109,91414,52960],{"class":126},[109,91416,52975],{"class":52475},[109,91418,52482],{"class":126},[109,91420,91421],{"class":111,"line":676},[109,91422,158],{"emptyLinePlaceholder":157},[109,91424,91425,91427,91429],{"class":111,"line":703},[109,91426,52960],{"class":126},[109,91428,51810],{"class":52475},[109,91430,52482],{"class":126},[27,91432,91433],{},[30,91434,91435],{},"手写一个防抖函数来处理",[19,91437,91438],{},"防抖的核心就是利用定时器来实现的：",[19,91440,91441],{},"①声明一个定时器变量",[19,91443,91444],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91446,91447],{},"③如果没有定时器则开启定时器，记得存到变量里面",[99,91449,91451],{"className":51808,"code":91450,"language":51810,"meta":104,"style":104},"\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",[106,91452,91453,91463,91477,91481,91489,91503,91523,91535,91543,91549,91559,91571,91583,91593,91605,91615,91625,91637,91641,91649,91657,91661,91669,91687,91705,91713,91731,91741,91749,91759,91763,91767,91771,91776,91781,91786,91791,91796,91801,91819,91826,91831,91839,91844,91857,91873,91883,91888,91892,91896,91916,91920,91925,91930,91935,91940,91948,91956,91960],{"__ignoreMap":104},[109,91454,91455,91457,91459,91461],{"class":111,"line":112},[109,91456,52472],{"class":126},[109,91458,52476],{"class":52475},[109,91460,52479],{"class":211},[109,91462,52482],{"class":126},[109,91464,91465,91467,91469,91471,91473,91475],{"class":111,"line":119},[109,91466,1320],{"class":126},[109,91468,51810],{"class":52475},[109,91470,52491],{"class":211},[109,91472,130],{"class":126},[109,91474,52496],{"class":278},[109,91476,52482],{"class":126},[109,91478,91479],{"class":111,"line":140},[109,91480,158],{"emptyLinePlaceholder":157},[109,91482,91483,91485,91487],{"class":111,"line":154},[109,91484,1320],{"class":126},[109,91486,52509],{"class":52475},[109,91488,52482],{"class":126},[109,91490,91491,91493,91495,91497,91499,91501],{"class":111,"line":161},[109,91492,53319],{"class":126},[109,91494,52519],{"class":52475},[109,91496,52522],{"class":211},[109,91498,130],{"class":126},[109,91500,52527],{"class":278},[109,91502,52482],{"class":126},[109,91504,91505,91507,91509,91511,91513,91515,91517,91519,91521],{"class":111,"line":167},[109,91506,53319],{"class":126},[109,91508,52519],{"class":52475},[109,91510,16093],{"class":211},[109,91512,130],{"class":126},[109,91514,52566],{"class":278},[109,91516,52546],{"class":211},[109,91518,130],{"class":126},[109,91520,52573],{"class":278},[109,91522,52482],{"class":126},[109,91524,91525,91527,91529,91531,91533],{"class":111,"line":185},[109,91526,53319],{"class":126},[109,91528,52582],{"class":52475},[109,91530,52585],{"class":126},[109,91532,52582],{"class":52475},[109,91534,52482],{"class":126},[109,91536,91537,91539,91541],{"class":111,"line":201},[109,91538,53319],{"class":126},[109,91540,1467],{"class":52475},[109,91542,52482],{"class":126},[109,91544,91545,91547],{"class":111,"line":206},[109,91546,55927],{"class":211},[109,91548,16745],{"class":126},[109,91550,91551,91553,91555,91557],{"class":111,"line":218},[109,91552,73771],{"class":133},[109,91554,52612],{"class":126},[109,91556,61680],{"class":133},[109,91558,137],{"class":126},[109,91560,91561,91563,91565,91567,91569],{"class":111,"line":223},[109,91562,55946],{"class":133},[109,91564,52612],{"class":126},[109,91566,3098],{"class":133},[109,91568,52667],{"class":122},[109,91570,137],{"class":126},[109,91572,91573,91575,91577,91579,91581],{"class":111,"line":229},[109,91574,55960],{"class":133},[109,91576,52612],{"class":126},[109,91578,3098],{"class":133},[109,91580,52667],{"class":122},[109,91582,137],{"class":126},[109,91584,91585,91587,91589,91591],{"class":111,"line":244},[109,91586,56059],{"class":133},[109,91588,52612],{"class":126},[109,91590,91181],{"class":133},[109,91592,137],{"class":126},[109,91594,91595,91597,91599,91601,91603],{"class":111,"line":258},[109,91596,56097],{"class":133},[109,91598,52612],{"class":126},[109,91600,2357],{"class":133},[109,91602,52667],{"class":122},[109,91604,137],{"class":126},[109,91606,91607,91609,91611,91613],{"class":111,"line":263},[109,91608,58591],{"class":133},[109,91610,52612],{"class":126},[109,91612,62017],{"class":133},[109,91614,137],{"class":126},[109,91616,91617,91619,91621,91623],{"class":111,"line":269},[109,91618,58461],{"class":133},[109,91620,52612],{"class":126},[109,91622,52767],{"class":133},[109,91624,137],{"class":126},[109,91626,91627,91629,91631,91633,91635],{"class":111,"line":304},[109,91628,91220],{"class":133},[109,91630,52612],{"class":126},[109,91632,1856],{"class":133},[109,91634,52667],{"class":122},[109,91636,137],{"class":126},[109,91638,91639],{"class":111,"line":331},[109,91640,1361],{"class":126},[109,91642,91643,91645,91647],{"class":111,"line":336},[109,91644,53592],{"class":126},[109,91646,1467],{"class":52475},[109,91648,52482],{"class":126},[109,91650,91651,91653,91655],{"class":111,"line":364},[109,91652,52960],{"class":126},[109,91654,52509],{"class":52475},[109,91656,52482],{"class":126},[109,91658,91659],{"class":111,"line":391},[109,91660,158],{"emptyLinePlaceholder":157},[109,91662,91663,91665,91667],{"class":111,"line":396},[109,91664,1320],{"class":126},[109,91666,52975],{"class":52475},[109,91668,52482],{"class":126},[109,91670,91671,91673,91675,91677,91679,91681,91683,91685],{"class":111,"line":402},[109,91672,53319],{"class":126},[109,91674,52786],{"class":52475},[109,91676,54661],{"class":211},[109,91678,130],{"class":126},[109,91680,54666],{"class":278},[109,91682,56489],{"class":126},[109,91684,52786],{"class":52475},[109,91686,52482],{"class":126},[109,91688,91689,91691,91693,91695,91697,91699,91701,91703],{"class":111,"line":419},[109,91690,53319],{"class":126},[109,91692,52988],{"class":52475},[109,91694,56414],{"class":211},[109,91696,130],{"class":126},[109,91698,89449],{"class":278},[109,91700,56489],{"class":126},[109,91702,52988],{"class":52475},[109,91704,52482],{"class":126},[109,91706,91707,91709,91711],{"class":111,"line":435},[109,91708,53319],{"class":126},[109,91710,52988],{"class":52475},[109,91712,52482],{"class":126},[109,91714,91715,91717,91719,91721,91723,91725,91727,91729],{"class":111,"line":440},[109,91716,619],{"class":122},[109,91718,88108],{"class":133},[109,91720,14737],{"class":122},[109,91722,55571],{"class":126},[109,91724,55574],{"class":211},[109,91726,714],{"class":126},[109,91728,91321],{"class":278},[109,91730,1330],{"class":126},[109,91732,91733,91735,91737,91739],{"class":111,"line":467},[109,91734,53394],{"class":122},[109,91736,10756],{"class":126},[109,91738,130],{"class":122},[109,91740,48508],{"class":133},[109,91742,91743,91745,91747],{"class":111,"line":494},[109,91744,71259],{"class":122},[109,91746,91340],{"class":211},[109,91748,215],{"class":126},[109,91750,91751,91753,91755,91757],{"class":111,"line":499},[109,91752,91347],{"class":126},[109,91754,130],{"class":122},[109,91756,1309],{"class":126},[109,91758,4050],{"class":122},[109,91760,91761],{"class":111,"line":526},[109,91762,91358],{"class":115},[109,91764,91765],{"class":111,"line":552},[109,91766,1361],{"class":126},[109,91768,91769],{"class":111,"line":557},[109,91770,91367],{"class":115},[109,91772,91773],{"class":111,"line":584},[109,91774,91775],{"class":115},"    \u002F\u002F 手写防抖函数\n",[109,91777,91778],{"class":111,"line":611},[109,91779,91780],{"class":115},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[109,91782,91783],{"class":111,"line":616},[109,91784,91785],{"class":115},"    \u002F\u002F 1.声明定时器变量\n",[109,91787,91788],{"class":111,"line":633},[109,91789,91790],{"class":115},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[109,91792,91793],{"class":111,"line":649},[109,91794,91795],{"class":115},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[109,91797,91798],{"class":111,"line":676},[109,91799,91800],{"class":115},"    \u002F\u002F 4.定时器里面写函数调用\n",[109,91802,91803,91805,91808,91810,91813,91815,91817],{"class":111,"line":703},[109,91804,71259],{"class":122},[109,91806,91807],{"class":211}," debounce",[109,91809,714],{"class":126},[109,91811,91812],{"class":6553},"fn",[109,91814,13608],{"class":126},[109,91816,2252],{"class":6553},[109,91818,13615],{"class":126},[109,91820,91821,91823],{"class":111,"line":708},[109,91822,80947],{"class":122},[109,91824,91825],{"class":126}," timer\n",[109,91827,91828],{"class":111,"line":723},[109,91829,91830],{"class":115},"      \u002F\u002F return 返回一个匿名函数\n",[109,91832,91833,91835,91837],{"class":111,"line":728},[109,91834,75157],{"class":122},[109,91836,60093],{"class":122},[109,91838,55627],{"class":126},[109,91840,91841],{"class":111,"line":739},[109,91842,91843],{"class":115},"        \u002F\u002F 这里边写第二三四步\n",[109,91845,91846,91848,91851,91854],{"class":111,"line":9352},[109,91847,3852],{"class":122},[109,91849,91850],{"class":126}," (timer) ",[109,91852,91853],{"class":211},"clearTimeout",[109,91855,91856],{"class":126},"(timer)\n",[109,91858,91859,91862,91864,91867,91869,91871],{"class":111,"line":9364},[109,91860,91861],{"class":126},"        timer ",[109,91863,130],{"class":122},[109,91865,91866],{"class":211}," setTimeout",[109,91868,714],{"class":126},[109,91870,55624],{"class":122},[109,91872,55627],{"class":126},[109,91874,91875,91878,91880],{"class":111,"line":9376},[109,91876,91877],{"class":211},"          fn",[109,91879,14223],{"class":126},[109,91881,91882],{"class":115},"\u002F\u002F加小括号调用fn }, t)\n",[109,91884,91885],{"class":111,"line":11034},[109,91886,91887],{"class":126},"        }, t)\n",[109,91889,91890],{"class":111,"line":11059},[109,91891,53573],{"class":126},[109,91893,91894],{"class":111,"line":11082},[109,91895,1361],{"class":126},[109,91897,91898,91900,91902,91904,91906,91908,91910,91912,91914],{"class":111,"line":11106},[109,91899,91382],{"class":126},[109,91901,58988],{"class":211},[109,91903,714],{"class":126},[109,91905,91389],{"class":278},[109,91907,13608],{"class":126},[109,91909,91395],{"class":211},[109,91911,91398],{"class":126},[109,91913,66249],{"class":133},[109,91915,31672],{"class":126},[109,91917,91918],{"class":111,"line":11111},[109,91919,158],{"emptyLinePlaceholder":157},[109,91921,91922],{"class":111,"line":11116},[109,91923,91924],{"class":115},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[109,91926,91927],{"class":111,"line":11121},[109,91928,91929],{"class":115},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[109,91931,91932],{"class":111,"line":11130},[109,91933,91934],{"class":115},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[109,91936,91937],{"class":111,"line":11135},[109,91938,91939],{"class":115},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[109,91941,91942,91944,91946],{"class":111,"line":11141},[109,91943,53592],{"class":126},[109,91945,52988],{"class":52475},[109,91947,52482],{"class":126},[109,91949,91950,91952,91954],{"class":111,"line":11162},[109,91951,52960],{"class":126},[109,91953,52975],{"class":52475},[109,91955,52482],{"class":126},[109,91957,91958],{"class":111,"line":11168},[109,91959,158],{"emptyLinePlaceholder":157},[109,91961,91962,91964,91966],{"class":111,"line":11182},[109,91963,52960],{"class":126},[109,91965,51810],{"class":52475},[109,91967,52482],{"class":126},[51,91969,91971],{"id":91970},"_4172-节流","4.17.2 节流",[19,91973,91974],{},[938,91975],{"alt":104,"src":91976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91978,91979],{},[938,91980],{"alt":104,"src":91981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91983,91984],{},[23,91985,91986],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91988,91989],{},"实现方式：",[27,91991,91992],{},[30,91993,91994],{},"lodash 提供的节流函数来处理",[19,91996,91997],{},"_.throttle(func,[wait=0],[options=])",[19,91999,92000],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[99,92002,92004],{"className":51808,"code":92003,"language":51810,"meta":104,"style":104},"\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",[106,92005,92006,92016,92030,92034,92042,92056,92076,92088,92096,92102,92112,92124,92136,92146,92158,92168,92178,92190,92194,92202,92210,92214,92222,92240,92258,92266,92284,92294,92302,92312,92316,92320,92324,92329,92334,92355,92363,92371,92375],{"__ignoreMap":104},[109,92007,92008,92010,92012,92014],{"class":111,"line":112},[109,92009,52472],{"class":126},[109,92011,52476],{"class":52475},[109,92013,52479],{"class":211},[109,92015,52482],{"class":126},[109,92017,92018,92020,92022,92024,92026,92028],{"class":111,"line":119},[109,92019,1320],{"class":126},[109,92021,51810],{"class":52475},[109,92023,52491],{"class":211},[109,92025,130],{"class":126},[109,92027,52496],{"class":278},[109,92029,52482],{"class":126},[109,92031,92032],{"class":111,"line":140},[109,92033,158],{"emptyLinePlaceholder":157},[109,92035,92036,92038,92040],{"class":111,"line":154},[109,92037,1320],{"class":126},[109,92039,52509],{"class":52475},[109,92041,52482],{"class":126},[109,92043,92044,92046,92048,92050,92052,92054],{"class":111,"line":161},[109,92045,53319],{"class":126},[109,92047,52519],{"class":52475},[109,92049,52522],{"class":211},[109,92051,130],{"class":126},[109,92053,52527],{"class":278},[109,92055,52482],{"class":126},[109,92057,92058,92060,92062,92064,92066,92068,92070,92072,92074],{"class":111,"line":167},[109,92059,53319],{"class":126},[109,92061,52519],{"class":52475},[109,92063,16093],{"class":211},[109,92065,130],{"class":126},[109,92067,52566],{"class":278},[109,92069,52546],{"class":211},[109,92071,130],{"class":126},[109,92073,52573],{"class":278},[109,92075,52482],{"class":126},[109,92077,92078,92080,92082,92084,92086],{"class":111,"line":185},[109,92079,53319],{"class":126},[109,92081,52582],{"class":52475},[109,92083,52585],{"class":126},[109,92085,52582],{"class":52475},[109,92087,52482],{"class":126},[109,92089,92090,92092,92094],{"class":111,"line":201},[109,92091,53319],{"class":126},[109,92093,1467],{"class":52475},[109,92095,52482],{"class":126},[109,92097,92098,92100],{"class":111,"line":206},[109,92099,55927],{"class":211},[109,92101,16745],{"class":126},[109,92103,92104,92106,92108,92110],{"class":111,"line":218},[109,92105,73771],{"class":133},[109,92107,52612],{"class":126},[109,92109,61680],{"class":133},[109,92111,137],{"class":126},[109,92113,92114,92116,92118,92120,92122],{"class":111,"line":223},[109,92115,55946],{"class":133},[109,92117,52612],{"class":126},[109,92119,3098],{"class":133},[109,92121,52667],{"class":122},[109,92123,137],{"class":126},[109,92125,92126,92128,92130,92132,92134],{"class":111,"line":229},[109,92127,55960],{"class":133},[109,92129,52612],{"class":126},[109,92131,3098],{"class":133},[109,92133,52667],{"class":122},[109,92135,137],{"class":126},[109,92137,92138,92140,92142,92144],{"class":111,"line":244},[109,92139,56059],{"class":133},[109,92141,52612],{"class":126},[109,92143,91181],{"class":133},[109,92145,137],{"class":126},[109,92147,92148,92150,92152,92154,92156],{"class":111,"line":258},[109,92149,56097],{"class":133},[109,92151,52612],{"class":126},[109,92153,2357],{"class":133},[109,92155,52667],{"class":122},[109,92157,137],{"class":126},[109,92159,92160,92162,92164,92166],{"class":111,"line":263},[109,92161,58591],{"class":133},[109,92163,52612],{"class":126},[109,92165,62017],{"class":133},[109,92167,137],{"class":126},[109,92169,92170,92172,92174,92176],{"class":111,"line":269},[109,92171,58461],{"class":133},[109,92173,52612],{"class":126},[109,92175,52767],{"class":133},[109,92177,137],{"class":126},[109,92179,92180,92182,92184,92186,92188],{"class":111,"line":304},[109,92181,91220],{"class":133},[109,92183,52612],{"class":126},[109,92185,1856],{"class":133},[109,92187,52667],{"class":122},[109,92189,137],{"class":126},[109,92191,92192],{"class":111,"line":331},[109,92193,1361],{"class":126},[109,92195,92196,92198,92200],{"class":111,"line":336},[109,92197,53592],{"class":126},[109,92199,1467],{"class":52475},[109,92201,52482],{"class":126},[109,92203,92204,92206,92208],{"class":111,"line":364},[109,92205,52960],{"class":126},[109,92207,52509],{"class":52475},[109,92209,52482],{"class":126},[109,92211,92212],{"class":111,"line":391},[109,92213,158],{"emptyLinePlaceholder":157},[109,92215,92216,92218,92220],{"class":111,"line":396},[109,92217,1320],{"class":126},[109,92219,52975],{"class":52475},[109,92221,52482],{"class":126},[109,92223,92224,92226,92228,92230,92232,92234,92236,92238],{"class":111,"line":402},[109,92225,53319],{"class":126},[109,92227,52786],{"class":52475},[109,92229,54661],{"class":211},[109,92231,130],{"class":126},[109,92233,54666],{"class":278},[109,92235,56489],{"class":126},[109,92237,52786],{"class":52475},[109,92239,52482],{"class":126},[109,92241,92242,92244,92246,92248,92250,92252,92254,92256],{"class":111,"line":419},[109,92243,53319],{"class":126},[109,92245,52988],{"class":52475},[109,92247,56414],{"class":211},[109,92249,130],{"class":126},[109,92251,89449],{"class":278},[109,92253,56489],{"class":126},[109,92255,52988],{"class":52475},[109,92257,52482],{"class":126},[109,92259,92260,92262,92264],{"class":111,"line":435},[109,92261,53319],{"class":126},[109,92263,52988],{"class":52475},[109,92265,52482],{"class":126},[109,92267,92268,92270,92272,92274,92276,92278,92280,92282],{"class":111,"line":440},[109,92269,619],{"class":122},[109,92271,88108],{"class":133},[109,92273,14737],{"class":122},[109,92275,55571],{"class":126},[109,92277,55574],{"class":211},[109,92279,714],{"class":126},[109,92281,91321],{"class":278},[109,92283,1330],{"class":126},[109,92285,92286,92288,92290,92292],{"class":111,"line":467},[109,92287,53394],{"class":122},[109,92289,10756],{"class":126},[109,92291,130],{"class":122},[109,92293,48508],{"class":133},[109,92295,92296,92298,92300],{"class":111,"line":494},[109,92297,71259],{"class":122},[109,92299,91340],{"class":211},[109,92301,215],{"class":126},[109,92303,92304,92306,92308,92310],{"class":111,"line":499},[109,92305,91347],{"class":126},[109,92307,130],{"class":122},[109,92309,1309],{"class":126},[109,92311,4050],{"class":122},[109,92313,92314],{"class":111,"line":526},[109,92315,91358],{"class":115},[109,92317,92318],{"class":111,"line":552},[109,92319,1361],{"class":126},[109,92321,92322],{"class":111,"line":557},[109,92323,91367],{"class":115},[109,92325,92326],{"class":111,"line":584},[109,92327,92328],{"class":115},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[109,92330,92331],{"class":111,"line":611},[109,92332,92333],{"class":115},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[109,92335,92336,92338,92340,92342,92344,92346,92349,92351,92353],{"class":111,"line":616},[109,92337,91382],{"class":126},[109,92339,58988],{"class":211},[109,92341,714],{"class":126},[109,92343,91389],{"class":278},[109,92345,91392],{"class":126},[109,92347,92348],{"class":211},"throttle",[109,92350,91398],{"class":126},[109,92352,66249],{"class":133},[109,92354,31672],{"class":126},[109,92356,92357,92359,92361],{"class":111,"line":633},[109,92358,53592],{"class":126},[109,92360,52988],{"class":52475},[109,92362,52482],{"class":126},[109,92364,92365,92367,92369],{"class":111,"line":649},[109,92366,52960],{"class":126},[109,92368,52975],{"class":52475},[109,92370,52482],{"class":126},[109,92372,92373],{"class":111,"line":676},[109,92374,158],{"emptyLinePlaceholder":157},[109,92376,92377,92379,92381],{"class":111,"line":703},[109,92378,52960],{"class":126},[109,92380,51810],{"class":52475},[109,92382,52482],{"class":126},[27,92384,92385],{},[30,92386,92387],{},"手写一个节流函数来处理",[19,92389,72127],{},[19,92391,91441],{},[19,92393,92394],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92396,92397],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[99,92399,92401],{"className":51808,"code":92400,"language":51810,"meta":104,"style":104},"\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",[106,92402,92403,92413,92427,92431,92439,92453,92473,92485,92493,92499,92509,92521,92533,92543,92555,92565,92575,92587,92591,92599,92607,92611,92619,92637,92655,92663,92681,92691,92699,92709,92713,92717,92721,92726,92731,92736,92741,92746,92751,92768,92774,92782,92793,92808,92815,92820,92825,92835,92840,92845,92850,92854,92858,92862,92882,92890,92898,92902],{"__ignoreMap":104},[109,92404,92405,92407,92409,92411],{"class":111,"line":112},[109,92406,52472],{"class":126},[109,92408,52476],{"class":52475},[109,92410,52479],{"class":211},[109,92412,52482],{"class":126},[109,92414,92415,92417,92419,92421,92423,92425],{"class":111,"line":119},[109,92416,1320],{"class":126},[109,92418,51810],{"class":52475},[109,92420,52491],{"class":211},[109,92422,130],{"class":126},[109,92424,52496],{"class":278},[109,92426,52482],{"class":126},[109,92428,92429],{"class":111,"line":140},[109,92430,158],{"emptyLinePlaceholder":157},[109,92432,92433,92435,92437],{"class":111,"line":154},[109,92434,1320],{"class":126},[109,92436,52509],{"class":52475},[109,92438,52482],{"class":126},[109,92440,92441,92443,92445,92447,92449,92451],{"class":111,"line":161},[109,92442,53319],{"class":126},[109,92444,52519],{"class":52475},[109,92446,52522],{"class":211},[109,92448,130],{"class":126},[109,92450,52527],{"class":278},[109,92452,52482],{"class":126},[109,92454,92455,92457,92459,92461,92463,92465,92467,92469,92471],{"class":111,"line":167},[109,92456,53319],{"class":126},[109,92458,52519],{"class":52475},[109,92460,16093],{"class":211},[109,92462,130],{"class":126},[109,92464,52566],{"class":278},[109,92466,52546],{"class":211},[109,92468,130],{"class":126},[109,92470,52573],{"class":278},[109,92472,52482],{"class":126},[109,92474,92475,92477,92479,92481,92483],{"class":111,"line":185},[109,92476,53319],{"class":126},[109,92478,52582],{"class":52475},[109,92480,52585],{"class":126},[109,92482,52582],{"class":52475},[109,92484,52482],{"class":126},[109,92486,92487,92489,92491],{"class":111,"line":201},[109,92488,53319],{"class":126},[109,92490,1467],{"class":52475},[109,92492,52482],{"class":126},[109,92494,92495,92497],{"class":111,"line":206},[109,92496,55927],{"class":211},[109,92498,16745],{"class":126},[109,92500,92501,92503,92505,92507],{"class":111,"line":218},[109,92502,73771],{"class":133},[109,92504,52612],{"class":126},[109,92506,61680],{"class":133},[109,92508,137],{"class":126},[109,92510,92511,92513,92515,92517,92519],{"class":111,"line":223},[109,92512,55946],{"class":133},[109,92514,52612],{"class":126},[109,92516,3098],{"class":133},[109,92518,52667],{"class":122},[109,92520,137],{"class":126},[109,92522,92523,92525,92527,92529,92531],{"class":111,"line":229},[109,92524,55960],{"class":133},[109,92526,52612],{"class":126},[109,92528,3098],{"class":133},[109,92530,52667],{"class":122},[109,92532,137],{"class":126},[109,92534,92535,92537,92539,92541],{"class":111,"line":244},[109,92536,56059],{"class":133},[109,92538,52612],{"class":126},[109,92540,91181],{"class":133},[109,92542,137],{"class":126},[109,92544,92545,92547,92549,92551,92553],{"class":111,"line":258},[109,92546,56097],{"class":133},[109,92548,52612],{"class":126},[109,92550,2357],{"class":133},[109,92552,52667],{"class":122},[109,92554,137],{"class":126},[109,92556,92557,92559,92561,92563],{"class":111,"line":263},[109,92558,58591],{"class":133},[109,92560,52612],{"class":126},[109,92562,62017],{"class":133},[109,92564,137],{"class":126},[109,92566,92567,92569,92571,92573],{"class":111,"line":269},[109,92568,58461],{"class":133},[109,92570,52612],{"class":126},[109,92572,52767],{"class":133},[109,92574,137],{"class":126},[109,92576,92577,92579,92581,92583,92585],{"class":111,"line":304},[109,92578,91220],{"class":133},[109,92580,52612],{"class":126},[109,92582,1856],{"class":133},[109,92584,52667],{"class":122},[109,92586,137],{"class":126},[109,92588,92589],{"class":111,"line":331},[109,92590,1361],{"class":126},[109,92592,92593,92595,92597],{"class":111,"line":336},[109,92594,53592],{"class":126},[109,92596,1467],{"class":52475},[109,92598,52482],{"class":126},[109,92600,92601,92603,92605],{"class":111,"line":364},[109,92602,52960],{"class":126},[109,92604,52509],{"class":52475},[109,92606,52482],{"class":126},[109,92608,92609],{"class":111,"line":391},[109,92610,158],{"emptyLinePlaceholder":157},[109,92612,92613,92615,92617],{"class":111,"line":396},[109,92614,1320],{"class":126},[109,92616,52975],{"class":52475},[109,92618,52482],{"class":126},[109,92620,92621,92623,92625,92627,92629,92631,92633,92635],{"class":111,"line":402},[109,92622,53319],{"class":126},[109,92624,52786],{"class":52475},[109,92626,54661],{"class":211},[109,92628,130],{"class":126},[109,92630,54666],{"class":278},[109,92632,56489],{"class":126},[109,92634,52786],{"class":52475},[109,92636,52482],{"class":126},[109,92638,92639,92641,92643,92645,92647,92649,92651,92653],{"class":111,"line":419},[109,92640,53319],{"class":126},[109,92642,52988],{"class":52475},[109,92644,56414],{"class":211},[109,92646,130],{"class":126},[109,92648,89449],{"class":278},[109,92650,56489],{"class":126},[109,92652,52988],{"class":52475},[109,92654,52482],{"class":126},[109,92656,92657,92659,92661],{"class":111,"line":435},[109,92658,53319],{"class":126},[109,92660,52988],{"class":52475},[109,92662,52482],{"class":126},[109,92664,92665,92667,92669,92671,92673,92675,92677,92679],{"class":111,"line":440},[109,92666,619],{"class":122},[109,92668,88108],{"class":133},[109,92670,14737],{"class":122},[109,92672,55571],{"class":126},[109,92674,55574],{"class":211},[109,92676,714],{"class":126},[109,92678,91321],{"class":278},[109,92680,1330],{"class":126},[109,92682,92683,92685,92687,92689],{"class":111,"line":467},[109,92684,53394],{"class":122},[109,92686,10756],{"class":126},[109,92688,130],{"class":122},[109,92690,48508],{"class":133},[109,92692,92693,92695,92697],{"class":111,"line":494},[109,92694,71259],{"class":122},[109,92696,91340],{"class":211},[109,92698,215],{"class":126},[109,92700,92701,92703,92705,92707],{"class":111,"line":499},[109,92702,91347],{"class":126},[109,92704,130],{"class":122},[109,92706,1309],{"class":126},[109,92708,4050],{"class":122},[109,92710,92711],{"class":111,"line":526},[109,92712,91358],{"class":115},[109,92714,92715],{"class":111,"line":552},[109,92716,1361],{"class":126},[109,92718,92719],{"class":111,"line":557},[109,92720,91367],{"class":115},[109,92722,92723],{"class":111,"line":584},[109,92724,92725],{"class":115},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[109,92727,92728],{"class":111,"line":611},[109,92729,92730],{"class":115},"    \u002F\u002F 1.声明一个定时器变量\n",[109,92732,92733],{"class":111,"line":616},[109,92734,92735],{"class":115},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[109,92737,92738],{"class":111,"line":633},[109,92739,92740],{"class":115},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[109,92742,92743],{"class":111,"line":649},[109,92744,92745],{"class":115},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[109,92747,92748],{"class":111,"line":676},[109,92749,92750],{"class":115},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[109,92752,92753,92755,92758,92760,92762,92764,92766],{"class":111,"line":703},[109,92754,71259],{"class":122},[109,92756,92757],{"class":211}," throttle",[109,92759,714],{"class":126},[109,92761,91812],{"class":6553},[109,92763,13608],{"class":126},[109,92765,2252],{"class":6553},[109,92767,13615],{"class":126},[109,92769,92770,92772],{"class":111,"line":708},[109,92771,80947],{"class":122},[109,92773,91825],{"class":126},[109,92775,92776,92778,92780],{"class":111,"line":723},[109,92777,75157],{"class":122},[109,92779,60093],{"class":122},[109,92781,55627],{"class":126},[109,92783,92784,92786,92788,92790],{"class":111,"line":728},[109,92785,3852],{"class":122},[109,92787,285],{"class":126},[109,92789,1764],{"class":122},[109,92791,92792],{"class":126},"timer) {\n",[109,92794,92795,92798,92800,92802,92804,92806],{"class":111,"line":739},[109,92796,92797],{"class":126},"          timer ",[109,92799,130],{"class":122},[109,92801,91866],{"class":211},[109,92803,714],{"class":126},[109,92805,55624],{"class":122},[109,92807,55627],{"class":126},[109,92809,92810,92813],{"class":111,"line":9352},[109,92811,92812],{"class":211},"            fn",[109,92814,803],{"class":126},[109,92816,92817],{"class":111,"line":9364},[109,92818,92819],{"class":115},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[109,92821,92822],{"class":111,"line":9376},[109,92823,92824],{"class":115},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[109,92826,92827,92830,92832],{"class":111,"line":11034},[109,92828,92829],{"class":126},"            timer ",[109,92831,130],{"class":122},[109,92833,92834],{"class":133}," null\n",[109,92836,92837],{"class":111,"line":11059},[109,92838,92839],{"class":115},"            \u002F\u002F 不能用clearTimeout(timer)\n",[109,92841,92842],{"class":111,"line":11082},[109,92843,92844],{"class":115},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[109,92846,92847],{"class":111,"line":11106},[109,92848,92849],{"class":126},"          }, t)\n",[109,92851,92852],{"class":111,"line":11111},[109,92853,3884],{"class":126},[109,92855,92856],{"class":111,"line":11116},[109,92857,53573],{"class":126},[109,92859,92860],{"class":111,"line":11121},[109,92861,1361],{"class":126},[109,92863,92864,92866,92868,92870,92872,92874,92876,92878,92880],{"class":111,"line":11130},[109,92865,91382],{"class":126},[109,92867,58988],{"class":211},[109,92869,714],{"class":126},[109,92871,91389],{"class":278},[109,92873,13608],{"class":126},[109,92875,92348],{"class":211},[109,92877,91398],{"class":126},[109,92879,66249],{"class":133},[109,92881,31672],{"class":126},[109,92883,92884,92886,92888],{"class":111,"line":11135},[109,92885,53592],{"class":126},[109,92887,52988],{"class":52475},[109,92889,52482],{"class":126},[109,92891,92892,92894,92896],{"class":111,"line":11141},[109,92893,52960],{"class":126},[109,92895,52975],{"class":52475},[109,92897,52482],{"class":126},[109,92899,92900],{"class":111,"line":11162},[109,92901,158],{"emptyLinePlaceholder":157},[109,92903,92904,92906,92908],{"class":111,"line":11168},[109,92905,52960],{"class":126},[109,92907,51810],{"class":52475},[109,92909,52482],{"class":126},[51,92911,92913],{"id":92912},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[99,92915,92917],{"className":54242,"code":92916,"language":54244,"meta":104,"style":104},"\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",[106,92918,92919,92927,92935,92940,92945,92950,92955,92959,92967],{"__ignoreMap":104},[109,92920,92921,92923,92925],{"class":111,"line":112},[109,92922,1320],{"class":126},[109,92924,52975],{"class":52475},[109,92926,52482],{"class":126},[109,92928,92929,92931,92933],{"class":111,"line":119},[109,92930,53319],{"class":126},[109,92932,52988],{"class":52475},[109,92934,52482],{"class":126},[109,92936,92937],{"class":111,"line":140},[109,92938,92939],{"class":126},"    let timer = null\n",[109,92941,92942],{"class":111,"line":154},[109,92943,92944],{"class":126},"    timer = setTimeout(() => {\n",[109,92946,92947],{"class":111,"line":161},[109,92948,92949],{"class":126},"      clearTimeout(timer)\n",[109,92951,92952],{"class":111,"line":167},[109,92953,92954],{"class":126},"      console.log(timer)\n",[109,92956,92957],{"class":111,"line":185},[109,92958,61400],{"class":126},[109,92960,92961,92963,92965],{"class":111,"line":201},[109,92962,53592],{"class":126},[109,92964,52988],{"class":52475},[109,92966,52482],{"class":126},[109,92968,92969,92971,92973],{"class":111,"line":206},[109,92970,52960],{"class":126},[109,92972,52975],{"class":52475},[109,92974,52482],{"class":126},[19,92976,92977],{},"输出为1",[19,92979,92980],{},"在开启的定时器里边写清除定时器",[19,92982,92983],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[51,92985,92987],{"id":92986},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92989,92990],{},"页面打开，可以记录上一次的视频播放位置",[19,92992,92993],{},[938,92994],{"alt":104,"src":92995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92997,92998],{},[938,92999],{"alt":104,"src":93000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[99,93002,93004],{"className":51808,"code":93003,"language":51810,"meta":104,"style":104},"\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",[106,93005,93006,93016,93030,93034,93042,93056,93076,93096,93118,93131,93139,93145,93155,93165,93175,93179,93183,93190,93203,93215,93219,93223,93233,93245,93259,93263,93267,93274,93284,93297,93309,93319,93329,93345,93357,93361,93365,93373,93383,93395,93405,93415,93425,93429,93433,93443,93454,93458,93466,93474,93478,93486,93501,93516,93531,93552,93560,93568,93583,93605,93613,93628,93654,93680,93706,93714,93722,93741,93749,93754,93773,93778,93796,93801,93806,93814,93819,93833,93841,93846,93863,93867,93872,93894,93898,93906,93914,93918],{"__ignoreMap":104},[109,93007,93008,93010,93012,93014],{"class":111,"line":112},[109,93009,52472],{"class":126},[109,93011,52476],{"class":52475},[109,93013,52479],{"class":211},[109,93015,52482],{"class":126},[109,93017,93018,93020,93022,93024,93026,93028],{"class":111,"line":119},[109,93019,1320],{"class":126},[109,93021,51810],{"class":52475},[109,93023,52491],{"class":211},[109,93025,130],{"class":126},[109,93027,52496],{"class":278},[109,93029,52482],{"class":126},[109,93031,93032],{"class":111,"line":140},[109,93033,158],{"emptyLinePlaceholder":157},[109,93035,93036,93038,93040],{"class":111,"line":154},[109,93037,1320],{"class":126},[109,93039,52509],{"class":52475},[109,93041,52482],{"class":126},[109,93043,93044,93046,93048,93050,93052,93054],{"class":111,"line":161},[109,93045,53319],{"class":126},[109,93047,52519],{"class":52475},[109,93049,52522],{"class":211},[109,93051,130],{"class":126},[109,93053,52527],{"class":278},[109,93055,60302],{"class":126},[109,93057,93058,93060,93062,93064,93066,93068,93070,93072,93074],{"class":111,"line":167},[109,93059,53319],{"class":126},[109,93061,52519],{"class":52475},[109,93063,52538],{"class":211},[109,93065,130],{"class":126},[109,93067,52543],{"class":278},[109,93069,52546],{"class":211},[109,93071,130],{"class":126},[109,93073,52551],{"class":278},[109,93075,60302],{"class":126},[109,93077,93078,93080,93082,93084,93086,93088,93090,93092,93094],{"class":111,"line":185},[109,93079,53319],{"class":126},[109,93081,52519],{"class":52475},[109,93083,16093],{"class":211},[109,93085,130],{"class":126},[109,93087,52566],{"class":278},[109,93089,52546],{"class":211},[109,93091,130],{"class":126},[109,93093,52573],{"class":278},[109,93095,60302],{"class":126},[109,93097,93098,93100,93102,93104,93106,93109,93111,93113,93116],{"class":111,"line":201},[109,93099,53319],{"class":126},[109,93101,52519],{"class":52475},[109,93103,16093],{"class":211},[109,93105,130],{"class":126},[109,93107,93108],{"class":278},"\"referrer\"",[109,93110,52546],{"class":211},[109,93112,130],{"class":126},[109,93114,93115],{"class":278},"\"never\"",[109,93117,60302],{"class":126},[109,93119,93120,93122,93124,93127,93129],{"class":111,"line":206},[109,93121,53319],{"class":126},[109,93123,52582],{"class":52475},[109,93125,93126],{"class":126},">综合案例\u003C\u002F",[109,93128,52582],{"class":52475},[109,93130,52482],{"class":126},[109,93132,93133,93135,93137],{"class":111,"line":218},[109,93134,53319],{"class":126},[109,93136,1467],{"class":52475},[109,93138,52482],{"class":126},[109,93140,93141,93143],{"class":111,"line":223},[109,93142,7733],{"class":52475},[109,93144,16745],{"class":126},[109,93146,93147,93149,93151,93153],{"class":111,"line":229},[109,93148,55870],{"class":133},[109,93150,52612],{"class":126},[109,93152,1314],{"class":133},[109,93154,137],{"class":126},[109,93156,93157,93159,93161,93163],{"class":111,"line":244},[109,93158,55881],{"class":133},[109,93160,52612],{"class":126},[109,93162,1314],{"class":133},[109,93164,137],{"class":126},[109,93166,93167,93169,93171,93173],{"class":111,"line":258},[109,93168,73771],{"class":133},[109,93170,52612],{"class":126},[109,93172,61680],{"class":133},[109,93174,137],{"class":126},[109,93176,93177],{"class":111,"line":263},[109,93178,1361],{"class":126},[109,93180,93181],{"class":111,"line":269},[109,93182,158],{"emptyLinePlaceholder":157},[109,93184,93185,93188],{"class":111,"line":304},[109,93186,93187],{"class":211},"    .container",[109,93189,16745],{"class":126},[109,93191,93192,93194,93196,93199,93201],{"class":111,"line":331},[109,93193,55946],{"class":133},[109,93195,52612],{"class":126},[109,93197,93198],{"class":133},"1200",[109,93200,52667],{"class":122},[109,93202,137],{"class":126},[109,93204,93205,93207,93209,93211,93213],{"class":111,"line":336},[109,93206,55881],{"class":133},[109,93208,52612],{"class":126},[109,93210,1314],{"class":133},[109,93212,52731],{"class":133},[109,93214,137],{"class":126},[109,93216,93217],{"class":111,"line":364},[109,93218,1361],{"class":126},[109,93220,93221],{"class":111,"line":391},[109,93222,158],{"emptyLinePlaceholder":157},[109,93224,93225,93228,93231],{"class":111,"line":396},[109,93226,93227],{"class":211},"    .video",[109,93229,93230],{"class":52475}," video",[109,93232,16745],{"class":126},[109,93234,93235,93237,93239,93241,93243],{"class":111,"line":402},[109,93236,55946],{"class":133},[109,93238,52612],{"class":126},[109,93240,1351],{"class":133},[109,93242,1865],{"class":122},[109,93244,137],{"class":126},[109,93246,93247,93249,93251,93253,93255,93257],{"class":111,"line":419},[109,93248,55870],{"class":133},[109,93250,52612],{"class":126},[109,93252,2232],{"class":133},[109,93254,52667],{"class":122},[109,93256,734],{"class":133},[109,93258,137],{"class":126},[109,93260,93261],{"class":111,"line":435},[109,93262,1361],{"class":126},[109,93264,93265],{"class":111,"line":440},[109,93266,158],{"emptyLinePlaceholder":157},[109,93268,93269,93272],{"class":111,"line":467},[109,93270,93271],{"class":211},"    .elevator",[109,93273,16745],{"class":126},[109,93275,93276,93278,93280,93282],{"class":111,"line":494},[109,93277,55934],{"class":133},[109,93279,52612],{"class":126},[109,93281,87408],{"class":133},[109,93283,137],{"class":126},[109,93285,93286,93288,93290,93293,93295],{"class":111,"line":499},[109,93287,56122],{"class":133},[109,93289,52612],{"class":126},[109,93291,93292],{"class":133},"280",[109,93294,52667],{"class":122},[109,93296,137],{"class":126},[109,93298,93299,93301,93303,93305,93307],{"class":111,"line":526},[109,93300,87602],{"class":133},[109,93302,52612],{"class":126},[109,93304,2232],{"class":133},[109,93306,52667],{"class":122},[109,93308,137],{"class":126},[109,93310,93311,93313,93315,93317],{"class":111,"line":552},[109,93312,87415],{"class":133},[109,93314,52612],{"class":126},[109,93316,87420],{"class":133},[109,93318,137],{"class":126},[109,93320,93321,93323,93325,93327],{"class":111,"line":557},[109,93322,62896],{"class":133},[109,93324,52612],{"class":126},[109,93326,62017],{"class":133},[109,93328,137],{"class":126},[109,93330,93331,93333,93335,93337,93339,93341,93343],{"class":111,"line":584},[109,93332,63152],{"class":133},[109,93334,52612],{"class":126},[109,93336,1755],{"class":133},[109,93338,52667],{"class":122},[109,93340,52696],{"class":133},[109,93342,63419],{"class":133},[109,93344,137],{"class":126},[109,93346,93347,93349,93351,93353,93355],{"class":111,"line":611},[109,93348,55946],{"class":133},[109,93350,52612],{"class":126},[109,93352,2438],{"class":133},[109,93354,52667],{"class":122},[109,93356,137],{"class":126},[109,93358,93359],{"class":111,"line":616},[109,93360,1361],{"class":126},[109,93362,93363],{"class":111,"line":633},[109,93364,158],{"emptyLinePlaceholder":157},[109,93366,93367,93369,93371],{"class":111,"line":649},[109,93368,93271],{"class":211},[109,93370,2791],{"class":52475},[109,93372,16745],{"class":126},[109,93374,93375,93377,93379,93381],{"class":111,"line":676},[109,93376,56184],{"class":133},[109,93378,52612],{"class":126},[109,93380,62044],{"class":133},[109,93382,137],{"class":126},[109,93384,93385,93387,93389,93391,93393],{"class":111,"line":703},[109,93386,55870],{"class":133},[109,93388,52612],{"class":126},[109,93390,1008],{"class":133},[109,93392,52667],{"class":122},[109,93394,137],{"class":126},[109,93396,93397,93399,93401,93403],{"class":111,"line":708},[109,93398,65145],{"class":133},[109,93400,52612],{"class":126},[109,93402,55912],{"class":133},[109,93404,137],{"class":126},[109,93406,93407,93409,93411,93413],{"class":111,"line":723},[109,93408,58461],{"class":133},[109,93410,52612],{"class":126},[109,93412,52767],{"class":133},[109,93414,137],{"class":126},[109,93416,93417,93419,93421,93423],{"class":111,"line":728},[109,93418,58591],{"class":133},[109,93420,52612],{"class":126},[109,93422,63245],{"class":133},[109,93424,137],{"class":126},[109,93426,93427],{"class":111,"line":739},[109,93428,1361],{"class":126},[109,93430,93431],{"class":111,"line":9352},[109,93432,158],{"emptyLinePlaceholder":157},[109,93434,93435,93437,93439,93441],{"class":111,"line":9364},[109,93436,93271],{"class":211},[109,93438,2791],{"class":52475},[109,93440,65199],{"class":211},[109,93442,16745],{"class":126},[109,93444,93445,93447,93449,93452],{"class":111,"line":9376},[109,93446,58591],{"class":133},[109,93448,52612],{"class":126},[109,93450,93451],{"class":133},"#1286ff",[109,93453,137],{"class":126},[109,93455,93456],{"class":111,"line":11034},[109,93457,1361],{"class":126},[109,93459,93460,93462,93464],{"class":111,"line":11059},[109,93461,53592],{"class":126},[109,93463,1467],{"class":52475},[109,93465,52482],{"class":126},[109,93467,93468,93470,93472],{"class":111,"line":11082},[109,93469,52960],{"class":126},[109,93471,52509],{"class":52475},[109,93473,52482],{"class":126},[109,93475,93476],{"class":111,"line":11106},[109,93477,158],{"emptyLinePlaceholder":157},[109,93479,93480,93482,93484],{"class":111,"line":11111},[109,93481,1320],{"class":126},[109,93483,52975],{"class":52475},[109,93485,52482],{"class":126},[109,93487,93488,93490,93492,93494,93496,93499],{"class":111,"line":11116},[109,93489,53319],{"class":126},[109,93491,52786],{"class":52475},[109,93493,54661],{"class":211},[109,93495,130],{"class":126},[109,93497,93498],{"class":278},"\"container\"",[109,93500,52482],{"class":126},[109,93502,93503,93505,93507,93509,93511,93514],{"class":111,"line":11121},[109,93504,52516],{"class":126},[109,93506,52786],{"class":52475},[109,93508,54661],{"class":211},[109,93510,130],{"class":126},[109,93512,93513],{"class":278},"\"header\"",[109,93515,52482],{"class":126},[109,93517,93518,93520,93522,93524,93526,93529],{"class":111,"line":11130},[109,93519,56409],{"class":126},[109,93521,1776],{"class":52475},[109,93523,62232],{"class":211},[109,93525,130],{"class":126},[109,93527,93528],{"class":278},"\"http:\u002F\u002Fpip.itcast.cn\"",[109,93530,52482],{"class":126},[109,93532,93533,93535,93537,93539,93541,93544,93546,93548,93550],{"class":111,"line":11135},[109,93534,56477],{"class":126},[109,93536,938],{"class":52475},[109,93538,56414],{"class":211},[109,93540,130],{"class":126},[109,93542,93543],{"class":278},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[109,93545,56422],{"class":211},[109,93547,130],{"class":126},[109,93549,8978],{"class":278},[109,93551,60302],{"class":126},[109,93553,93554,93556,93558],{"class":111,"line":11141},[109,93555,56582],{"class":126},[109,93557,1776],{"class":52475},[109,93559,52482],{"class":126},[109,93561,93562,93564,93566],{"class":111,"line":11162},[109,93563,52951],{"class":126},[109,93565,52786],{"class":52475},[109,93567,52482],{"class":126},[109,93569,93570,93572,93574,93576,93578,93581],{"class":111,"line":11168},[109,93571,52516],{"class":126},[109,93573,52786],{"class":52475},[109,93575,54661],{"class":211},[109,93577,130],{"class":126},[109,93579,93580],{"class":278},"\"video\"",[109,93582,52482],{"class":126},[109,93584,93585,93587,93589,93591,93593,93596,93599,93601,93603],{"class":111,"line":11182},[109,93586,56409],{"class":126},[109,93588,29358],{"class":52475},[109,93590,56414],{"class":211},[109,93592,130],{"class":126},[109,93594,93595],{"class":278},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[109,93597,93598],{"class":211}," controls",[109,93600,56489],{"class":126},[109,93602,29358],{"class":52475},[109,93604,52482],{"class":126},[109,93606,93607,93609,93611],{"class":111,"line":11188},[109,93608,52951],{"class":126},[109,93610,52786],{"class":52475},[109,93612,52482],{"class":126},[109,93614,93615,93617,93619,93621,93623,93626],{"class":111,"line":11215},[109,93616,52516],{"class":126},[109,93618,52786],{"class":52475},[109,93620,54661],{"class":211},[109,93622,130],{"class":126},[109,93624,93625],{"class":278},"\"elevator\"",[109,93627,52482],{"class":126},[109,93629,93630,93632,93634,93636,93638,93640,93643,93645,93647,93650,93652],{"class":111,"line":11224},[109,93631,56409],{"class":126},[109,93633,1776],{"class":52475},[109,93635,62232],{"class":211},[109,93637,130],{"class":126},[109,93639,65411],{"class":278},[109,93641,93642],{"class":211}," data-ref",[109,93644,130],{"class":126},[109,93646,93580],{"class":278},[109,93648,93649],{"class":126},">视频介绍\u003C\u002F",[109,93651,1776],{"class":52475},[109,93653,52482],{"class":126},[109,93655,93656,93658,93660,93662,93664,93666,93668,93670,93673,93676,93678],{"class":111,"line":11230},[109,93657,56409],{"class":126},[109,93659,1776],{"class":52475},[109,93661,62232],{"class":211},[109,93663,130],{"class":126},[109,93665,65411],{"class":278},[109,93667,93642],{"class":211},[109,93669,130],{"class":126},[109,93671,93672],{"class":278},"\"intro\"",[109,93674,93675],{"class":126},">课程简介\u003C\u002F",[109,93677,1776],{"class":52475},[109,93679,52482],{"class":126},[109,93681,93682,93684,93686,93688,93690,93692,93694,93696,93699,93702,93704],{"class":111,"line":11238},[109,93683,56409],{"class":126},[109,93685,1776],{"class":52475},[109,93687,62232],{"class":211},[109,93689,130],{"class":126},[109,93691,65411],{"class":278},[109,93693,93642],{"class":211},[109,93695,130],{"class":126},[109,93697,93698],{"class":278},"\"outline\"",[109,93700,93701],{"class":126},">评论列表\u003C\u002F",[109,93703,1776],{"class":52475},[109,93705,52482],{"class":126},[109,93707,93708,93710,93712],{"class":111,"line":11243},[109,93709,52951],{"class":126},[109,93711,52786],{"class":52475},[109,93713,52482],{"class":126},[109,93715,93716,93718,93720],{"class":111,"line":17777},[109,93717,53592],{"class":126},[109,93719,52786],{"class":52475},[109,93721,52482],{"class":126},[109,93723,93724,93726,93728,93730,93732,93735,93737,93739],{"class":111,"line":17783},[109,93725,53319],{"class":126},[109,93727,52988],{"class":52475},[109,93729,56414],{"class":211},[109,93731,130],{"class":126},[109,93733,93734],{"class":278},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[109,93736,56489],{"class":126},[109,93738,52988],{"class":52475},[109,93740,52482],{"class":126},[109,93742,93743,93745,93747],{"class":111,"line":17806},[109,93744,53319],{"class":126},[109,93746,52988],{"class":52475},[109,93748,52482],{"class":126},[109,93750,93751],{"class":111,"line":17812},[109,93752,93753],{"class":115},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[109,93755,93756,93758,93760,93762,93764,93766,93768,93771],{"class":111,"line":17835},[109,93757,619],{"class":122},[109,93759,93230],{"class":133},[109,93761,14737],{"class":122},[109,93763,55571],{"class":126},[109,93765,55574],{"class":211},[109,93767,714],{"class":126},[109,93769,93770],{"class":278},"'video'",[109,93772,1330],{"class":126},[109,93774,93775],{"class":111,"line":17849},[109,93776,93777],{"class":115},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[109,93779,93780,93783,93785,93787,93789,93792,93794],{"class":111,"line":17869},[109,93781,93782],{"class":126},"    video.ontimeupdate ",[109,93784,130],{"class":122},[109,93786,89530],{"class":126},[109,93788,92348],{"class":211},[109,93790,93791],{"class":126},"(() ",[109,93793,85897],{"class":122},[109,93795,16745],{"class":126},[109,93797,93798],{"class":111,"line":17875},[109,93799,93800],{"class":115},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[109,93802,93803],{"class":111,"line":17886},[109,93804,93805],{"class":115},"      \u002F\u002F 控制台输出当前的时间\n",[109,93807,93808,93811],{"class":111,"line":17909},[109,93809,93810],{"class":115},"      \u002F\u002F console.log(video.currentTime)",[109,93812,93813],{"class":115},"  \u002F\u002F获得当前的视频时间\n",[109,93815,93816],{"class":111,"line":17931},[109,93817,93818],{"class":115},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[109,93820,93821,93823,93825,93827,93830],{"class":111,"line":17936},[109,93822,75858],{"class":126},[109,93824,72829],{"class":211},[109,93826,714],{"class":126},[109,93828,93829],{"class":278},"'currentTime'",[109,93831,93832],{"class":126},", video.currentTime)\n",[109,93834,93835,93837,93839],{"class":111,"line":17942},[109,93836,55710],{"class":126},[109,93838,7740],{"class":133},[109,93840,1330],{"class":126},[109,93842,93843],{"class":111,"line":17956},[109,93844,93845],{"class":115},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[109,93847,93848,93851,93854,93856,93859,93861],{"class":111,"line":17969},[109,93849,93850],{"class":126},"    video.",[109,93852,93853],{"class":211},"onloadeddata",[109,93855,14737],{"class":122},[109,93857,93858],{"class":126}," () ",[109,93860,85897],{"class":122},[109,93862,16745],{"class":126},[109,93864,93865],{"class":111,"line":17974},[109,93866,61187],{"class":115},[109,93868,93869],{"class":111,"line":17988},[109,93870,93871],{"class":115},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[109,93873,93874,93877,93879,93882,93884,93886,93888,93890,93892],{"class":111,"line":17993},[109,93875,93876],{"class":126},"      video.currentTime ",[109,93878,130],{"class":122},[109,93880,93881],{"class":126}," localStorage.",[109,93883,72860],{"class":211},[109,93885,714],{"class":126},[109,93887,93829],{"class":278},[109,93889,14887],{"class":126},[109,93891,72532],{"class":122},[109,93893,48508],{"class":133},[109,93895,93896],{"class":111,"line":17999},[109,93897,1361],{"class":126},[109,93899,93900,93902,93904],{"class":111,"line":18004},[109,93901,53592],{"class":126},[109,93903,52988],{"class":52475},[109,93905,52482],{"class":126},[109,93907,93908,93910,93912],{"class":111,"line":18018},[109,93909,52960],{"class":126},[109,93911,52975],{"class":52475},[109,93913,52482],{"class":126},[109,93915,93916],{"class":111,"line":18023},[109,93917,158],{"emptyLinePlaceholder":157},[109,93919,93920,93922,93924],{"class":111,"line":18028},[109,93921,52960],{"class":126},[109,93923,51810],{"class":52475},[109,93925,52482],{"class":126},[1467,93927,93928],{},"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":104,"searchDepth":119,"depth":119,"links":93930},[93931,93936,93940,93941,93942,93947,93952,93953,93954,93955,93962,93967,93968,93978,93982,93983,93987],{"id":77866,"depth":119,"text":77867,"children":93932},[93933,93934,93935],{"id":77870,"depth":140,"text":77871},{"id":77895,"depth":140,"text":77896},{"id":77907,"depth":140,"text":77908},{"id":77919,"depth":119,"text":77920,"children":93937},[93938,93939],{"id":77923,"depth":140,"text":77924},{"id":77938,"depth":140,"text":77939},{"id":77990,"depth":119,"text":77991},{"id":78034,"depth":119,"text":78035},{"id":78051,"depth":119,"text":78052,"children":93943},[93944,93945,93946],{"id":78055,"depth":140,"text":78056},{"id":78068,"depth":140,"text":78069},{"id":78173,"depth":140,"text":78174},{"id":78462,"depth":119,"text":78463,"children":93948},[93949,93950,93951],{"id":78466,"depth":140,"text":78467},{"id":78909,"depth":140,"text":78910},{"id":79320,"depth":140,"text":79321},{"id":79383,"depth":119,"text":79384},{"id":79462,"depth":119,"text":79463},{"id":79555,"depth":119,"text":79556},{"id":81400,"depth":119,"text":81401,"children":93956},[93957,93958,93959,93960,93961],{"id":81404,"depth":140,"text":81405},{"id":81416,"depth":140,"text":81417},{"id":81635,"depth":140,"text":81636},{"id":81653,"depth":140,"text":81654},{"id":81713,"depth":140,"text":81714},{"id":85981,"depth":119,"text":85982,"children":93963},[93964,93965,93966],{"id":85985,"depth":140,"text":85986},{"id":86003,"depth":140,"text":86004},{"id":86029,"depth":140,"text":86030},{"id":86038,"depth":119,"text":86039},{"id":86060,"depth":119,"text":86061,"children":93969},[93970,93971,93972,93973,93974,93975,93976,93977],{"id":86064,"depth":140,"text":86065},{"id":86325,"depth":140,"text":86326},{"id":86511,"depth":140,"text":86512},{"id":86878,"depth":140,"text":86879},{"id":86994,"depth":140,"text":86995},{"id":87030,"depth":140,"text":87031},{"id":87077,"depth":140,"text":87078},{"id":87111,"depth":140,"text":87112},{"id":88474,"depth":119,"text":88475,"children":93979},[93980,93981],{"id":88478,"depth":140,"text":88479},{"id":88515,"depth":140,"text":88516},{"id":89870,"depth":119,"text":89871},{"id":90241,"depth":119,"text":90242,"children":93984},[93985,93986],{"id":90245,"depth":140,"text":90246},{"id":90279,"depth":140,"text":90280},{"id":91008,"depth":119,"text":91009,"children":93988},[93989,93990,93991,93992],{"id":91012,"depth":140,"text":91013},{"id":91970,"depth":140,"text":91971},{"id":92912,"depth":140,"text":92913},{"id":92986,"depth":140,"text":92987},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77855,"description":24550},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93999,"title":94000,"body":94001,"description":94012,"extension":1476,"meta":94013,"navigation":157,"path":94015,"seo":94016,"stem":94017,"__hash__":94018},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94002,"toc":94010},[94003],[19,94004,94005,94006],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[1776,94007,94008],{"href":94008,"rel":94009},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25039],{"title":104,"searchDepth":119,"depth":119,"links":94011},[],"三件套第三套学习",{"category":94014},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94000,"description":94012},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94020,"title":94021,"body":94022,"description":24550,"extension":1476,"meta":94127,"navigation":157,"path":94128,"seo":94129,"stem":94130,"__hash__":94131},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94023,"toc":94122},[94024,94031,94034,94037,94040,94044,94053,94056,94059,94063,94072,94075,94079,94082,94102,94105,94119],[19,94025,94026],{},[1776,94027,94030],{"href":94028,"rel":94029},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25039],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94032,94021],{"id":94033},"_1安装",[19,94035,94036],{},"numpy是科学计算基础库,底层是C语言",[19,94038,94039],{},"三种方式：",[14,94041,94043],{"id":94042},"_11-通过pip安装","1.1 通过pip安装",[99,94045,94047],{"className":31553,"code":94046,"language":31555,"meta":104,"style":104},"pip install numpy\n",[106,94048,94049],{"__ignoreMap":104},[109,94050,94051],{"class":111,"line":112},[109,94052,94046],{"class":126},[19,94054,94055],{},"首选方式，自动处理依赖项",[19,94057,94058],{},"在提示系统命令符中使用cmd",[14,94060,94062],{"id":94061},"_12-通过anaconda安装","1.2 通过Anaconda安装",[99,94064,94066],{"className":31553,"code":94065,"language":31555,"meta":104,"style":104},"conda install numpy\n",[106,94067,94068],{"__ignoreMap":104},[109,94069,94070],{"class":111,"line":112},[109,94071,94065],{"class":126},[19,94073,94074],{},"自动解决环境依赖",[14,94076,94078],{"id":94077},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94080,94081],{},"对于Debian\u002FUbuntu",[99,94083,94085],{"className":31553,"code":94084,"language":31555,"meta":104,"style":104},"sudo apt-get install python3-numpy\n",[106,94086,94087],{"__ignoreMap":104},[109,94088,94089,94092,94094,94097,94099],{"class":111,"line":112},[109,94090,94091],{"class":126},"sudo apt",[109,94093,2064],{"class":122},[109,94095,94096],{"class":126},"get install python3",[109,94098,2064],{"class":122},[109,94100,94101],{"class":126},"numpy\n",[19,94103,94104],{},"对于Fedora:",[99,94106,94108],{"className":31553,"code":94107,"language":31555,"meta":104,"style":104},"sudo dnf install python3-numpy\n",[106,94109,94110],{"__ignoreMap":104},[109,94111,94112,94115,94117],{"class":111,"line":112},[109,94113,94114],{"class":126},"sudo dnf install python3",[109,94116,2064],{"class":122},[109,94118,94101],{"class":126},[1467,94120,94121],{},"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":104,"searchDepth":119,"depth":119,"links":94123},[94124,94125,94126],{"id":94042,"depth":119,"text":94043},{"id":94061,"depth":119,"text":94062},{"id":94077,"depth":119,"text":94078},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94021,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94133,"title":94134,"body":94135,"description":24550,"extension":1476,"meta":94248,"navigation":157,"path":94249,"seo":94250,"stem":94251,"__hash__":94252},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94136,"toc":94246},[94137,94140,94143,94146,94149,94152,94155,94158,94161,94164,94240,94243],[10,94138,94134],{"id":94139},"_10算数函数",[19,94141,94142],{},"加减乘除运算跟python基础语法没区别",[19,94144,94145],{},"除了python那种方法外还可以使用函数",[19,94147,94148],{},"加：np.add(a,b)",[19,94150,94151],{},"减：np.subtract(a,b)",[19,94153,94154],{},"乘：np.multiply(a,b)",[19,94156,94157],{},"除：np.divide(a,b) == a\u002Fb",[19,94159,94160],{},"取余：np.mod(a,b) == a%b",[19,94162,94163],{},"必须会的用法：",[99,94165,94167],{"className":31553,"code":94166,"language":31555,"meta":104,"style":104},"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",[106,94168,94169,94191,94212,94222,94235],{"__ignoreMap":104},[109,94170,94171,94173,94175,94178,94180,94183,94185,94187,94189],{"class":111,"line":112},[109,94172,1776],{"class":126},[109,94174,130],{"class":122},[109,94176,94177],{"class":126},"np.arange(",[109,94179,1956],{"class":133},[109,94181,94182],{"class":126},").reshape(",[109,94184,1612],{"class":133},[109,94186,1914],{"class":126},[109,94188,1612],{"class":133},[109,94190,1330],{"class":126},[109,94192,94193,94195,94197,94200,94202,94204,94206,94208,94210],{"class":111,"line":119},[109,94194,1801],{"class":126},[109,94196,130],{"class":122},[109,94198,94199],{"class":126},"np.array([",[109,94201,1008],{"class":133},[109,94203,1914],{"class":126},[109,94205,1008],{"class":133},[109,94207,1914],{"class":126},[109,94209,1008],{"class":133},[109,94211,5994],{"class":126},[109,94213,94214,94217,94219],{"class":111,"line":140},[109,94215,94216],{"class":126},"result",[109,94218,130],{"class":122},[109,94220,94221],{"class":126},"np.empty_like(a)\n",[109,94223,94224,94227,94230,94232],{"class":111,"line":154},[109,94225,94226],{"class":126},"np.add(a,b,",[109,94228,94229],{"class":6553},"out",[109,94231,130],{"class":122},[109,94233,94234],{"class":126},"result)\n",[109,94236,94237],{"class":111,"line":161},[109,94238,94239],{"class":126},"result\n",[19,94241,94242],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1467,94244,94245],{},"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":104,"searchDepth":119,"depth":119,"links":94247},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94134,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94254,"title":94255,"body":94256,"description":24550,"extension":1476,"meta":95018,"navigation":157,"path":95019,"seo":95020,"stem":95021,"__hash__":95022},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94257,"toc":95005},[94258,94261,94264,94267,94271,94310,94314,94358,94418,94422,94425,94464,94467,94512,94516,94552,94556,94625,94629,94693,94697,94700,94703,94706,94709,94745,94749,94789,94793,94865,94868,94872,94935,94939,95002],[10,94259,94255],{"id":94260},"_11统计函数",[19,94262,94263],{},"sum max min mean",[19,94265,94266],{},"这些有axis参数，可以指定方向",[14,94268,94270],{"id":94269},"_111-sum求和函数","11.1 sum()求和函数",[99,94272,94274],{"className":31553,"code":94273,"language":31555,"meta":104,"style":104},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[106,94275,94276,94281,94302],{"__ignoreMap":104},[109,94277,94278],{"class":111,"line":112},[109,94279,94280],{"class":115},"#创建一维数组\n",[109,94282,94283,94285,94287,94290,94292,94294,94296,94298,94300],{"class":111,"line":119},[109,94284,1776],{"class":126},[109,94286,130],{"class":122},[109,94288,94289],{"class":126},"np.random.randint(",[109,94291,1755],{"class":133},[109,94293,1914],{"class":126},[109,94295,1351],{"class":133},[109,94297,1914],{"class":126},[109,94299,2232],{"class":133},[109,94301,1330],{"class":126},[109,94303,94304,94307],{"class":111,"line":140},[109,94305,94306],{"class":126},"np.sum(a)",[109,94308,94309],{"class":115},"#求和\n",[14,94311,94313],{"id":94312},"_112-max求最大值函数","11.2 max()求最大值函数",[99,94315,94317],{"className":31553,"code":94316,"language":31555,"meta":104,"style":104},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[106,94318,94319,94323,94343,94348,94353],{"__ignoreMap":104},[109,94320,94321],{"class":111,"line":112},[109,94322,94280],{"class":115},[109,94324,94325,94327,94329,94331,94333,94335,94337,94339,94341],{"class":111,"line":119},[109,94326,1776],{"class":126},[109,94328,130],{"class":122},[109,94330,94289],{"class":126},[109,94332,1755],{"class":133},[109,94334,1914],{"class":126},[109,94336,1351],{"class":133},[109,94338,1914],{"class":126},[109,94340,2232],{"class":133},[109,94342,1330],{"class":126},[109,94344,94345],{"class":111,"line":140},[109,94346,94347],{"class":126},"np.max(a)\n",[109,94349,94350],{"class":111,"line":154},[109,94351,94352],{"class":115},"#最大索引(求最大元素的索引)arg\n",[109,94354,94355],{"class":111,"line":161},[109,94356,94357],{"class":126},"np.argmax(a)\n",[99,94359,94361],{"className":31553,"code":94360,"language":31555,"meta":104,"style":104},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[106,94362,94363,94384,94404,94408],{"__ignoreMap":104},[109,94364,94365,94367,94369,94372,94374,94376,94378,94380,94382],{"class":111,"line":112},[109,94366,296],{"class":126},[109,94368,130],{"class":122},[109,94370,94371],{"class":126}," np.array([",[109,94373,1755],{"class":133},[109,94375,13608],{"class":126},[109,94377,1856],{"class":133},[109,94379,13608],{"class":126},[109,94381,1612],{"class":133},[109,94383,5994],{"class":126},[109,94385,94386,94388,94390,94392,94394,94396,94398,94400,94402],{"class":111,"line":119},[109,94387,324],{"class":126},[109,94389,130],{"class":122},[109,94391,94371],{"class":126},[109,94393,1612],{"class":133},[109,94395,13608],{"class":126},[109,94397,1618],{"class":133},[109,94399,13608],{"class":126},[109,94401,1831],{"class":133},[109,94403,5994],{"class":126},[109,94405,94406],{"class":111,"line":140},[109,94407,158],{"emptyLinePlaceholder":157},[109,94409,94410,94412,94415],{"class":111,"line":154},[109,94411,31590],{"class":133},[109,94413,94414],{"class":126},"(np.maximum(a, b))   ",[109,94416,94417],{"class":115},"# [3 5 4]，每个位置上取较大值\n",[14,94419,94421],{"id":94420},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94423,94424],{},"①一维数组：",[99,94426,94428],{"className":31553,"code":94427,"language":31555,"meta":104,"style":104},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[106,94429,94430,94434,94454,94459],{"__ignoreMap":104},[109,94431,94432],{"class":111,"line":112},[109,94433,94280],{"class":115},[109,94435,94436,94438,94440,94442,94444,94446,94448,94450,94452],{"class":111,"line":119},[109,94437,1776],{"class":126},[109,94439,130],{"class":122},[109,94441,94289],{"class":126},[109,94443,1755],{"class":133},[109,94445,1914],{"class":126},[109,94447,1351],{"class":133},[109,94449,1914],{"class":126},[109,94451,2232],{"class":133},[109,94453,1330],{"class":126},[109,94455,94456],{"class":111,"line":140},[109,94457,94458],{"class":115},"#求平均值\n",[109,94460,94461],{"class":111,"line":154},[109,94462,94463],{"class":126},"np.mean(a)\n",[19,94465,94466],{},"②二维数组",[99,94468,94470],{"className":31553,"code":94469,"language":31555,"meta":104,"style":104},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[106,94471,94472,94477,94502,94507],{"__ignoreMap":104},[109,94473,94474],{"class":111,"line":112},[109,94475,94476],{"class":115},"#二维数组\n",[109,94478,94479,94482,94484,94486,94488,94490,94492,94494,94496,94498,94500],{"class":111,"line":119},[109,94480,94481],{"class":126},"aa",[109,94483,130],{"class":122},[109,94485,94177],{"class":126},[109,94487,1755],{"class":133},[109,94489,1914],{"class":126},[109,94491,2055],{"class":133},[109,94493,94182],{"class":126},[109,94495,1612],{"class":133},[109,94497,1914],{"class":126},[109,94499,1831],{"class":133},[109,94501,1330],{"class":126},[109,94503,94504],{"class":111,"line":140},[109,94505,94506],{"class":115},"#对数组中的所有数求平均\n",[109,94508,94509],{"class":111,"line":154},[109,94510,94511],{"class":126},"np.mean(aa)\n",[14,94513,94515],{"id":94514},"_114-median求中位数函数","11.4 median()求中位数函数",[99,94517,94519],{"className":31553,"code":94518,"language":31555,"meta":104,"style":104},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[106,94520,94521,94526,94542,94547],{"__ignoreMap":104},[109,94522,94523],{"class":111,"line":112},[109,94524,94525],{"class":115},"#求中位数\n",[109,94527,94528,94530,94532,94534,94536,94538,94540],{"class":111,"line":119},[109,94529,1801],{"class":126},[109,94531,130],{"class":122},[109,94533,94177],{"class":126},[109,94535,1755],{"class":133},[109,94537,1914],{"class":126},[109,94539,1008],{"class":133},[109,94541,1330],{"class":126},[109,94543,94544],{"class":111,"line":140},[109,94545,94546],{"class":126},"np.median(b)\n",[109,94548,94549],{"class":111,"line":154},[109,94550,94551],{"class":115},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94553,94555],{"id":94554},"_115-power求幂运算函数","11.5 power()求幂运算函数",[99,94557,94559],{"className":31553,"code":94558,"language":31555,"meta":104,"style":104},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[106,94560,94561,94577,94582,94587,94596,94601,94610],{"__ignoreMap":104},[109,94562,94563,94565,94567,94569,94571,94573,94575],{"class":111,"line":112},[109,94564,1801],{"class":126},[109,94566,130],{"class":122},[109,94568,94177],{"class":126},[109,94570,1755],{"class":133},[109,94572,1914],{"class":126},[109,94574,1008],{"class":133},[109,94576,1330],{"class":126},[109,94578,94579],{"class":111,"line":119},[109,94580,94581],{"class":115},"#幂运算\n",[109,94583,94584],{"class":111,"line":140},[109,94585,94586],{"class":115},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[109,94588,94589,94592,94594],{"class":111,"line":154},[109,94590,94591],{"class":126},"np.power(b,",[109,94593,1618],{"class":133},[109,94595,1330],{"class":126},[109,94597,94598],{"class":111,"line":161},[109,94599,94600],{"class":115},"#或者以下代码，将数据存储起来\n",[109,94602,94603,94605,94607],{"class":111,"line":167},[109,94604,2377],{"class":126},[109,94606,130],{"class":122},[109,94608,94609],{"class":126},"np.empty_like(b)\n",[109,94611,94612,94614,94616,94618,94620,94622],{"class":111,"line":185},[109,94613,94591],{"class":126},[109,94615,1618],{"class":133},[109,94617,1914],{"class":126},[109,94619,94229],{"class":6553},[109,94621,130],{"class":122},[109,94623,94624],{"class":126},"y)\n",[14,94626,94628],{"id":94627},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[99,94630,94632],{"className":31553,"code":94631,"language":31555,"meta":104,"style":104},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[106,94633,94634,94650,94655,94660,94664,94682],{"__ignoreMap":104},[109,94635,94636,94638,94640,94642,94644,94646,94648],{"class":111,"line":112},[109,94637,1801],{"class":126},[109,94639,130],{"class":122},[109,94641,94177],{"class":126},[109,94643,1755],{"class":133},[109,94645,1914],{"class":126},[109,94647,1008],{"class":133},[109,94649,1330],{"class":126},[109,94651,94652],{"class":111,"line":119},[109,94653,94654],{"class":115},"#开方\n",[109,94656,94657],{"class":111,"line":140},[109,94658,94659],{"class":126},"np.sqrt(b)\n",[109,94661,94662],{"class":111,"line":154},[109,94663,94600],{"class":115},[109,94665,94666,94668,94670,94673,94676,94678,94680],{"class":111,"line":161},[109,94667,2377],{"class":126},[109,94669,130],{"class":122},[109,94671,94672],{"class":126},"np.empty_like(b,",[109,94674,94675],{"class":6553},"dtype",[109,94677,130],{"class":122},[109,94679,1584],{"class":133},[109,94681,1330],{"class":126},[109,94683,94684,94687,94689,94691],{"class":111,"line":167},[109,94685,94686],{"class":126},"np.sqrt(b,",[109,94688,94229],{"class":6553},[109,94690,130],{"class":122},[109,94692,94624],{"class":126},[14,94694,94696],{"id":94695},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94698,94699],{},"对数组中的元素累计求和，可指定轴",[19,94701,94702],{},"#累计求和的意思是：",[19,94704,94705],{},"a = np.array([1, 2, 3, 4])",[19,94707,94708],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[99,94710,94712],{"className":31553,"code":94711,"language":31555,"meta":104,"style":104},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[106,94713,94714,94730,94735,94740],{"__ignoreMap":104},[109,94715,94716,94718,94720,94722,94724,94726,94728],{"class":111,"line":112},[109,94717,1801],{"class":126},[109,94719,130],{"class":122},[109,94721,94177],{"class":126},[109,94723,1755],{"class":133},[109,94725,1914],{"class":126},[109,94727,1008],{"class":133},[109,94729,1330],{"class":126},[109,94731,94732],{"class":111,"line":119},[109,94733,94734],{"class":126},"np.cumsum(b)\n",[109,94736,94737],{"class":111,"line":140},[109,94738,94739],{"class":115},"#结果：\n",[109,94741,94742],{"class":111,"line":154},[109,94743,94744],{"class":115},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94746,94748],{"id":94747},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[99,94750,94752],{"className":31553,"code":94751,"language":31555,"meta":104,"style":104},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[106,94753,94754,94770,94775,94780,94784],{"__ignoreMap":104},[109,94755,94756,94758,94760,94762,94764,94766,94768],{"class":111,"line":112},[109,94757,1801],{"class":126},[109,94759,130],{"class":122},[109,94761,94177],{"class":126},[109,94763,1755],{"class":133},[109,94765,1914],{"class":126},[109,94767,1008],{"class":133},[109,94769,1330],{"class":126},[109,94771,94772],{"class":111,"line":119},[109,94773,94774],{"class":115},"#对数组中的元素累计求积，可指定轴\n",[109,94776,94777],{"class":111,"line":140},[109,94778,94779],{"class":126},"np.cumprod(b)\n",[109,94781,94782],{"class":111,"line":154},[109,94783,94739],{"class":115},[109,94785,94786],{"class":111,"line":161},[109,94787,94788],{"class":115},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94790,94792],{"id":94791},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[99,94794,94796],{"className":31553,"code":94795,"language":31555,"meta":104,"style":104},"#删除数组中的重复数据，并对数据进行排序\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",[106,94797,94798,94803,94851,94856,94860],{"__ignoreMap":104},[109,94799,94800],{"class":111,"line":112},[109,94801,94802],{"class":115},"#删除数组中的重复数据，并对数据进行排序\n",[109,94804,94805,94807,94809,94811,94813,94815,94817,94819,94821,94823,94825,94827,94829,94831,94833,94835,94837,94839,94841,94843,94845,94847,94849],{"class":111,"line":119},[109,94806,1776],{"class":126},[109,94808,130],{"class":122},[109,94810,94199],{"class":126},[109,94812,1755],{"class":133},[109,94814,1914],{"class":126},[109,94816,1618],{"class":133},[109,94818,1914],{"class":126},[109,94820,1612],{"class":133},[109,94822,1914],{"class":126},[109,94824,2030],{"class":133},[109,94826,1914],{"class":126},[109,94828,1612],{"class":133},[109,94830,1914],{"class":126},[109,94832,1008],{"class":133},[109,94834,1914],{"class":126},[109,94836,1735],{"class":133},[109,94838,1914],{"class":126},[109,94840,1314],{"class":133},[109,94842,1914],{"class":126},[109,94844,2307],{"class":133},[109,94846,1914],{"class":126},[109,94848,1831],{"class":133},[109,94850,5994],{"class":126},[109,94852,94853],{"class":111,"line":140},[109,94854,94855],{"class":126},"np.unique(a)\n",[109,94857,94858],{"class":111,"line":154},[109,94859,94739],{"class":115},[109,94861,94862],{"class":111,"line":161},[109,94863,94864],{"class":115},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94866,94867],{},"升序形式排序",[14,94869,94871],{"id":94870},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[99,94873,94875],{"className":31553,"code":94874,"language":31555,"meta":104,"style":104},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[106,94876,94877,94925,94930],{"__ignoreMap":104},[109,94878,94879,94881,94883,94885,94887,94889,94891,94893,94895,94897,94899,94901,94903,94905,94907,94909,94911,94913,94915,94917,94919,94921,94923],{"class":111,"line":112},[109,94880,1776],{"class":126},[109,94882,130],{"class":122},[109,94884,94199],{"class":126},[109,94886,1755],{"class":133},[109,94888,1914],{"class":126},[109,94890,1618],{"class":133},[109,94892,1914],{"class":126},[109,94894,1612],{"class":133},[109,94896,1914],{"class":126},[109,94898,2030],{"class":133},[109,94900,1914],{"class":126},[109,94902,1612],{"class":133},[109,94904,1914],{"class":126},[109,94906,1008],{"class":133},[109,94908,1914],{"class":126},[109,94910,1735],{"class":133},[109,94912,1914],{"class":126},[109,94914,1314],{"class":133},[109,94916,1914],{"class":126},[109,94918,2307],{"class":133},[109,94920,1914],{"class":126},[109,94922,1831],{"class":133},[109,94924,5994],{"class":126},[109,94926,94927],{"class":111,"line":119},[109,94928,94929],{"class":115},"#返回数组中非零元素的索引\n",[109,94931,94932],{"class":111,"line":140},[109,94933,94934],{"class":126},"np.nonzero(a)\n",[14,94936,94938],{"id":94937},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[99,94940,94942],{"className":31553,"code":94941,"language":31555,"meta":104,"style":104},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[106,94943,94944,94992,94997],{"__ignoreMap":104},[109,94945,94946,94948,94950,94952,94954,94956,94958,94960,94962,94964,94966,94968,94970,94972,94974,94976,94978,94980,94982,94984,94986,94988,94990],{"class":111,"line":112},[109,94947,1776],{"class":126},[109,94949,130],{"class":122},[109,94951,94199],{"class":126},[109,94953,1755],{"class":133},[109,94955,1914],{"class":126},[109,94957,1618],{"class":133},[109,94959,1914],{"class":126},[109,94961,1612],{"class":133},[109,94963,1914],{"class":126},[109,94965,2030],{"class":133},[109,94967,1914],{"class":126},[109,94969,1612],{"class":133},[109,94971,1914],{"class":126},[109,94973,1008],{"class":133},[109,94975,1914],{"class":126},[109,94977,1735],{"class":133},[109,94979,1914],{"class":126},[109,94981,1314],{"class":133},[109,94983,1914],{"class":126},[109,94985,2307],{"class":133},[109,94987,1914],{"class":126},[109,94989,1831],{"class":133},[109,94991,5994],{"class":126},[109,94993,94994],{"class":111,"line":119},[109,94995,94996],{"class":115},"#计算一组数中最大值与最小值的差，可指定轴\n",[109,94998,94999],{"class":111,"line":140},[109,95000,95001],{"class":126},"np.ptp(a)\n",[1467,95003,95004],{},"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":104,"searchDepth":119,"depth":119,"links":95006},[95007,95008,95009,95010,95011,95012,95013,95014,95015,95016,95017],{"id":94269,"depth":119,"text":94270},{"id":94312,"depth":119,"text":94313},{"id":94420,"depth":119,"text":94421},{"id":94514,"depth":119,"text":94515},{"id":94554,"depth":119,"text":94555},{"id":94627,"depth":119,"text":94628},{"id":94695,"depth":119,"text":94696},{"id":94747,"depth":119,"text":94748},{"id":94791,"depth":119,"text":94792},{"id":94870,"depth":119,"text":94871},{"id":94937,"depth":119,"text":94938},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94255,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95024,"title":95025,"body":95026,"description":24550,"extension":1476,"meta":95681,"navigation":157,"path":95682,"seo":95683,"stem":95684,"__hash__":95685},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95027,"toc":95669},[95028,95031,95035,95038,95254,95258,95261,95470,95474,95540,95545,95549,95552,95555,95593,95597,95600,95605,95609,95612,95615,95620,95624,95627,95631,95634,95637,95642,95646,95649,95652,95657,95661,95666],[10,95029,95025],{"id":95030},"_12其他常用函数",[14,95032,95034],{"id":95033},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95036,95037],{},"将数组的数据按照行列复制扩展",[99,95039,95041],{"className":31553,"code":95040,"language":31555,"meta":104,"style":104},"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",[106,95042,95043,95059,95068,95072,95077,95082,95095,95099,95104,95109,95114,95118,95123,95147,95159,95163,95167,95172,95177,95182,95187,95191,95204,95208,95212,95217,95222,95227,95232,95237,95241,95245,95250],{"__ignoreMap":104},[109,95044,95045,95047,95049,95051,95053,95055,95057],{"class":111,"line":112},[109,95046,1776],{"class":126},[109,95048,130],{"class":122},[109,95050,94177],{"class":126},[109,95052,1755],{"class":133},[109,95054,1914],{"class":126},[109,95056,1856],{"class":133},[109,95058,1330],{"class":126},[109,95060,95061,95064,95066],{"class":111,"line":119},[109,95062,95063],{"class":126},"np.tile(a,",[109,95065,1618],{"class":133},[109,95067,1330],{"class":126},[109,95069,95070],{"class":111,"line":140},[109,95071,94739],{"class":115},[109,95073,95074],{"class":111,"line":154},[109,95075,95076],{"class":115},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[109,95078,95079],{"class":111,"line":161},[109,95080,95081],{"class":115},"#行复制两次，列复制三次\n",[109,95083,95084,95087,95089,95091,95093],{"class":111,"line":167},[109,95085,95086],{"class":126},"np.tile(a,(",[109,95088,1618],{"class":133},[109,95090,1914],{"class":126},[109,95092,1612],{"class":133},[109,95094,31672],{"class":126},[109,95096,95097],{"class":111,"line":185},[109,95098,94739],{"class":115},[109,95100,95101],{"class":111,"line":201},[109,95102,95103],{"class":278},"'''\n",[109,95105,95106],{"class":111,"line":206},[109,95107,95108],{"class":278},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[109,95110,95111],{"class":111,"line":218},[109,95112,95113],{"class":278},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[109,95115,95116],{"class":111,"line":223},[109,95117,95103],{"class":278},[109,95119,95120],{"class":111,"line":229},[109,95121,95122],{"class":115},"#创建二维数组\n",[109,95124,95125,95127,95129,95131,95133,95135,95137,95139,95141,95143,95145],{"class":111,"line":244},[109,95126,94481],{"class":126},[109,95128,130],{"class":122},[109,95130,94177],{"class":126},[109,95132,1755],{"class":133},[109,95134,1914],{"class":126},[109,95136,2055],{"class":133},[109,95138,94182],{"class":126},[109,95140,1831],{"class":133},[109,95142,1914],{"class":126},[109,95144,1612],{"class":133},[109,95146,1330],{"class":126},[109,95148,95149,95152,95154,95156],{"class":111,"line":258},[109,95150,95151],{"class":126},"np.tile(aa,",[109,95153,1618],{"class":133},[109,95155,290],{"class":126},[109,95157,95158],{"class":115},"#一个数的时候就是行\n",[109,95160,95161],{"class":111,"line":263},[109,95162,94739],{"class":115},[109,95164,95165],{"class":111,"line":269},[109,95166,95103],{"class":278},[109,95168,95169],{"class":111,"line":304},[109,95170,95171],{"class":278},"array([[ 1,  2,  3,  1,  2,  3],\n",[109,95173,95174],{"class":111,"line":331},[109,95175,95176],{"class":278},"       [ 4,  5,  6,  4,  5,  6],\n",[109,95178,95179],{"class":111,"line":336},[109,95180,95181],{"class":278},"       [ 7,  8,  9,  7,  8,  9],\n",[109,95183,95184],{"class":111,"line":364},[109,95185,95186],{"class":278},"       [10, 11, 12, 10, 11, 12]])\n",[109,95188,95189],{"class":111,"line":391},[109,95190,95103],{"class":278},[109,95192,95193,95196,95198,95200,95202],{"class":111,"line":396},[109,95194,95195],{"class":126},"np.tile(aa,(",[109,95197,1618],{"class":133},[109,95199,1914],{"class":126},[109,95201,1612],{"class":133},[109,95203,31672],{"class":126},[109,95205,95206],{"class":111,"line":402},[109,95207,94739],{"class":115},[109,95209,95210],{"class":111,"line":419},[109,95211,95103],{"class":278},[109,95213,95214],{"class":111,"line":435},[109,95215,95216],{"class":278},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[109,95218,95219],{"class":111,"line":440},[109,95220,95221],{"class":278},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[109,95223,95224],{"class":111,"line":467},[109,95225,95226],{"class":278},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[109,95228,95229],{"class":111,"line":494},[109,95230,95231],{"class":278},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[109,95233,95234],{"class":111,"line":499},[109,95235,95236],{"class":278},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[109,95238,95239],{"class":111,"line":526},[109,95240,95221],{"class":278},[109,95242,95243],{"class":111,"line":552},[109,95244,95226],{"class":278},[109,95246,95247],{"class":111,"line":557},[109,95248,95249],{"class":278},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[109,95251,95252],{"class":111,"line":584},[109,95253,95103],{"class":278},[14,95255,95257],{"id":95256},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95259,95260],{},"repeat()将数组中的每个元素重复若干次",[99,95262,95264],{"className":31553,"code":95263,"language":31555,"meta":104,"style":104},"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",[106,95265,95266,95282,95291,95295,95300,95324,95329,95338,95342,95347,95351,95356,95372,95376,95380,95385,95390,95395,95399,95404,95408,95413,95418,95422,95438,95442,95446,95451,95456,95461,95466],{"__ignoreMap":104},[109,95267,95268,95270,95272,95274,95276,95278,95280],{"class":111,"line":112},[109,95269,1776],{"class":126},[109,95271,130],{"class":122},[109,95273,94177],{"class":126},[109,95275,1755],{"class":133},[109,95277,1914],{"class":126},[109,95279,1856],{"class":133},[109,95281,1330],{"class":126},[109,95283,95284,95287,95289],{"class":111,"line":119},[109,95285,95286],{"class":126},"np.repeat(a,",[109,95288,1612],{"class":133},[109,95290,1330],{"class":126},[109,95292,95293],{"class":111,"line":140},[109,95294,94739],{"class":115},[109,95296,95297],{"class":111,"line":154},[109,95298,95299],{"class":115},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[109,95301,95302,95304,95306,95308,95310,95312,95314,95316,95318,95320,95322],{"class":111,"line":161},[109,95303,94481],{"class":126},[109,95305,130],{"class":122},[109,95307,94177],{"class":126},[109,95309,1755],{"class":133},[109,95311,1914],{"class":126},[109,95313,2055],{"class":133},[109,95315,94182],{"class":126},[109,95317,1831],{"class":133},[109,95319,1914],{"class":126},[109,95321,1612],{"class":133},[109,95323,1330],{"class":126},[109,95325,95326],{"class":111,"line":167},[109,95327,95328],{"class":115},"#这个重复之后二维变成一维\n",[109,95330,95331,95334,95336],{"class":111,"line":185},[109,95332,95333],{"class":126},"np.repeat(aa,",[109,95335,1618],{"class":133},[109,95337,1330],{"class":126},[109,95339,95340],{"class":111,"line":201},[109,95341,95103],{"class":278},[109,95343,95344],{"class":111,"line":206},[109,95345,95346],{"class":278},"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",[109,95348,95349],{"class":111,"line":218},[109,95350,95103],{"class":278},[109,95352,95353],{"class":111,"line":223},[109,95354,95355],{"class":115},"#指定axis\n",[109,95357,95358,95360,95362,95364,95366,95368,95370],{"class":111,"line":229},[109,95359,95333],{"class":126},[109,95361,1618],{"class":133},[109,95363,1914],{"class":126},[109,95365,48689],{"class":6553},[109,95367,130],{"class":122},[109,95369,1314],{"class":133},[109,95371,1330],{"class":126},[109,95373,95374],{"class":111,"line":244},[109,95375,94739],{"class":115},[109,95377,95378],{"class":111,"line":258},[109,95379,95103],{"class":278},[109,95381,95382],{"class":111,"line":263},[109,95383,95384],{"class":278},"array([[ 1,  2,  3],\n",[109,95386,95387],{"class":111,"line":269},[109,95388,95389],{"class":278},"       [ 1,  2,  3],\n",[109,95391,95392],{"class":111,"line":304},[109,95393,95394],{"class":278},"       [ 4,  5,  6],\n",[109,95396,95397],{"class":111,"line":331},[109,95398,95394],{"class":278},[109,95400,95401],{"class":111,"line":336},[109,95402,95403],{"class":278},"       [ 7,  8,  9],\n",[109,95405,95406],{"class":111,"line":364},[109,95407,95403],{"class":278},[109,95409,95410],{"class":111,"line":391},[109,95411,95412],{"class":278},"       [10, 11, 12],\n",[109,95414,95415],{"class":111,"line":396},[109,95416,95417],{"class":278},"       [10, 11, 12]])\n",[109,95419,95420],{"class":111,"line":402},[109,95421,95103],{"class":278},[109,95423,95424,95426,95428,95430,95432,95434,95436],{"class":111,"line":419},[109,95425,95333],{"class":126},[109,95427,1618],{"class":133},[109,95429,1914],{"class":126},[109,95431,48689],{"class":6553},[109,95433,130],{"class":122},[109,95435,1755],{"class":133},[109,95437,1330],{"class":126},[109,95439,95440],{"class":111,"line":435},[109,95441,94739],{"class":115},[109,95443,95444],{"class":111,"line":440},[109,95445,95103],{"class":278},[109,95447,95448],{"class":111,"line":467},[109,95449,95450],{"class":278},"array([[ 1,  1,  2,  2,  3,  3],\n",[109,95452,95453],{"class":111,"line":494},[109,95454,95455],{"class":278},"       [ 4,  4,  5,  5,  6,  6],\n",[109,95457,95458],{"class":111,"line":499},[109,95459,95460],{"class":278},"       [ 7,  7,  8,  8,  9,  9],\n",[109,95462,95463],{"class":111,"line":526},[109,95464,95465],{"class":278},"       [10, 10, 11, 11, 12, 12]])\n",[109,95467,95468],{"class":111,"line":552},[109,95469,95103],{"class":278},[14,95471,95473],{"id":95472},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[99,95475,95477],{"className":31553,"code":95476,"language":31555,"meta":104,"style":104},"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",[106,95478,95479,95495,95500,95512,95516,95521,95531,95535],{"__ignoreMap":104},[109,95480,95481,95483,95485,95487,95489,95491,95493],{"class":111,"line":112},[109,95482,1776],{"class":126},[109,95484,130],{"class":122},[109,95486,94177],{"class":126},[109,95488,1755],{"class":133},[109,95490,1914],{"class":126},[109,95492,1856],{"class":133},[109,95494,1330],{"class":126},[109,95496,95497],{"class":111,"line":119},[109,95498,95499],{"class":115},"#array([，2，3，4])\n",[109,95501,95502,95505,95507,95509],{"class":111,"line":140},[109,95503,95504],{"class":126},"np.roll(a,",[109,95506,1618],{"class":133},[109,95508,290],{"class":126},[109,95510,95511],{"class":115},"#传正数向后调多少位，传负数向前调多少位\n",[109,95513,95514],{"class":111,"line":154},[109,95515,94739],{"class":115},[109,95517,95518],{"class":111,"line":161},[109,95519,95520],{"class":115},"#array([3, 4, 1, 2])\n",[109,95522,95523,95525,95527,95529],{"class":111,"line":167},[109,95524,95504],{"class":126},[109,95526,2064],{"class":122},[109,95528,1755],{"class":133},[109,95530,1330],{"class":126},[109,95532,95533],{"class":111,"line":185},[109,95534,94739],{"class":115},[109,95536,95537],{"class":111,"line":201},[109,95538,95539],{"class":115},"#array([2, 3, 4, 1])\n",[19,95541,95542],{},[938,95543],{"alt":104,"src":95544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95546,95548],{"id":95547},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95550,95551],{},"resize()重新调整数组的大小",[19,95553,95554],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[99,95556,95558],{"className":31553,"code":95557,"language":31555,"meta":104,"style":104},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[106,95559,95560,95565,95578],{"__ignoreMap":104},[109,95561,95562],{"class":111,"line":112},[109,95563,95564],{"class":115},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[109,95566,95567,95570,95572,95574,95576],{"class":111,"line":119},[109,95568,95569],{"class":126},"np.resize(aa,(",[109,95571,1618],{"class":133},[109,95573,1914],{"class":126},[109,95575,1881],{"class":133},[109,95577,31672],{"class":126},[109,95579,95580,95582,95584,95586,95588,95590],{"class":111,"line":140},[109,95581,95569],{"class":126},[109,95583,1618],{"class":133},[109,95585,1914],{"class":126},[109,95587,1956],{"class":133},[109,95589,83946],{"class":126},[109,95591,95592],{"class":115},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95594,95596],{"id":95595},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95598,95599],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95601,95602],{},[938,95603],{"alt":104,"src":95604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95606,95608],{"id":95607},"_126-保存加载文件","12.6 保存加载文件",[19,95610,95611],{},"savetxt():将数据保存到txt文件中",[19,95613,95614],{},"loadtxt():从文件加载数据",[19,95616,95617],{},[938,95618],{"alt":104,"src":95619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95621,95623],{"id":95622},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95625,95626],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95628,95630],{"id":95629},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95632,95633],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95635,95636],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95638,95639],{},[938,95640],{"alt":104,"src":95641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95643,95645],{"id":95644},"_129-where语句","12.9 where语句",[19,95647,95648],{},"np.where(条件,x,y)",[19,95650,95651],{},"如果条件为True,对应值为x,否则对应值为y",[19,95653,95654],{},[938,95655],{"alt":104,"src":95656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95658,95660],{"id":95659},"_1210-dot矩阵","12.10 dot()矩阵",[19,95662,95663],{},[938,95664],{"alt":104,"src":95665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1467,95667,95668],{},"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":104,"searchDepth":119,"depth":119,"links":95670},[95671,95672,95673,95674,95675,95676,95677,95678,95679,95680],{"id":95033,"depth":119,"text":95034},{"id":95256,"depth":119,"text":95257},{"id":95472,"depth":119,"text":95473},{"id":95547,"depth":119,"text":95548},{"id":95595,"depth":119,"text":95596},{"id":95607,"depth":119,"text":95608},{"id":95622,"depth":119,"text":95623},{"id":95629,"depth":119,"text":95630},{"id":95644,"depth":119,"text":95645},{"id":95659,"depth":119,"text":95660},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95025,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95687,"title":95688,"body":95689,"description":24550,"extension":1476,"meta":96042,"navigation":157,"path":96043,"seo":96044,"stem":96045,"__hash__":96046},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95690,"toc":96040},[95691,95694,95697,95700,95703,95706,95771,95773,96037],[10,95692,95688],{"id":95693},"_13数组排序",[19,95695,95696],{},"排序主要用到的方法是np.sort和np.argsort",[19,95698,95699],{},"其中np.sort()对数组直接排序",[19,95701,95702],{},"而np.argsort()是返回排序后的原始索引",[19,95704,95705],{},"①一维数组",[99,95707,95709],{"className":31553,"code":95708,"language":31555,"meta":104,"style":104},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[106,95710,95711,95715,95755,95763],{"__ignoreMap":104},[109,95712,95713],{"class":111,"line":112},[109,95714,94280],{"class":115},[109,95716,95717,95719,95721,95723,95725,95727,95729,95731,95733,95735,95737,95739,95741,95743,95745,95747,95749,95751,95753],{"class":111,"line":119},[109,95718,1776],{"class":126},[109,95720,130],{"class":122},[109,95722,94199],{"class":126},[109,95724,1612],{"class":133},[109,95726,1914],{"class":126},[109,95728,2030],{"class":133},[109,95730,1914],{"class":126},[109,95732,1931],{"class":133},[109,95734,1914],{"class":126},[109,95736,2307],{"class":133},[109,95738,1914],{"class":126},[109,95740,1817],{"class":133},[109,95742,1914],{"class":126},[109,95744,2424],{"class":133},[109,95746,1914],{"class":126},[109,95748,1881],{"class":133},[109,95750,1914],{"class":126},[109,95752,1008],{"class":133},[109,95754,5994],{"class":126},[109,95756,95757,95760],{"class":111,"line":140},[109,95758,95759],{"class":126},"np.sort(a)",[109,95761,95762],{"class":115},"#升序排序\n",[109,95764,95765,95768],{"class":111,"line":154},[109,95766,95767],{"class":126},"np.argsort(a)",[109,95769,95770],{"class":115},"#按照元素大小来索引排序\n",[19,95772,94466],{},[99,95774,95776],{"className":31553,"code":95775,"language":31555,"meta":104,"style":104},"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",[106,95777,95778,95790,95816,95821,95825,95830,95835,95840,95845,95849,95857,95861,95866,95871,95876,95881,95885,95890,95903,95907,95912,95917,95922,95927,95931,95936,95948,95952,95956,95960,95964,95968,95972,95977,95992,95997,96006,96011,96015,96019,96024,96028,96033],{"__ignoreMap":104},[109,95779,95780,95783,95785,95787],{"class":111,"line":112},[109,95781,95782],{"class":126},"np.random.seed(",[109,95784,1314],{"class":133},[109,95786,290],{"class":126},[109,95788,95789],{"class":115},"#保证每次值一样\n",[109,95791,95792,95794,95796,95798,95800,95802,95804,95806,95808,95810,95812,95814],{"class":111,"line":119},[109,95793,94481],{"class":126},[109,95795,130],{"class":122},[109,95797,94289],{"class":126},[109,95799,1351],{"class":133},[109,95801,1914],{"class":126},[109,95803,32671],{"class":6553},[109,95805,130],{"class":122},[109,95807,714],{"class":126},[109,95809,1831],{"class":133},[109,95811,1914],{"class":126},[109,95813,1881],{"class":133},[109,95815,31672],{"class":126},[109,95817,95818],{"class":111,"line":140},[109,95819,95820],{"class":115},"#原数组：\n",[109,95822,95823],{"class":111,"line":154},[109,95824,95103],{"class":278},[109,95826,95827],{"class":111,"line":161},[109,95828,95829],{"class":278},"array([[44, 47, 64, 67, 67,  9],\n",[109,95831,95832],{"class":111,"line":167},[109,95833,95834],{"class":278},"       [83, 21, 36, 87, 70, 88],\n",[109,95836,95837],{"class":111,"line":185},[109,95838,95839],{"class":278},"       [88, 12, 58, 65, 39, 87],\n",[109,95841,95842],{"class":111,"line":201},[109,95843,95844],{"class":278},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[109,95846,95847],{"class":111,"line":206},[109,95848,95103],{"class":278},[109,95850,95851,95854],{"class":111,"line":218},[109,95852,95853],{"class":126},"np.sort(aa)",[109,95855,95856],{"class":115},"#每行进行了排序\n",[109,95858,95859],{"class":111,"line":223},[109,95860,95103],{"class":278},[109,95862,95863],{"class":111,"line":229},[109,95864,95865],{"class":278},"array([[ 9, 44, 47, 64, 67, 67],\n",[109,95867,95868],{"class":111,"line":244},[109,95869,95870],{"class":278},"       [21, 36, 70, 83, 87, 88],\n",[109,95872,95873],{"class":111,"line":258},[109,95874,95875],{"class":278},"       [12, 39, 58, 65, 87, 88],\n",[109,95877,95878],{"class":111,"line":263},[109,95879,95880],{"class":278},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[109,95882,95883],{"class":111,"line":269},[109,95884,95103],{"class":278},[109,95886,95887],{"class":111,"line":304},[109,95888,95889],{"class":115},"#axis=0时\n",[109,95891,95892,95895,95897,95899,95901],{"class":111,"line":331},[109,95893,95894],{"class":126},"np.sort(aa,",[109,95896,48689],{"class":6553},[109,95898,130],{"class":122},[109,95900,1314],{"class":133},[109,95902,1330],{"class":126},[109,95904,95905],{"class":111,"line":336},[109,95906,95103],{"class":278},[109,95908,95909],{"class":111,"line":364},[109,95910,95911],{"class":278},"array([[44, 12, 36, 37, 25,  9],\n",[109,95913,95914],{"class":111,"line":391},[109,95915,95916],{"class":278},"       [46, 21, 58, 65, 39, 77],\n",[109,95918,95919],{"class":111,"line":396},[109,95920,95921],{"class":278},"       [83, 47, 64, 67, 67, 87],\n",[109,95923,95924],{"class":111,"line":402},[109,95925,95926],{"class":278},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[109,95928,95929],{"class":111,"line":419},[109,95930,95103],{"class":278},[109,95932,95933],{"class":111,"line":435},[109,95934,95935],{"class":115},"#axis=1时,为默认值\n",[109,95937,95938,95940,95942,95944,95946],{"class":111,"line":440},[109,95939,95894],{"class":126},[109,95941,48689],{"class":6553},[109,95943,130],{"class":122},[109,95945,1755],{"class":133},[109,95947,1330],{"class":126},[109,95949,95950],{"class":111,"line":467},[109,95951,95103],{"class":278},[109,95953,95954],{"class":111,"line":494},[109,95955,95865],{"class":278},[109,95957,95958],{"class":111,"line":499},[109,95959,95870],{"class":278},[109,95961,95962],{"class":111,"line":526},[109,95963,95875],{"class":278},[109,95965,95966],{"class":111,"line":552},[109,95967,95880],{"class":278},[109,95969,95970],{"class":111,"line":557},[109,95971,95103],{"class":278},[109,95973,95974],{"class":111,"line":584},[109,95975,95976],{"class":115},"#按最后一列排序\n",[109,95978,95979,95981,95983,95986,95988,95990],{"class":111,"line":611},[109,95980,1801],{"class":126},[109,95982,130],{"class":122},[109,95984,95985],{"class":126},"aa[:,",[109,95987,2064],{"class":122},[109,95989,1755],{"class":133},[109,95991,34421],{"class":126},[109,95993,95994],{"class":111,"line":616},[109,95995,95996],{"class":115},"#获取最后一列排好序的索引\n",[109,95998,95999,96001,96003],{"class":111,"line":633},[109,96000,75233],{"class":126},[109,96002,130],{"class":122},[109,96004,96005],{"class":126},"np.argsort(b)\n",[109,96007,96008],{"class":111,"line":649},[109,96009,96010],{"class":126},"aa[index]\n",[109,96012,96013],{"class":111,"line":676},[109,96014,95103],{"class":278},[109,96016,96017],{"class":111,"line":703},[109,96018,95829],{"class":278},[109,96020,96021],{"class":111,"line":708},[109,96022,96023],{"class":278},"       [46, 88, 81, 37, 25, 77],\n",[109,96025,96026],{"class":111,"line":723},[109,96027,95839],{"class":278},[109,96029,96030],{"class":111,"line":728},[109,96031,96032],{"class":278},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[109,96034,96035],{"class":111,"line":739},[109,96036,95103],{"class":278},[1467,96038,96039],{},"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":104,"searchDepth":119,"depth":119,"links":96041},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95688,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96048,"title":96049,"body":96050,"description":24550,"extension":1476,"meta":96080,"navigation":157,"path":96081,"seo":96082,"stem":96083,"__hash__":96084},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96051,"toc":96078},[96052,96055,96058,96061,96064,96067,96070,96073],[10,96053,96049],{"id":96054},"_14广播机制",[19,96056,96057],{},"广播的规则：",[19,96059,96060],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96062,96063],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96065,96066],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96068,96069],{},"3.如果没有维度形状为1，则会引发异常",[19,96071,96072],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96074,96075],{},[938,96076],{"alt":104,"src":96077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":104,"searchDepth":119,"depth":119,"links":96079},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96049,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96086,"title":96087,"body":96088,"description":24550,"extension":1476,"meta":96186,"navigation":157,"path":96187,"seo":96188,"stem":96189,"__hash__":96190},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96089,"toc":96184},[96090,96093,96096,96181],[10,96091,96087],{"id":96092},"_15比较掩码",[19,96094,96095],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[99,96097,96099],{"className":31553,"code":96098,"language":31555,"meta":104,"style":104},"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",[106,96100,96101,96147,96158,96172,96176],{"__ignoreMap":104},[109,96102,96103,96105,96107,96110,96112,96114,96116,96118,96120,96122,96124,96126,96128,96130,96132,96134,96136,96138,96140,96142,96144],{"class":111,"line":112},[109,96104,1776],{"class":126},[109,96106,130],{"class":122},[109,96108,96109],{"class":126},"np.array([[",[109,96111,1755],{"class":133},[109,96113,1914],{"class":126},[109,96115,1618],{"class":133},[109,96117,1914],{"class":126},[109,96119,1612],{"class":133},[109,96121,49205],{"class":126},[109,96123,2005],{"class":133},[109,96125,1914],{"class":126},[109,96127,2030],{"class":133},[109,96129,1914],{"class":126},[109,96131,2055],{"class":133},[109,96133,49205],{"class":126},[109,96135,2257],{"class":133},[109,96137,1914],{"class":126},[109,96139,2282],{"class":133},[109,96141,1914],{"class":126},[109,96143,2307],{"class":133},[109,96145,96146],{"class":126},"]])\n",[109,96148,96149,96151,96153,96155],{"class":111,"line":119},[109,96150,1776],{"class":126},[109,96152,1320],{"class":122},[109,96154,2232],{"class":133},[109,96156,96157],{"class":115},"#结果是一个由True,False组成的数组\n",[109,96159,96160,96163,96165,96167,96169],{"class":111,"line":140},[109,96161,96162],{"class":126},"a[a",[109,96164,1320],{"class":122},[109,96166,2232],{"class":133},[109,96168,2470],{"class":126},[109,96170,96171],{"class":115},"#小于20的元素会存到这个数组中\n",[109,96173,96174],{"class":111,"line":154},[109,96175,94739],{"class":115},[109,96177,96178],{"class":111,"line":161},[109,96179,96180],{"class":115},"#array([ 1,  2,  3, 11, 12, 13])\n",[1467,96182,96183],{},"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":104,"searchDepth":119,"depth":119,"links":96185},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96087,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96192,"title":96193,"body":96194,"description":24550,"extension":1476,"meta":96286,"navigation":157,"path":96287,"seo":96288,"stem":96289,"__hash__":96290},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96195,"toc":96284},[96196,96199,96202,96205,96208,96211,96276,96281],[10,96197,96193],{"id":96198},"_16魔法命令time",[19,96200,96201],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96203,96204],{},"%:行模式",[19,96206,96207],{},"%%:单元格模式",[19,96209,96210],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[99,96212,96214],{"className":31553,"code":96213,"language":31555,"meta":104,"style":104},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[106,96215,96216,96221,96228,96233,96242,96255,96259,96267],{"__ignoreMap":104},[109,96217,96218],{"class":111,"line":112},[109,96219,96220],{"class":115},"#程序执行时间\n",[109,96222,96223,96225],{"class":111,"line":119},[109,96224,31567],{"class":122},[109,96226,96227],{"class":126}," time \n",[109,96229,96230],{"class":111,"line":140},[109,96231,96232],{"class":115},"#获取时间\n",[109,96234,96235,96238,96240],{"class":111,"line":154},[109,96236,96237],{"class":126},"start",[109,96239,130],{"class":122},[109,96241,33593],{"class":126},[109,96243,96244,96247,96250,96252],{"class":111,"line":161},[109,96245,96246],{"class":126},"time.sleep(",[109,96248,96249],{"class":133},"0.4",[109,96251,290],{"class":126},[109,96253,96254],{"class":115},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[109,96256,96257],{"class":111,"line":167},[109,96258,96232],{"class":115},[109,96260,96261,96263,96265],{"class":111,"line":185},[109,96262,46976],{"class":126},[109,96264,130],{"class":122},[109,96266,33593],{"class":126},[109,96268,96269,96271,96273],{"class":111,"line":201},[109,96270,46976],{"class":126},[109,96272,2064],{"class":122},[109,96274,96275],{"class":126},"start\n",[19,96277,96278],{},[938,96279],{"alt":104,"src":96280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1467,96282,96283],{},"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":104,"searchDepth":119,"depth":119,"links":96285},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96193,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96292,"title":96293,"body":96294,"description":24550,"extension":1476,"meta":96329,"navigation":157,"path":96330,"seo":96331,"stem":96332,"__hash__":96333},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96295,"toc":96327},[96296,96299,96302,96305,96308,96311,96314,96317,96322],[10,96297,96293],{"id":96298},"_17魔法命令timeit",[19,96300,96301],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96303,96304],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96306,96307],{},"单元格模式：",[19,96309,96310],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96312,96313],{},"初始化语句执行次数由轮数来决定",[19,96315,96316],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96318,96319],{},[938,96320],{"alt":104,"src":96321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96323,96324],{},[938,96325],{"alt":104,"src":96326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":104,"searchDepth":119,"depth":119,"links":96328},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96293,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96335,"title":96336,"body":96337,"description":24550,"extension":1476,"meta":96355,"navigation":157,"path":96356,"seo":96357,"stem":96358,"__hash__":96359},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96338,"toc":96353},[96339,96342,96345,96348],[10,96340,96336],{"id":96341},"_18魔法命令writefile和run",[19,96343,96344],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96346,96347],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96349,96350],{},[938,96351],{"alt":104,"src":96352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":104,"searchDepth":119,"depth":119,"links":96354},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96336,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96361,"title":96362,"body":96363,"description":24550,"extension":1476,"meta":96416,"navigation":157,"path":96417,"seo":96418,"stem":96419,"__hash__":96420},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96364,"toc":96414},[96365,96368,96371,96373,96376,96379,96384,96387,96390,96393,96396,96399,96402,96405,96408,96411],[10,96366,96362],{"id":96367},"_19魔法命令memit",[19,96369,96370],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96372,25774],{},[19,96374,96375],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96377,96378],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96380,96381],{},[938,96382],{"alt":104,"src":96383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96385,96386],{},"补充：",[19,96388,96389],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96391,96392],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96394,96395],{},"解决方法：",[19,96397,96398],{},"1.cmd",[19,96400,96401],{},"2.依次输入以下代码：",[19,96403,96404],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96406,96407],{},"pip install --upgrade ipython",[19,96409,96410],{},"#升级 memory_profiler 和 setuptools",[19,96412,96413],{},"pip install --upgrade memory_profiler setuptools",{"title":104,"searchDepth":119,"depth":119,"links":96415},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96362,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96422,"title":96423,"body":96424,"description":24550,"extension":1476,"meta":98070,"navigation":157,"path":98071,"seo":98072,"stem":98073,"__hash__":98074},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96425,"toc":98040},[96426,96429,96433,96437,96498,96501,96506,96510,96515,96520,96525,96530,96533,96538,96542,96546,96579,96582,96585,96588,96640,96643,96679,96682,96724,96728,96749,96751,96788,96790,96795,96797,96802,96806,96809,96837,96841,96845,96898,96902,96994,96998,97002,97005,97010,97014,97039,97044,97048,97051,97054,97057,97060,97063,97066,97069,97081,97085,97089,97092,97124,97127,97150,97153,97179,97182,97208,97211,97245,97248,97310,97314,97317,97321,97324,97350,97353,97356,97361,97364,97433,97435,97440,97501,97504,97515,97521,97526,97530,97533,97546,97550,97565,97567,97590,97592,97618,97621,97624,97627,97675,97677,97682,97686,97690,97717,97721,97748,97751,97756,97761,97851,97855,97913,97918,97921,97924,97966,97970,98026,98031,98034,98037],[10,96427,96423],{"id":96428},"_2创建数组",[14,96430,96432],{"id":96431},"_21-array函数创建数组","2.1 array()函数创建数组",[51,96434,96436],{"id":96435},"_221-函数语句","2.2.1 函数语句",[99,96438,96440],{"className":31553,"code":96439,"language":31555,"meta":104,"style":104},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[106,96441,96442],{"__ignoreMap":104},[109,96443,96444,96447,96450,96452,96454,96456,96458,96460,96463,96465,96468,96470,96473,96475,96477,96479,96482,96484,96487,96489,96492,96494,96496],{"class":111,"line":112},[109,96445,96446],{"class":126},"numpy.array(",[109,96448,96449],{"class":133},"object",[109,96451,13608],{"class":126},[109,96453,94675],{"class":6553},[109,96455,14737],{"class":122},[109,96457,40108],{"class":133},[109,96459,13608],{"class":126},[109,96461,96462],{"class":6553},"copy",[109,96464,14737],{"class":122},[109,96466,96467],{"class":133}," True",[109,96469,13608],{"class":126},[109,96471,96472],{"class":6553},"order",[109,96474,14737],{"class":122},[109,96476,40108],{"class":133},[109,96478,13608],{"class":126},[109,96480,96481],{"class":6553},"subok",[109,96483,14737],{"class":122},[109,96485,96486],{"class":133}," False",[109,96488,13608],{"class":126},[109,96490,96491],{"class":6553},"ndmin",[109,96493,14737],{"class":122},[109,96495,734],{"class":133},[109,96497,1330],{"class":126},[19,96499,96500],{},"参数：",[19,96502,96503],{},[938,96504],{"alt":104,"src":96505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[51,96507,96509],{"id":96508},"_222-实例","2.2.2 实例",[19,96511,96512],{},[938,96513],{"alt":104,"src":96514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96516,96517],{},[938,96518],{"alt":104,"src":96519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96521,96522],{},[938,96523],{"alt":104,"src":96524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96526,96527],{},[938,96528],{"alt":104,"src":96529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96531,96532],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96534,96535],{},[938,96536],{"alt":104,"src":96537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96539,96541],{"id":96540},"_22-随机数创建数组","2.2 随机数创建数组",[51,96543,96545],{"id":96544},"_221-random语句","2.2.1 random语句",[99,96547,96549],{"className":31553,"code":96548,"language":31555,"meta":104,"style":104},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[106,96550,96551,96556,96561,96569,96574],{"__ignoreMap":104},[109,96552,96553],{"class":111,"line":112},[109,96554,96555],{"class":115},"#random.random()\n",[109,96557,96558],{"class":111,"line":119},[109,96559,96560],{"class":115},"#确定随机种子,就是每次运行结果是相同的\n",[109,96562,96563,96565,96567],{"class":111,"line":140},[109,96564,95782],{"class":126},[109,96566,1314],{"class":133},[109,96568,1330],{"class":126},[109,96570,96571],{"class":111,"line":154},[109,96572,96573],{"class":126},"np.random.random()\n",[109,96575,96576],{"class":111,"line":161},[109,96577,96578],{"class":115},"#生成一个随机的数目\n",[19,96580,96581],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96583,96584],{},"可以指定数组形状 size",[19,96586,96587],{},"①生成一维数组",[99,96589,96591],{"className":31553,"code":96590,"language":31555,"meta":104,"style":104},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[106,96592,96593,96598,96611,96616,96632],{"__ignoreMap":104},[109,96594,96595],{"class":111,"line":112},[109,96596,96597],{"class":115},"#random.random(size())\n",[109,96599,96600,96603,96605,96607,96609],{"class":111,"line":119},[109,96601,96602],{"class":126},"np.random.random(",[109,96604,32671],{"class":6553},[109,96606,130],{"class":122},[109,96608,1856],{"class":133},[109,96610,1330],{"class":126},[109,96612,96613],{"class":111,"line":140},[109,96614,96615],{"class":115},"#生成一位的五个元素\n",[109,96617,96618,96620,96622,96624,96626,96628,96630],{"class":111,"line":154},[109,96619,1776],{"class":126},[109,96621,130],{"class":122},[109,96623,96602],{"class":126},[109,96625,32671],{"class":6553},[109,96627,130],{"class":122},[109,96629,1831],{"class":133},[109,96631,1330],{"class":126},[109,96633,96634,96637],{"class":111,"line":161},[109,96635,96636],{"class":126},"a.shape ",[109,96638,96639],{"class":115},"#输出数组形状\n",[19,96641,96642],{},"②生成二维数组",[99,96644,96646],{"className":31553,"code":96645,"language":31555,"meta":104,"style":104},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[106,96647,96648,96652,96674],{"__ignoreMap":104},[109,96649,96650],{"class":111,"line":112},[109,96651,94476],{"class":115},[109,96653,96654,96656,96658,96660,96662,96664,96666,96668,96670,96672],{"class":111,"line":119},[109,96655,94481],{"class":126},[109,96657,130],{"class":122},[109,96659,96602],{"class":126},[109,96661,32671],{"class":6553},[109,96663,130],{"class":122},[109,96665,714],{"class":126},[109,96667,1831],{"class":133},[109,96669,1914],{"class":126},[109,96671,1856],{"class":133},[109,96673,31672],{"class":126},[109,96675,96676],{"class":111,"line":140},[109,96677,96678],{"class":115},"#生成四行五列的数组\n",[19,96680,96681],{},"③生成三维数组",[99,96683,96685],{"className":31553,"code":96684,"language":31555,"meta":104,"style":104},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[106,96686,96687,96692,96719],{"__ignoreMap":104},[109,96688,96689],{"class":111,"line":112},[109,96690,96691],{"class":115},"#三维数组\n",[109,96693,96694,96697,96699,96701,96703,96705,96707,96709,96711,96713,96715,96717],{"class":111,"line":119},[109,96695,96696],{"class":126},"aaa",[109,96698,130],{"class":122},[109,96700,96602],{"class":126},[109,96702,32671],{"class":6553},[109,96704,130],{"class":122},[109,96706,714],{"class":126},[109,96708,1618],{"class":133},[109,96710,1914],{"class":126},[109,96712,1612],{"class":133},[109,96714,1914],{"class":126},[109,96716,1831],{"class":133},[109,96718,31672],{"class":126},[109,96720,96721],{"class":111,"line":140},[109,96722,96723],{"class":126},"aaa.shape\n",[51,96725,96727],{"id":96726},"_222-randint语句","2.2.2 randint语句",[99,96729,96731],{"className":31553,"code":96730,"language":31555,"meta":104,"style":104},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[106,96732,96733,96738],{"__ignoreMap":104},[109,96734,96735],{"class":111,"line":112},[109,96736,96737],{"class":115},"#生成随机的整数 random.randint(low,high,size)\n",[109,96739,96740,96742,96744,96746],{"class":111,"line":119},[109,96741,94289],{"class":126},[109,96743,1856],{"class":133},[109,96745,14887],{"class":126},[109,96747,96748],{"class":115},"#0~5中的随机一个数\n",[19,96750,96587],{},[99,96752,96754],{"className":31553,"code":96753,"language":31555,"meta":104,"style":104},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[106,96755,96756,96761,96783],{"__ignoreMap":104},[109,96757,96758],{"class":111,"line":112},[109,96759,96760],{"class":115},"#一维\n",[109,96762,96763,96765,96767,96769,96771,96773,96775,96777,96779,96781],{"class":111,"line":119},[109,96764,94289],{"class":126},[109,96766,1755],{"class":133},[109,96768,1914],{"class":126},[109,96770,2005],{"class":133},[109,96772,1914],{"class":126},[109,96774,32671],{"class":6553},[109,96776,130],{"class":122},[109,96778,714],{"class":126},[109,96780,1008],{"class":133},[109,96782,31672],{"class":126},[109,96784,96785],{"class":111,"line":140},[109,96786,96787],{"class":115},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96789,96642],{},[19,96791,96792],{},[938,96793],{"alt":104,"src":96794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96796,96681],{},[19,96798,96799],{},[938,96800],{"alt":104,"src":96801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[51,96803,96805],{"id":96804},"_222-rand语句","2.2.2 rand语句",[19,96807,96808],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[99,96810,96812],{"className":31553,"code":96811,"language":31555,"meta":104,"style":104},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[106,96813,96814,96827,96832],{"__ignoreMap":104},[109,96815,96816,96819,96821,96823,96825],{"class":111,"line":112},[109,96817,96818],{"class":126},"np.random.rand(",[109,96820,1351],{"class":133},[109,96822,1914],{"class":126},[109,96824,1008],{"class":133},[109,96826,1330],{"class":126},[109,96828,96829],{"class":111,"line":119},[109,96830,96831],{"class":115},"#第一个参数100：行数，表示有100个样本\n",[109,96833,96834],{"class":111,"line":140},[109,96835,96836],{"class":115},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96838,96840],{"id":96839},"_23-arange创建数组","2.3 arange()创建数组",[51,96842,96844],{"id":96843},"_231-函数语句","2.3.1 函数语句",[99,96846,96848],{"className":31553,"code":96847,"language":31555,"meta":104,"style":104},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[106,96849,96850,96864,96869,96874,96879,96884,96889,96894],{"__ignoreMap":104},[109,96851,96852,96855,96857,96859,96862],{"class":111,"line":112},[109,96853,96854],{"class":126},"numpy.arange([start,] stop[, step], ",[109,96856,94675],{"class":6553},[109,96858,130],{"class":122},[109,96860,96861],{"class":133},"None",[109,96863,1330],{"class":126},[109,96865,96866],{"class":111,"line":119},[109,96867,96868],{"class":115},"#参数\n",[109,96870,96871],{"class":111,"line":140},[109,96872,96873],{"class":278},"\"\"\"\n",[109,96875,96876],{"class":111,"line":154},[109,96877,96878],{"class":278},"start:起始值，可选，默认从 0 开始。\n",[109,96880,96881],{"class":111,"line":161},[109,96882,96883],{"class":278},"stop:结束值（不包含该值）。\n",[109,96885,96886],{"class":111,"line":167},[109,96887,96888],{"class":278},"step:步长，可选，默认是 1。可以为浮点数。\n",[109,96890,96891],{"class":111,"line":185},[109,96892,96893],{"class":278},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[109,96895,96896],{"class":111,"line":201},[109,96897,96873],{"class":278},[51,96899,96901],{"id":96900},"_232-实例","2.3.2 实例",[99,96903,96905],{"className":31553,"code":96904,"language":31555,"meta":104,"style":104},"#创建一维数组\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",[106,96906,96907,96911,96935,96940,96945,96949,96972,96976,96980,96985,96990],{"__ignoreMap":104},[109,96908,96909],{"class":111,"line":112},[109,96910,94280],{"class":115},[109,96912,96913,96915,96917,96919,96921,96923,96925,96927,96929,96931,96933],{"class":111,"line":119},[109,96914,94177],{"class":126},[109,96916,1755],{"class":133},[109,96918,1914],{"class":126},[109,96920,2257],{"class":133},[109,96922,1914],{"class":126},[109,96924,1755],{"class":133},[109,96926,1914],{"class":126},[109,96928,94675],{"class":6553},[109,96930,130],{"class":122},[109,96932,123],{"class":133},[109,96934,1330],{"class":126},[109,96936,96937],{"class":111,"line":140},[109,96938,96939],{"class":115},"#输出结果：\n",[109,96941,96942],{"class":111,"line":154},[109,96943,96944],{"class":115},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[109,96946,96947],{"class":111,"line":161},[109,96948,95122],{"class":115},[109,96950,96951,96954,96956,96958,96960,96963,96965,96967,96969],{"class":111,"line":167},[109,96952,96953],{"class":126},"np.array([np.arange(",[109,96955,1755],{"class":133},[109,96957,1914],{"class":126},[109,96959,1831],{"class":133},[109,96961,96962],{"class":126},"),np.arange(",[109,96964,1831],{"class":133},[109,96966,1914],{"class":126},[109,96968,1905],{"class":133},[109,96970,96971],{"class":126},")])\n",[109,96973,96974],{"class":111,"line":185},[109,96975,94739],{"class":115},[109,96977,96978],{"class":111,"line":201},[109,96979,96873],{"class":278},[109,96981,96982],{"class":111,"line":206},[109,96983,96984],{"class":278},"array([[1, 2, 3],\n",[109,96986,96987],{"class":111,"line":218},[109,96988,96989],{"class":278},"       [4, 5, 6]])\n",[109,96991,96992],{"class":111,"line":223},[109,96993,96873],{"class":278},[14,96995,96997],{"id":96996},"_24-生态分布","2.4 生态分布",[51,96999,97001],{"id":97000},"_241-标准正态分布","2.4.1 标准正态分布",[19,97003,97004],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97006,97007],{},[938,97008],{"alt":104,"src":97009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[51,97011,97013],{"id":97012},"_242-常规正态分布","2.4.2 常规正态分布",[99,97015,97017],{"className":31553,"code":97016,"language":31555,"meta":104,"style":104},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[106,97018,97019,97024,97029,97034],{"__ignoreMap":104},[109,97020,97021],{"class":111,"line":112},[109,97022,97023],{"class":126},"random.normal(loc,scale,size)也可以生成正态分布\n",[109,97025,97026],{"class":111,"line":119},[109,97027,97028],{"class":115},"#loc:期望\n",[109,97030,97031],{"class":111,"line":140},[109,97032,97033],{"class":115},"#scale:方差\n",[109,97035,97036],{"class":111,"line":154},[109,97037,97038],{"class":115},"#size:用于确定是几维的数列\n",[19,97040,97041],{},[938,97042],{"alt":104,"src":97043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97045,97047],{"id":97046},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97049,97050],{},"ndim:秩，维度个数",[19,97052,97053],{},"size:数组元素的个数",[19,97055,97056],{},"shape:数组的形状",[19,97058,97059],{},"dtype:数组元素的类型",[19,97061,97062],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97064,97065],{},"他们都是属性，通过数组.属性的形式来确定",[19,97067,97068],{},"如果需要输出多个可以通过以下方式：",[99,97070,97072],{"className":31553,"code":97071,"language":31555,"meta":104,"style":104},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[106,97073,97074],{"__ignoreMap":104},[109,97075,97076,97078],{"class":111,"line":112},[109,97077,31590],{"class":133},[109,97079,97080],{"class":126},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97082,97084],{"id":97083},"_26-其他方式创建数组","2.6 其他方式创建数组",[51,97086,97088],{"id":97087},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97090,97091],{},"①创建一维数组",[99,97093,97095],{"className":31553,"code":97094,"language":31555,"meta":104,"style":104},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[106,97096,97097,97106,97110,97115,97120],{"__ignoreMap":104},[109,97098,97099,97102,97104],{"class":111,"line":112},[109,97100,97101],{"class":126},"np.zeros(",[109,97103,1008],{"class":133},[109,97105,1330],{"class":126},[109,97107,97108],{"class":111,"line":119},[109,97109,96873],{"class":278},[109,97111,97112],{"class":111,"line":140},[109,97113,97114],{"class":278},"输出结果：\n",[109,97116,97117],{"class":111,"line":154},[109,97118,97119],{"class":278},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[109,97121,97122],{"class":111,"line":161},[109,97123,96873],{"class":278},[19,97125,97126],{},"上方代码等价于：",[99,97128,97130],{"className":31553,"code":97129,"language":31555,"meta":104,"style":104},"np.zeros(shape=(10))#创建10个元素的0数组\n",[106,97131,97132],{"__ignoreMap":104},[109,97133,97134,97136,97139,97141,97143,97145,97147],{"class":111,"line":112},[109,97135,97101],{"class":126},[109,97137,97138],{"class":6553},"shape",[109,97140,130],{"class":122},[109,97142,714],{"class":126},[109,97144,1008],{"class":133},[109,97146,83946],{"class":126},[109,97148,97149],{"class":115},"#创建10个元素的0数组\n",[19,97151,97152],{},"也可以指定类型",[99,97154,97156],{"className":31553,"code":97155,"language":31555,"meta":104,"style":104},"#指定类型\nnp.zeros(5,dtype=int)\n",[106,97157,97158,97163],{"__ignoreMap":104},[109,97159,97160],{"class":111,"line":112},[109,97161,97162],{"class":115},"#指定类型\n",[109,97164,97165,97167,97169,97171,97173,97175,97177],{"class":111,"line":119},[109,97166,97101],{"class":126},[109,97168,1856],{"class":133},[109,97170,1914],{"class":126},[109,97172,94675],{"class":6553},[109,97174,130],{"class":122},[109,97176,123],{"class":133},[109,97178,1330],{"class":126},[19,97180,97181],{},"②创建二维数组",[99,97183,97185],{"className":31553,"code":97184,"language":31555,"meta":104,"style":104},"np.zeros((3,4),dtype=int)\n",[106,97186,97187],{"__ignoreMap":104},[109,97188,97189,97192,97194,97196,97198,97200,97202,97204,97206],{"class":111,"line":112},[109,97190,97191],{"class":126},"np.zeros((",[109,97193,1612],{"class":133},[109,97195,1914],{"class":126},[109,97197,1831],{"class":133},[109,97199,43431],{"class":126},[109,97201,94675],{"class":6553},[109,97203,130],{"class":122},[109,97205,123],{"class":133},[109,97207,1330],{"class":126},[19,97209,97210],{},"③创建三维数组",[99,97212,97214],{"className":31553,"code":97213,"language":31555,"meta":104,"style":104},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[106,97215,97216,97221],{"__ignoreMap":104},[109,97217,97218],{"class":111,"line":112},[109,97219,97220],{"class":115},"#创建三维数组\n",[109,97222,97223,97225,97227,97229,97231,97233,97235,97237,97239,97241,97243],{"class":111,"line":119},[109,97224,97191],{"class":126},[109,97226,1612],{"class":133},[109,97228,1914],{"class":126},[109,97230,1831],{"class":133},[109,97232,1914],{"class":126},[109,97234,1856],{"class":133},[109,97236,43431],{"class":126},[109,97238,94675],{"class":6553},[109,97240,130],{"class":122},[109,97242,123],{"class":133},[109,97244,1330],{"class":126},[19,97246,97247],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[99,97249,97251],{"className":31553,"code":97250,"language":31555,"meta":104,"style":104},"#使用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",[106,97252,97253,97258,97273,97278,97283,97305],{"__ignoreMap":104},[109,97254,97255],{"class":111,"line":112},[109,97256,97257],{"class":115},"#使用zeros_like将创建的一维数组变成全0的数组\n",[109,97259,97260,97262,97264,97266,97268,97270],{"class":111,"line":119},[109,97261,1776],{"class":126},[109,97263,130],{"class":122},[109,97265,94177],{"class":126},[109,97267,1831],{"class":133},[109,97269,290],{"class":126},[109,97271,97272],{"class":115},"#这个得到的结果：一维数组0，1，2，3\n",[109,97274,97275],{"class":111,"line":140},[109,97276,97277],{"class":126},"np.zeros_like(a)\n",[109,97279,97280],{"class":111,"line":154},[109,97281,97282],{"class":115},"#使用zeros_like将创建的二维数组变成全0的数组\n",[109,97284,97285,97287,97289,97291,97293,97295,97297,97299,97301,97303],{"class":111,"line":161},[109,97286,94481],{"class":126},[109,97288,130],{"class":122},[109,97290,96602],{"class":126},[109,97292,32671],{"class":6553},[109,97294,130],{"class":122},[109,97296,714],{"class":126},[109,97298,1831],{"class":133},[109,97300,1914],{"class":126},[109,97302,1856],{"class":133},[109,97304,31672],{"class":126},[109,97306,97307],{"class":111,"line":167},[109,97308,97309],{"class":126},"np.zeros_like(aa)\n",[51,97311,97313],{"id":97312},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97315,97316],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[51,97318,97320],{"id":97319},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97322,97323],{},"①empty()用法",[99,97325,97327],{"className":31553,"code":97326,"language":31555,"meta":104,"style":104},"numpy.empty(shape,dtype=float,order='c')\n",[106,97328,97329],{"__ignoreMap":104},[109,97330,97331,97334,97336,97338,97340,97342,97344,97346,97348],{"class":111,"line":112},[109,97332,97333],{"class":126},"numpy.empty(shape,",[109,97335,94675],{"class":6553},[109,97337,130],{"class":122},[109,97339,1584],{"class":133},[109,97341,1914],{"class":126},[109,97343,96472],{"class":6553},[109,97345,130],{"class":122},[109,97347,77203],{"class":278},[109,97349,1330],{"class":126},[19,97351,97352],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97354,97355],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97357,97358],{},[938,97359],{"alt":104,"src":97360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97362,97363],{},"②empty()用法",[99,97365,97367],{"className":31553,"code":97366,"language":31555,"meta":104,"style":104},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[106,97368,97369,97390,97402,97423,97428],{"__ignoreMap":104},[109,97370,97371,97373,97375,97378,97380,97382,97384,97386,97388],{"class":111,"line":112},[109,97372,2377],{"class":126},[109,97374,130],{"class":122},[109,97376,97377],{"class":126},"np.empty(",[109,97379,1008],{"class":133},[109,97381,1914],{"class":126},[109,97383,94675],{"class":6553},[109,97385,130],{"class":122},[109,97387,123],{"class":133},[109,97389,1330],{"class":126},[109,97391,97392,97394,97396,97398,97400],{"class":111,"line":119},[109,97393,2352],{"class":126},[109,97395,130],{"class":122},[109,97397,94177],{"class":126},[109,97399,1856],{"class":133},[109,97401,1330],{"class":126},[109,97403,97404,97407,97409,97412,97414,97416,97419,97421],{"class":111,"line":140},[109,97405,97406],{"class":126},"np.add(",[109,97408,1618],{"class":133},[109,97410,97411],{"class":126},",x,",[109,97413,94229],{"class":6553},[109,97415,130],{"class":122},[109,97417,97418],{"class":126},"y[:",[109,97420,1856],{"class":133},[109,97422,5994],{"class":126},[109,97424,97425],{"class":111,"line":154},[109,97426,97427],{"class":115},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[109,97429,97430],{"class":111,"line":161},[109,97431,97432],{"class":126},"y\n",[19,97434,934],{},[19,97436,97437],{},[938,97438],{"alt":104,"src":97439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[99,97441,97443],{"className":31553,"code":97442,"language":31555,"meta":104,"style":104},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[106,97444,97445,97461,97481,97496],{"__ignoreMap":104},[109,97446,97447,97449,97451,97453,97455,97457,97459],{"class":111,"line":112},[109,97448,2352],{"class":126},[109,97450,130],{"class":122},[109,97452,94177],{"class":126},[109,97454,1755],{"class":133},[109,97456,1914],{"class":126},[109,97458,1881],{"class":133},[109,97460,1330],{"class":126},[109,97462,97463,97465,97467,97469,97471,97473,97475,97477,97479],{"class":111,"line":119},[109,97464,2377],{"class":126},[109,97466,130],{"class":122},[109,97468,97377],{"class":126},[109,97470,1856],{"class":133},[109,97472,1914],{"class":126},[109,97474,94675],{"class":6553},[109,97476,130],{"class":122},[109,97478,123],{"class":133},[109,97480,1330],{"class":126},[109,97482,97483,97486,97488,97490,97492,97494],{"class":111,"line":140},[109,97484,97485],{"class":126},"np.add(x,",[109,97487,1618],{"class":133},[109,97489,1914],{"class":126},[109,97491,94229],{"class":6553},[109,97493,130],{"class":122},[109,97495,94624],{"class":126},[109,97497,97498],{"class":111,"line":154},[109,97499,97500],{"class":115},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97502,97503],{},"③empty_like()",[19,97505,97506],{},[23,97507,97508,97509,97514],{},"创建一个",[23,97510,97511],{},[23,97512,97513],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97516,97517,97520],{},[106,97518,97519],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97522,97523],{},[938,97524],{"alt":104,"src":97525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[51,97527,97529],{"id":97528},"_264-用法","2.6.4 ？？用法",[19,97531,97532],{},"当想查看一个函数的参数时，可以通过？？来实现",[99,97534,97536],{"className":31553,"code":97535,"language":31555,"meta":104,"style":104},"np.full??\n",[106,97537,97538],{"__ignoreMap":104},[109,97539,97540,97543],{"class":111,"line":112},[109,97541,97542],{"class":126},"np.full",[109,97544,97545],{"class":78578},"??\n",[51,97547,97549],{"id":97548},"_265-full创建数组","2.6.5 full()创建数组",[99,97551,97553],{"className":31553,"code":97552,"language":31555,"meta":104,"style":104},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[106,97554,97555,97560],{"__ignoreMap":104},[109,97556,97557],{"class":111,"line":112},[109,97558,97559],{"class":126},"full(shape,fill_value)\n",[109,97561,97562],{"class":111,"line":119},[109,97563,97564],{"class":126},"创建全为某个指定值的数组\n",[19,97566,95705],{},[99,97568,97570],{"className":31553,"code":97569,"language":31555,"meta":104,"style":104},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[106,97571,97572,97577],{"__ignoreMap":104},[109,97573,97574],{"class":111,"line":112},[109,97575,97576],{"class":115},"#创建一个一维数组,以20进行填充\n",[109,97578,97579,97582,97584,97586,97588],{"class":111,"line":119},[109,97580,97581],{"class":126},"np.full(",[109,97583,1008],{"class":133},[109,97585,1914],{"class":126},[109,97587,2232],{"class":133},[109,97589,1330],{"class":126},[19,97591,94466],{},[99,97593,97595],{"className":31553,"code":97594,"language":31555,"meta":104,"style":104},"#创建二维数组\nnp.full((3,5),11)\n",[106,97596,97597,97601],{"__ignoreMap":104},[109,97598,97599],{"class":111,"line":112},[109,97600,95122],{"class":115},[109,97602,97603,97606,97608,97610,97612,97614,97616],{"class":111,"line":119},[109,97604,97605],{"class":126},"np.full((",[109,97607,1612],{"class":133},[109,97609,1914],{"class":126},[109,97611,1856],{"class":133},[109,97613,43431],{"class":126},[109,97615,2005],{"class":133},[109,97617,1330],{"class":126},[19,97619,97620],{},"③full_like用法",[19,97622,97623],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97625,97626],{},"这里是指定填充而已",[99,97628,97630],{"className":31553,"code":97629,"language":31555,"meta":104,"style":104},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[106,97631,97632,97637,97661,97666],{"__ignoreMap":104},[109,97633,97634],{"class":111,"line":112},[109,97635,97636],{"class":115},"#创建一个指定形状数组\n",[109,97638,97639,97641,97643,97645,97647,97649,97651,97653,97655,97657,97659],{"class":111,"line":119},[109,97640,1776],{"class":126},[109,97642,130],{"class":122},[109,97644,94177],{"class":126},[109,97646,1755],{"class":133},[109,97648,1914],{"class":126},[109,97650,1862],{"class":133},[109,97652,94182],{"class":126},[109,97654,1831],{"class":133},[109,97656,1914],{"class":126},[109,97658,1956],{"class":133},[109,97660,1330],{"class":126},[109,97662,97663],{"class":111,"line":140},[109,97664,97665],{"class":115},"#进行指定填充\n",[109,97667,97668,97671,97673],{"class":111,"line":154},[109,97669,97670],{"class":126},"np.full_like(a,",[109,97672,1008],{"class":133},[109,97674,1330],{"class":126},[19,97676,934],{},[19,97678,97679],{},[938,97680],{"alt":104,"src":97681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[51,97683,97685],{"id":97684},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23171,97687,97689],{"id":97688},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[99,97691,97693],{"className":31553,"code":97692,"language":31555,"meta":104,"style":104},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[106,97694,97695,97712],{"__ignoreMap":104},[109,97696,97697,97700,97702,97704,97706,97708,97710],{"class":111,"line":112},[109,97698,97699],{"class":126},"np.eye(",[109,97701,1831],{"class":133},[109,97703,1914],{"class":126},[109,97705,94675],{"class":6553},[109,97707,130],{"class":122},[109,97709,123],{"class":133},[109,97711,1330],{"class":126},[109,97713,97714],{"class":111,"line":119},[109,97715,97716],{"class":115},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23171,97718,97720],{"id":97719},"_2662-法2identity","2.6.6.2 法2：identity()",[99,97722,97724],{"className":31553,"code":97723,"language":31555,"meta":104,"style":104},"#identity()\nnp.identity(5,dtype=int)\n",[106,97725,97726,97731],{"__ignoreMap":104},[109,97727,97728],{"class":111,"line":112},[109,97729,97730],{"class":115},"#identity()\n",[109,97732,97733,97736,97738,97740,97742,97744,97746],{"class":111,"line":119},[109,97734,97735],{"class":126},"np.identity(",[109,97737,1856],{"class":133},[109,97739,1914],{"class":126},[109,97741,94675],{"class":6553},[109,97743,130],{"class":122},[109,97745,123],{"class":133},[109,97747,1330],{"class":126},[19,97749,97750],{},"两个函数是有区别的",[19,97752,97753],{},[938,97754],{"alt":104,"src":97755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97757,97758],{},[938,97759],{"alt":104,"src":97760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[99,97762,97764],{"className":31553,"code":97763,"language":31555,"meta":104,"style":104},"# 创建一个 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",[106,97765,97766,97771,97783,97788,97793,97798,97803,97807,97812,97832,97836,97841,97846],{"__ignoreMap":104},[109,97767,97768],{"class":111,"line":112},[109,97769,97770],{"class":115},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[109,97772,97773,97775,97777,97779,97781],{"class":111,"line":119},[109,97774,97699],{"class":126},[109,97776,1612],{"class":133},[109,97778,13608],{"class":126},[109,97780,1831],{"class":133},[109,97782,1330],{"class":126},[109,97784,97785],{"class":111,"line":140},[109,97786,97787],{"class":115},"# 输出:\n",[109,97789,97790],{"class":111,"line":154},[109,97791,97792],{"class":115},"# [[1. 0. 0. 0.]\n",[109,97794,97795],{"class":111,"line":161},[109,97796,97797],{"class":115},"#  [0. 1. 0. 0.]\n",[109,97799,97800],{"class":111,"line":167},[109,97801,97802],{"class":115},"#  [0. 0. 1. 0.]]\n",[109,97804,97805],{"class":111,"line":185},[109,97806,158],{"emptyLinePlaceholder":157},[109,97808,97809],{"class":111,"line":201},[109,97810,97811],{"class":115},"# 对角线向上偏移1\n",[109,97813,97814,97816,97818,97820,97822,97824,97826,97828,97830],{"class":111,"line":206},[109,97815,97699],{"class":126},[109,97817,1612],{"class":133},[109,97819,13608],{"class":126},[109,97821,1831],{"class":133},[109,97823,13608],{"class":126},[109,97825,2025],{"class":6553},[109,97827,130],{"class":122},[109,97829,1755],{"class":133},[109,97831,1330],{"class":126},[109,97833,97834],{"class":111,"line":218},[109,97835,97787],{"class":115},[109,97837,97838],{"class":111,"line":223},[109,97839,97840],{"class":115},"# [[0. 1. 0. 0.]\n",[109,97842,97843],{"class":111,"line":229},[109,97844,97845],{"class":115},"#  [0. 0. 1. 0.]\n",[109,97847,97848],{"class":111,"line":244},[109,97849,97850],{"class":115},"#  [0. 0. 0. 1.]]\n",[51,97852,97854],{"id":97853},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[99,97856,97858],{"className":31553,"code":97857,"language":31555,"meta":104,"style":104},"#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",[106,97859,97860,97865,97869,97874,97879,97884,97889,97894,97899,97904,97909],{"__ignoreMap":104},[109,97861,97862],{"class":111,"line":112},[109,97863,97864],{"class":115},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[109,97866,97867],{"class":111,"line":119},[109,97868,96873],{"class":278},[109,97870,97871],{"class":111,"line":140},[109,97872,97873],{"class":278},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[109,97875,97876],{"class":111,"line":154},[109,97877,97878],{"class":278},"参数介绍：\n",[109,97880,97881],{"class":111,"line":161},[109,97882,97883],{"class":278},"start：序列的起始值\n",[109,97885,97886],{"class":111,"line":167},[109,97887,97888],{"class":278},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[109,97890,97891],{"class":111,"line":185},[109,97892,97893],{"class":278},"num：要生长的等步长的样本数量，默认为50\n",[109,97895,97896],{"class":111,"line":201},[109,97897,97898],{"class":278},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[109,97900,97901],{"class":111,"line":206},[109,97902,97903],{"class":278},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[109,97905,97906],{"class":111,"line":218},[109,97907,97908],{"class":278},"dtype：ndarry的数据类型\n",[109,97910,97911],{"class":111,"line":223},[109,97912,96873],{"class":278},[19,97914,97915],{},[938,97916],{"alt":104,"src":97917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97919,97920],{},"这里num=是可以省略的",[19,97922,97923],{},"也就是下方两行代码结果是一模一样的",[99,97925,97927],{"className":31553,"code":97926,"language":31555,"meta":104,"style":104},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[106,97928,97929,97946],{"__ignoreMap":104},[109,97930,97931,97934,97936,97938,97940,97942,97944],{"class":111,"line":112},[109,97932,97933],{"class":126},"np.linspace(",[109,97935,1755],{"class":133},[109,97937,1914],{"class":126},[109,97939,1856],{"class":133},[109,97941,1914],{"class":126},[109,97943,1856],{"class":133},[109,97945,1330],{"class":126},[109,97947,97948,97950,97952,97954,97956,97958,97960,97962,97964],{"class":111,"line":119},[109,97949,97933],{"class":126},[109,97951,1755],{"class":133},[109,97953,1914],{"class":126},[109,97955,1856],{"class":133},[109,97957,1914],{"class":126},[109,97959,3045],{"class":6553},[109,97961,130],{"class":122},[109,97963,1856],{"class":133},[109,97965,1330],{"class":126},[51,97967,97969],{"id":97968},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[99,97971,97973],{"className":31553,"code":97972,"language":31555,"meta":104,"style":104},"#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",[106,97974,97975,97980,97984,97989,97994,97999,98004,98008,98013,98018,98022],{"__ignoreMap":104},[109,97976,97977],{"class":111,"line":112},[109,97978,97979],{"class":115},"#logspace函数用于创建一个等比数列，格式如下：\n",[109,97981,97982],{"class":111,"line":119},[109,97983,96873],{"class":278},[109,97985,97986],{"class":111,"line":140},[109,97987,97988],{"class":278},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[109,97990,97991],{"class":111,"line":154},[109,97992,97993],{"class":278},"参数为：\n",[109,97995,97996],{"class":111,"line":161},[109,97997,97998],{"class":278},"start:序列的起始位置为：base**start\n",[109,98000,98001],{"class":111,"line":167},[109,98002,98003],{"class":278},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[109,98005,98006],{"class":111,"line":185},[109,98007,97893],{"class":278},[109,98009,98010],{"class":111,"line":201},[109,98011,98012],{"class":278},"endpoint：是否包含 stop 这个值，默认是 True\n",[109,98014,98015],{"class":111,"line":206},[109,98016,98017],{"class":278},"base：对数的底数，默认是 10（常见对数）\n",[109,98019,98020],{"class":111,"line":218},[109,98021,97908],{"class":278},[109,98023,98024],{"class":111,"line":223},[109,98025,96873],{"class":278},[19,98027,98028],{},[938,98029],{"alt":104,"src":98030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98032,98033],{},"logspace()函数中的num参数也是可以不写num=的",[19,98035,98036],{},"endpoint是不可以省略的",[1467,98038,98039],{},"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":104,"searchDepth":119,"depth":119,"links":98041},[98042,98046,98051,98055,98059,98060],{"id":96431,"depth":119,"text":96432,"children":98043},[98044,98045],{"id":96435,"depth":140,"text":96436},{"id":96508,"depth":140,"text":96509},{"id":96540,"depth":119,"text":96541,"children":98047},[98048,98049,98050],{"id":96544,"depth":140,"text":96545},{"id":96726,"depth":140,"text":96727},{"id":96804,"depth":140,"text":96805},{"id":96839,"depth":119,"text":96840,"children":98052},[98053,98054],{"id":96843,"depth":140,"text":96844},{"id":96900,"depth":140,"text":96901},{"id":96996,"depth":119,"text":96997,"children":98056},[98057,98058],{"id":97000,"depth":140,"text":97001},{"id":97012,"depth":140,"text":97013},{"id":97046,"depth":119,"text":97047},{"id":97083,"depth":119,"text":97084,"children":98061},[98062,98063,98064,98065,98066,98067,98068,98069],{"id":97087,"depth":140,"text":97088},{"id":97312,"depth":140,"text":97313},{"id":97319,"depth":140,"text":97320},{"id":97528,"depth":140,"text":97529},{"id":97548,"depth":140,"text":97549},{"id":97684,"depth":140,"text":97685},{"id":97853,"depth":140,"text":97854},{"id":97968,"depth":140,"text":97969},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96423,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98076,"title":98077,"body":98078,"description":24550,"extension":1476,"meta":98171,"navigation":157,"path":98172,"seo":98173,"stem":98174,"__hash__":98175},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98079,"toc":98169},[98080,98083,98086,98089,98092,98095,98098,98101,98104,98107,98110,98113,98115,98118,98121,98126,98129,98132,98166],[10,98081,98077],{"id":98082},"_20魔法命令mprun",[19,98084,98085],{},"逐行分析数据内存的使用情况",[19,98087,98088],{},"语法格式：",[19,98090,98091],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98093,98094],{},"分析结果列如下：",[19,98096,98097],{},"Line行号",[19,98099,98100],{},"Mem usage内存使用大小",[19,98102,98103],{},"increment内存增量",[19,98105,98106],{},"Line content代码内容",[19,98108,98109],{},"补充说明：",[19,98111,98112],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98114,96378],{},[19,98116,98117],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98119,98120],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98122,98123],{},[938,98124],{"alt":104,"src":98125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98127,98128],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98130,98131],{},"这时候需要重新加载模块",[99,98133,98135],{"className":31553,"code":98134,"language":31555,"meta":104,"style":104},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[106,98136,98137,98142,98149,98154],{"__ignoreMap":104},[109,98138,98139],{"class":111,"line":112},[109,98140,98141],{"class":115},"#重新加载模块\n",[109,98143,98144,98146],{"class":111,"line":119},[109,98145,31567],{"class":122},[109,98147,98148],{"class":126}," importlib\n",[109,98150,98151],{"class":111,"line":140},[109,98152,98153],{"class":126},"importlib.reload(mprun_test)\n",[109,98155,98156,98158,98161,98163],{"class":111,"line":154},[109,98157,1865],{"class":122},[109,98159,98160],{"class":126},"mprun ",[109,98162,2064],{"class":122},[109,98164,98165],{"class":126},"f mprun_test.fun_test mprun_test.fun_test()\n",[1467,98167,98168],{},"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":104,"searchDepth":119,"depth":119,"links":98170},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98077,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98177,"title":98178,"body":98179,"description":24550,"extension":1476,"meta":98196,"navigation":157,"path":98197,"seo":98198,"stem":98199,"__hash__":98200},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98180,"toc":98194},[98181,98184,98189],[10,98182,98178],{"id":98183},"_3一维数组的索引和切片",[19,98185,98186],{},[938,98187],{"alt":104,"src":98188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98190,98191],{},[938,98192],{"alt":104,"src":98193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":104,"searchDepth":119,"depth":119,"links":98195},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98178,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98202,"title":98203,"body":98204,"description":24550,"extension":1476,"meta":98687,"navigation":157,"path":98688,"seo":98689,"stem":98690,"__hash__":98691},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98205,"toc":98685},[98206,98209,98212,98217,98250,98253,98291,98294,98328,98331,98436,98439,98476,98479,98580,98583,98634,98637,98679,98682],[10,98207,98203],{"id":98208},"_4二维数组的索引与切片",[19,98210,98211],{},"①获取指定单个元素",[19,98213,98214],{},[938,98215],{"alt":104,"src":98216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[99,98218,98220],{"className":31553,"code":98219,"language":31555,"meta":104,"style":104},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[106,98221,98222,98227,98232,98237],{"__ignoreMap":104},[109,98223,98224],{"class":111,"line":112},[109,98225,98226],{"class":115},"#获取元素9\n",[109,98228,98229],{"class":111,"line":119},[109,98230,98231],{"class":115},"#先获取所在行，再获取所在列\n",[109,98233,98234],{"class":111,"line":140},[109,98235,98236],{"class":115},"#数组[行索引号，列索引号]\n",[109,98238,98239,98242,98244,98246,98248],{"class":111,"line":154},[109,98240,98241],{"class":126},"a[",[109,98243,1755],{"class":133},[109,98245,1914],{"class":126},[109,98247,1618],{"class":133},[109,98249,34421],{"class":126},[19,98251,98252],{},"②获取整行元素",[99,98254,98256],{"className":31553,"code":98255,"language":31555,"meta":104,"style":104},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[106,98257,98258,98263,98268,98276,98281],{"__ignoreMap":104},[109,98259,98260],{"class":111,"line":112},[109,98261,98262],{"class":115},"#获取整行 数组[行索引号]\n",[109,98264,98265],{"class":111,"line":119},[109,98266,98267],{"class":115},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[109,98269,98270,98272,98274],{"class":111,"line":140},[109,98271,98241],{"class":126},[109,98273,1618],{"class":133},[109,98275,34421],{"class":126},[109,98277,98278],{"class":111,"line":154},[109,98279,98280],{"class":115},"#也可以负索引获取一行\n",[109,98282,98283,98285,98287,98289],{"class":111,"line":161},[109,98284,98241],{"class":126},[109,98286,2064],{"class":122},[109,98288,1755],{"class":133},[109,98290,34421],{"class":126},[19,98292,98293],{},"③获取整列元素",[99,98295,98297],{"className":31553,"code":98296,"language":31555,"meta":104,"style":104},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[106,98298,98299,98304,98313,98318],{"__ignoreMap":104},[109,98300,98301],{"class":111,"line":112},[109,98302,98303],{"class":115},"#获取整列 数组名[:,列索引]\n",[109,98305,98306,98309,98311],{"class":111,"line":119},[109,98307,98308],{"class":126},"a[:,",[109,98310,1618],{"class":133},[109,98312,34421],{"class":126},[109,98314,98315],{"class":111,"line":140},[109,98316,98317],{"class":115},"#也可以负索引获取一列\n",[109,98319,98320,98322,98324,98326],{"class":111,"line":154},[109,98321,98308],{"class":126},[109,98323,2064],{"class":122},[109,98325,1755],{"class":133},[109,98327,34421],{"class":126},[19,98329,98330],{},"④部分行部分列的元素",[99,98332,98334],{"className":31553,"code":98333,"language":31555,"meta":104,"style":104},"#部分行部分列 数组名[行切片，列切片]\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",[106,98335,98336,98341,98351,98355,98359,98364,98369,98373,98385,98389,98393,98398,98403,98408,98413,98417,98422],{"__ignoreMap":104},[109,98337,98338],{"class":111,"line":112},[109,98339,98340],{"class":115},"#部分行部分列 数组名[行切片，列切片]\n",[109,98342,98343,98346,98348],{"class":111,"line":119},[109,98344,98345],{"class":126},"a[:",[109,98347,1618],{"class":133},[109,98349,98350],{"class":126},",:]\n",[109,98352,98353],{"class":111,"line":140},[109,98354,94739],{"class":115},[109,98356,98357],{"class":111,"line":154},[109,98358,95103],{"class":278},[109,98360,98361],{"class":111,"line":161},[109,98362,98363],{"class":278},"array([[ 1,  2,  3,  4,  5,  6],\n",[109,98365,98366],{"class":111,"line":167},[109,98367,98368],{"class":278},"       [ 7,  8,  9, 10, 11, 12]])\n",[109,98370,98371],{"class":111,"line":185},[109,98372,95103],{"class":278},[109,98374,98375,98377,98379,98381,98383],{"class":111,"line":201},[109,98376,98308],{"class":126},[109,98378,1755],{"class":133},[109,98380,2391],{"class":126},[109,98382,1831],{"class":133},[109,98384,34421],{"class":126},[109,98386,98387],{"class":111,"line":206},[109,98388,94739],{"class":115},[109,98390,98391],{"class":111,"line":218},[109,98392,95103],{"class":278},[109,98394,98395],{"class":111,"line":223},[109,98396,98397],{"class":278},"array([[ 2,  3,  4],\n",[109,98399,98400],{"class":111,"line":229},[109,98401,98402],{"class":278},"       [ 8,  9, 10],\n",[109,98404,98405],{"class":111,"line":244},[109,98406,98407],{"class":278},"       [14, 15, 16],\n",[109,98409,98410],{"class":111,"line":258},[109,98411,98412],{"class":278},"       [20, 21, 22]])\n",[109,98414,98415],{"class":111,"line":263},[109,98416,95103],{"class":278},[109,98418,98419],{"class":111,"line":269},[109,98420,98421],{"class":115},"#对列行同时进行切片，使用了step参数\n",[109,98423,98424,98427,98429,98432,98434],{"class":111,"line":304},[109,98425,98426],{"class":126},"a[::",[109,98428,1618],{"class":133},[109,98430,98431],{"class":126},",::",[109,98433,1618],{"class":133},[109,98435,34421],{"class":126},[19,98437,98438],{},"⑤同时获取两个元素",[99,98440,98442],{"className":31553,"code":98441,"language":31555,"meta":104,"style":104},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[106,98443,98444,98449,98454],{"__ignoreMap":104},[109,98445,98446],{"class":111,"line":112},[109,98447,98448],{"class":115},"#同时获取第三行第二列，第四行第一列\n",[109,98450,98451],{"class":111,"line":119},[109,98452,98453],{"class":115},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[109,98455,98456,98459,98461,98463,98465,98467,98469,98471,98473],{"class":111,"line":140},[109,98457,98458],{"class":126},"a[(",[109,98460,1618],{"class":133},[109,98462,1914],{"class":126},[109,98464,1612],{"class":133},[109,98466,43422],{"class":126},[109,98468,1755],{"class":133},[109,98470,1914],{"class":126},[109,98472,1314],{"class":133},[109,98474,98475],{"class":126},")]\n",[19,98477,98478],{},"⑥切片，对行进行反向获取",[99,98480,98482],{"className":31553,"code":98481,"language":31555,"meta":104,"style":104},"#切片 对所有行进行反向获取\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",[106,98483,98484,98489,98499,98503,98507,98512,98517,98522,98527,98531,98536,98552,98556,98561,98566,98571,98576],{"__ignoreMap":104},[109,98485,98486],{"class":111,"line":112},[109,98487,98488],{"class":115},"#切片 对所有行进行反向获取\n",[109,98490,98491,98493,98495,98497],{"class":111,"line":119},[109,98492,98426],{"class":126},[109,98494,2064],{"class":122},[109,98496,1755],{"class":133},[109,98498,34421],{"class":126},[109,98500,98501],{"class":111,"line":140},[109,98502,94739],{"class":115},[109,98504,98505],{"class":111,"line":154},[109,98506,95103],{"class":278},[109,98508,98509],{"class":111,"line":161},[109,98510,98511],{"class":278},"array([[19, 20, 21, 22, 23, 24],\n",[109,98513,98514],{"class":111,"line":167},[109,98515,98516],{"class":278},"       [13, 14, 15, 16, 17, 18],\n",[109,98518,98519],{"class":111,"line":185},[109,98520,98521],{"class":278},"       [ 7,  8,  9, 10, 11, 12],\n",[109,98523,98524],{"class":111,"line":201},[109,98525,98526],{"class":278},"       [ 1,  2,  3,  4,  5,  6]])\n",[109,98528,98529],{"class":111,"line":206},[109,98530,95103],{"class":278},[109,98532,98533],{"class":111,"line":218},[109,98534,98535],{"class":115},"#对行列都进行反向切片获取\n",[109,98537,98538,98540,98542,98544,98546,98548,98550],{"class":111,"line":223},[109,98539,98426],{"class":126},[109,98541,2064],{"class":122},[109,98543,1755],{"class":133},[109,98545,98431],{"class":126},[109,98547,2064],{"class":122},[109,98549,1755],{"class":133},[109,98551,34421],{"class":126},[109,98553,98554],{"class":111,"line":229},[109,98555,95103],{"class":278},[109,98557,98558],{"class":111,"line":244},[109,98559,98560],{"class":278},"array([[24, 23, 22, 21, 20, 19],\n",[109,98562,98563],{"class":111,"line":258},[109,98564,98565],{"class":278},"       [18, 17, 16, 15, 14, 13],\n",[109,98567,98568],{"class":111,"line":263},[109,98569,98570],{"class":278},"       [12, 11, 10,  9,  8,  7],\n",[109,98572,98573],{"class":111,"line":269},[109,98574,98575],{"class":278},"       [ 6,  5,  4,  3,  2,  1]])\n",[109,98577,98578],{"class":111,"line":304},[109,98579,95103],{"class":278},[19,98581,98582],{},"⑦修改元素",[99,98584,98586],{"className":31553,"code":98585,"language":31555,"meta":104,"style":104},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[106,98587,98588,98593,98611,98616],{"__ignoreMap":104},[109,98589,98590],{"class":111,"line":112},[109,98591,98592],{"class":115},"#获取前两行和前两列\n",[109,98594,98595,98598,98600,98602,98604,98607,98609],{"class":111,"line":119},[109,98596,98597],{"class":126},"sub_a",[109,98599,130],{"class":122},[109,98601,98345],{"class":126},[109,98603,1618],{"class":133},[109,98605,98606],{"class":126},",:",[109,98608,1618],{"class":133},[109,98610,34421],{"class":126},[109,98612,98613],{"class":111,"line":140},[109,98614,98615],{"class":115},"#修改sub_a第一个元素的值\n",[109,98617,98618,98621,98623,98625,98627,98629,98631],{"class":111,"line":154},[109,98619,98620],{"class":126},"sub_a[",[109,98622,1314],{"class":133},[109,98624,1914],{"class":126},[109,98626,1314],{"class":133},[109,98628,2470],{"class":126},[109,98630,130],{"class":122},[109,98632,98633],{"class":133},"100\n",[19,98635,98636],{},"⑧数组复制copy()",[99,98638,98640],{"className":31553,"code":98639,"language":31555,"meta":104,"style":104},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[106,98641,98642,98647,98657,98662],{"__ignoreMap":104},[109,98643,98644],{"class":111,"line":112},[109,98645,98646],{"class":115},"#数组复制\n",[109,98648,98649,98652,98654],{"class":111,"line":119},[109,98650,98651],{"class":126},"copy_a",[109,98653,130],{"class":122},[109,98655,98656],{"class":126},"np.copy(sub_a)\n",[109,98658,98659],{"class":111,"line":140},[109,98660,98661],{"class":115},"#修改copy_a后不影响原数组\n",[109,98663,98664,98667,98669,98671,98673,98675,98677],{"class":111,"line":154},[109,98665,98666],{"class":126},"copy_a[",[109,98668,1314],{"class":133},[109,98670,1914],{"class":126},[109,98672,1314],{"class":133},[109,98674,2470],{"class":126},[109,98676,130],{"class":122},[109,98678,98633],{"class":133},[19,98680,98681],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1467,98683,98684],{},"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":104,"searchDepth":119,"depth":119,"links":98686},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98203,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98693,"title":98694,"body":98695,"description":24550,"extension":1476,"meta":99187,"navigation":157,"path":99188,"seo":99189,"stem":99190,"__hash__":99191},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98696,"toc":99179},[98697,98700,98704,98707,98710,98763,98766,98791,98794,98813,98833,98836,98852,98856,98902,98906,98948,98952,98955,98958,98961,98964,98967,99029,99089,99093,99096,99153,99157,99162,99171,99176],[10,98698,98694],{"id":98699},"_5改变数组的维度",[14,98701,98703],{"id":98702},"_51-使用reshape","5.1 使用reshape()",[19,98705,98706],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98708,98709],{},"①一维数组转换为二维数组",[99,98711,98713],{"className":31553,"code":98712,"language":31555,"meta":104,"style":104},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[106,98714,98715,98731,98736,98741,98746],{"__ignoreMap":104},[109,98716,98717,98719,98721,98723,98725,98727,98729],{"class":111,"line":112},[109,98718,1776],{"class":126},[109,98720,130],{"class":122},[109,98722,94177],{"class":126},[109,98724,1755],{"class":133},[109,98726,1914],{"class":126},[109,98728,2055],{"class":133},[109,98730,1330],{"class":126},[109,98732,98733],{"class":111,"line":119},[109,98734,98735],{"class":115},"#将一维数组进行转换\n",[109,98737,98738],{"class":111,"line":140},[109,98739,98740],{"class":115},"#注意点：元素个数不可以变\n",[109,98742,98743],{"class":111,"line":154},[109,98744,98745],{"class":115},"#转换维度要保持一致，不一致就异常！！！\n",[109,98747,98748,98750,98752,98755,98757,98759,98761],{"class":111,"line":161},[109,98749,94481],{"class":126},[109,98751,130],{"class":122},[109,98753,98754],{"class":126},"a.reshape(",[109,98756,1618],{"class":133},[109,98758,1914],{"class":126},[109,98760,1881],{"class":133},[109,98762,1330],{"class":126},[19,98764,98765],{},"②一维数组转换为三维数组",[99,98767,98769],{"className":31553,"code":98768,"language":31555,"meta":104,"style":104},"aaa=a.reshape(2,3,2)\n",[106,98770,98771],{"__ignoreMap":104},[109,98772,98773,98775,98777,98779,98781,98783,98785,98787,98789],{"class":111,"line":112},[109,98774,96696],{"class":126},[109,98776,130],{"class":122},[109,98778,98754],{"class":126},[109,98780,1618],{"class":133},[109,98782,1914],{"class":126},[109,98784,1612],{"class":133},[109,98786,1914],{"class":126},[109,98788,1618],{"class":133},[109,98790,1330],{"class":126},[19,98792,98793],{},"③二维数组转化为一维数组",[99,98795,98797],{"className":31553,"code":98796,"language":31555,"meta":104,"style":104},"#知道元素个数：\naa.reshape(12)\n",[106,98798,98799,98804],{"__ignoreMap":104},[109,98800,98801],{"class":111,"line":112},[109,98802,98803],{"class":115},"#知道元素个数：\n",[109,98805,98806,98809,98811],{"class":111,"line":119},[109,98807,98808],{"class":126},"aa.reshape(",[109,98810,2030],{"class":133},[109,98812,1330],{"class":126},[99,98814,98816],{"className":31553,"code":98815,"language":31555,"meta":104,"style":104},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[106,98817,98818,98823],{"__ignoreMap":104},[109,98819,98820],{"class":111,"line":112},[109,98821,98822],{"class":115},"#不知道元素个数，参数传递-1\n",[109,98824,98825,98827,98829,98831],{"class":111,"line":119},[109,98826,98808],{"class":126},[109,98828,2064],{"class":122},[109,98830,1755],{"class":133},[109,98832,1330],{"class":126},[19,98834,98835],{},"④三维数组转换为一维数组",[99,98837,98839],{"className":31553,"code":98838,"language":31555,"meta":104,"style":104},"aaa.reshape(-1)\n",[106,98840,98841],{"__ignoreMap":104},[109,98842,98843,98846,98848,98850],{"class":111,"line":112},[109,98844,98845],{"class":126},"aaa.reshape(",[109,98847,2064],{"class":122},[109,98849,1755],{"class":133},[109,98851,1330],{"class":126},[14,98853,98855],{"id":98854},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[99,98857,98859],{"className":31553,"code":98858,"language":31555,"meta":104,"style":104},"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",[106,98860,98861,98888,98893,98897],{"__ignoreMap":104},[109,98862,98863,98865,98867,98869,98871,98873,98875,98877,98879,98881,98883,98885],{"class":111,"line":112},[109,98864,94481],{"class":126},[109,98866,130],{"class":122},[109,98868,94177],{"class":126},[109,98870,1755],{"class":133},[109,98872,1914],{"class":126},[109,98874,2055],{"class":133},[109,98876,94182],{"class":126},[109,98878,1618],{"class":133},[109,98880,1914],{"class":126},[109,98882,1881],{"class":133},[109,98884,290],{"class":126},[109,98886,98887],{"class":115},"#转换为2行6列的数组\n",[109,98889,98890],{"class":111,"line":119},[109,98891,98892],{"class":126},"aa.revel()\n",[109,98894,98895],{"class":111,"line":140},[109,98896,94739],{"class":115},[109,98898,98899],{"class":111,"line":154},[109,98900,98901],{"class":115},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98903,98905],{"id":98904},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[99,98907,98909],{"className":31553,"code":98908,"language":31555,"meta":104,"style":104},"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",[106,98910,98911,98935,98940,98944],{"__ignoreMap":104},[109,98912,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931,98933],{"class":111,"line":112},[109,98914,94481],{"class":126},[109,98916,130],{"class":122},[109,98918,94177],{"class":126},[109,98920,1755],{"class":133},[109,98922,1914],{"class":126},[109,98924,2055],{"class":133},[109,98926,94182],{"class":126},[109,98928,1618],{"class":133},[109,98930,1914],{"class":126},[109,98932,1881],{"class":133},[109,98934,1330],{"class":126},[109,98936,98937],{"class":111,"line":119},[109,98938,98939],{"class":126},"aa.flatten()\n",[109,98941,98942],{"class":111,"line":140},[109,98943,94739],{"class":115},[109,98945,98946],{"class":111,"line":154},[109,98947,98901],{"class":115},[14,98949,98951],{"id":98950},"_54-使用resize","5.4 使用resize()",[19,98953,98954],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98956,98957],{},"通过resize方法可以改变数组的维度",[19,98959,98960],{},"#resize修改数组维度",[19,98962,98963],{},"#以元组的形式指定形状",[19,98965,98966],{},"#改变的是原数组",[99,98968,98970],{"className":31553,"code":98969,"language":31555,"meta":104,"style":104},"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",[106,98971,98972,98988,99008,99021,99025],{"__ignoreMap":104},[109,98973,98974,98976,98978,98980,98982,98984,98986],{"class":111,"line":112},[109,98975,1776],{"class":126},[109,98977,130],{"class":122},[109,98979,94177],{"class":126},[109,98981,1755],{"class":133},[109,98983,1914],{"class":126},[109,98985,2055],{"class":133},[109,98987,1330],{"class":126},[109,98989,98990,98993,98995,98997,98999,99001,99003,99005],{"class":111,"line":119},[109,98991,98992],{"class":126},"a.shape",[109,98994,130],{"class":122},[109,98996,714],{"class":126},[109,98998,1618],{"class":133},[109,99000,1914],{"class":126},[109,99002,1881],{"class":133},[109,99004,290],{"class":126},[109,99006,99007],{"class":115},"#改变了原数组\n",[109,99009,99010,99012,99014,99017,99019],{"class":111,"line":140},[109,99011,1776],{"class":126},[109,99013,130],{"class":122},[109,99015,99016],{"class":126},"resize((",[109,99018,2030],{"class":133},[109,99020,31672],{"class":126},[109,99022,99023],{"class":111,"line":154},[109,99024,94739],{"class":115},[109,99026,99027],{"class":111,"line":161},[109,99028,98901],{"class":115},[99,99030,99032],{"className":31553,"code":99031,"language":31555,"meta":104,"style":104},"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",[106,99033,99034,99047,99051,99055,99060,99065,99070,99075,99080,99085],{"__ignoreMap":104},[109,99035,99036,99039,99041,99043,99045],{"class":111,"line":112},[109,99037,99038],{"class":126},"a.resize((",[109,99040,1881],{"class":133},[109,99042,1914],{"class":126},[109,99044,1618],{"class":133},[109,99046,31672],{"class":126},[109,99048,99049],{"class":111,"line":119},[109,99050,94739],{"class":115},[109,99052,99053],{"class":111,"line":140},[109,99054,95103],{"class":278},[109,99056,99057],{"class":111,"line":154},[109,99058,99059],{"class":278},"array([[ 1,  2],\n",[109,99061,99062],{"class":111,"line":161},[109,99063,99064],{"class":278},"       [ 3,  4],\n",[109,99066,99067],{"class":111,"line":167},[109,99068,99069],{"class":278},"       [ 5,  6],\n",[109,99071,99072],{"class":111,"line":185},[109,99073,99074],{"class":278},"       [ 7,  8],\n",[109,99076,99077],{"class":111,"line":201},[109,99078,99079],{"class":278},"       [ 9, 10],\n",[109,99081,99082],{"class":111,"line":206},[109,99083,99084],{"class":278},"       [11, 12]])\n",[109,99086,99087],{"class":111,"line":218},[109,99088,95103],{"class":278},[14,99090,99092],{"id":99091},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99094,99095],{},"改变了原数组",[99,99097,99099],{"className":31553,"code":99098,"language":31555,"meta":104,"style":104},"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",[106,99100,99101,99117,99133,99137,99141,99145,99149],{"__ignoreMap":104},[109,99102,99103,99105,99107,99109,99111,99113,99115],{"class":111,"line":112},[109,99104,1776],{"class":126},[109,99106,130],{"class":122},[109,99108,94177],{"class":126},[109,99110,1755],{"class":133},[109,99112,1914],{"class":126},[109,99114,2055],{"class":133},[109,99116,1330],{"class":126},[109,99118,99119,99121,99123,99125,99127,99129,99131],{"class":111,"line":119},[109,99120,98992],{"class":126},[109,99122,130],{"class":122},[109,99124,714],{"class":126},[109,99126,1618],{"class":133},[109,99128,1914],{"class":126},[109,99130,1881],{"class":133},[109,99132,1330],{"class":126},[109,99134,99135],{"class":111,"line":140},[109,99136,94739],{"class":115},[109,99138,99139],{"class":111,"line":154},[109,99140,95103],{"class":278},[109,99142,99143],{"class":111,"line":161},[109,99144,98363],{"class":278},[109,99146,99147],{"class":111,"line":167},[109,99148,98368],{"class":278},[109,99150,99151],{"class":111,"line":185},[109,99152,95103],{"class":278},[14,99154,99156],{"id":99155},"_56-重要比较","5.6 重要比较：",[19,99158,99159],{},[938,99160],{"alt":104,"src":99161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99163,99164,99165,99167,99168,99170],{},"口诀：NumPy 函数要么用 ",[106,99166,97138],{},"，要么用 ",[106,99169,32671],{},"，创建结构用 shape，造数据用 size",[19,99172,99173],{},[938,99174],{"alt":104,"src":99175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1467,99177,99178],{},"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":104,"searchDepth":119,"depth":119,"links":99180},[99181,99182,99183,99184,99185,99186],{"id":98702,"depth":119,"text":98703},{"id":98854,"depth":119,"text":98855},{"id":98904,"depth":119,"text":98905},{"id":98950,"depth":119,"text":98951},{"id":99091,"depth":119,"text":99092},{"id":99155,"depth":119,"text":99156},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98694,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99193,"title":99194,"body":99195,"description":24550,"extension":1476,"meta":100267,"navigation":157,"path":100268,"seo":100269,"stem":100270,"__hash__":100271},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99196,"toc":100261},[99197,99200,99204,99207,99210,99213,99278,99281,99321,99324,99406,99409,99414,99436,99438,99443,99448,99451,99454,99609,99612,99814,99818,99821,99824,99892,99894,99899,99902,99905,99985,99989,99992,99994,100067,100069,100074,100076,100156,100160,100163,100166,100169,100172,100175,100178,100258],[10,99198,99194],{"id":99199},"_6数组的拼接",[14,99201,99203],{"id":99202},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99205,99206],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99208,99209],{},"函数内部传两个数列构成的数列或者元组",[19,99211,99212],{},"①一维数组的拼接",[99,99214,99216],{"className":31553,"code":99215,"language":31555,"meta":104,"style":104},"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",[106,99217,99218,99238,99258,99263,99268,99273],{"__ignoreMap":104},[109,99219,99220,99222,99224,99226,99228,99230,99232,99234,99236],{"class":111,"line":112},[109,99221,1776],{"class":126},[109,99223,130],{"class":122},[109,99225,94199],{"class":126},[109,99227,1755],{"class":133},[109,99229,1914],{"class":126},[109,99231,1618],{"class":133},[109,99233,1914],{"class":126},[109,99235,1612],{"class":133},[109,99237,5994],{"class":126},[109,99239,99240,99242,99244,99246,99248,99250,99252,99254,99256],{"class":111,"line":119},[109,99241,1801],{"class":126},[109,99243,130],{"class":122},[109,99245,94199],{"class":126},[109,99247,1831],{"class":133},[109,99249,1914],{"class":126},[109,99251,1856],{"class":133},[109,99253,1914],{"class":126},[109,99255,1881],{"class":133},[109,99257,5994],{"class":126},[109,99259,99260],{"class":111,"line":140},[109,99261,99262],{"class":115},"#调用concatenate进行数组拼接\n",[109,99264,99265],{"class":111,"line":154},[109,99266,99267],{"class":126},"np.concatenate((a,b))\n",[109,99269,99270],{"class":111,"line":161},[109,99271,99272],{"class":115},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[109,99274,99275],{"class":111,"line":167},[109,99276,99277],{"class":115},"#np.concatenate([a,b])\n",[19,99279,99280],{},"②一维多个数组拼接",[99,99282,99284],{"className":31553,"code":99283,"language":31555,"meta":104,"style":104},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[106,99285,99286,99291,99311,99316],{"__ignoreMap":104},[109,99287,99288],{"class":111,"line":112},[109,99289,99290],{"class":115},"#也可以多个数组进行拼接\n",[109,99292,99293,99295,99297,99299,99301,99303,99305,99307,99309],{"class":111,"line":119},[109,99294,1826],{"class":126},[109,99296,130],{"class":122},[109,99298,94199],{"class":126},[109,99300,1008],{"class":133},[109,99302,1914],{"class":126},[109,99304,2005],{"class":133},[109,99306,1914],{"class":126},[109,99308,2055],{"class":133},[109,99310,5994],{"class":126},[109,99312,99313],{"class":111,"line":140},[109,99314,99315],{"class":126},"c\n",[109,99317,99318],{"class":111,"line":154},[109,99319,99320],{"class":126},"np.concatenate((a,b,c))\n",[19,99322,99323],{},"③二维数组拼接",[99,99325,99327],{"className":31553,"code":99326,"language":31555,"meta":104,"style":104},"#二维数组使用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",[106,99328,99329,99334,99358,99383,99388,99393],{"__ignoreMap":104},[109,99330,99331],{"class":111,"line":112},[109,99332,99333],{"class":115},"#二维数组使用concatenate进行拼接\n",[109,99335,99336,99338,99340,99342,99344,99346,99348,99350,99352,99354,99356],{"class":111,"line":119},[109,99337,94481],{"class":126},[109,99339,130],{"class":122},[109,99341,94177],{"class":126},[109,99343,1755],{"class":133},[109,99345,1914],{"class":126},[109,99347,2055],{"class":133},[109,99349,94182],{"class":126},[109,99351,1612],{"class":133},[109,99353,1914],{"class":126},[109,99355,1831],{"class":133},[109,99357,1330],{"class":126},[109,99359,99360,99363,99365,99367,99369,99371,99373,99375,99377,99379,99381],{"class":111,"line":140},[109,99361,99362],{"class":126},"bb",[109,99364,130],{"class":122},[109,99366,94177],{"class":126},[109,99368,1874],{"class":133},[109,99370,1914],{"class":126},[109,99372,2174],{"class":133},[109,99374,94182],{"class":126},[109,99376,1612],{"class":133},[109,99378,1914],{"class":126},[109,99380,1831],{"class":133},[109,99382,1330],{"class":126},[109,99384,99385],{"class":111,"line":154},[109,99386,99387],{"class":115},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[109,99389,99390],{"class":111,"line":161},[109,99391,99392],{"class":115},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[109,99394,99395,99398,99400,99402,99404],{"class":111,"line":167},[109,99396,99397],{"class":126},"np.concatenate((aa,bb),",[109,99399,48689],{"class":6553},[109,99401,130],{"class":122},[109,99403,1314],{"class":133},[109,99405,1330],{"class":126},[19,99407,99408],{},"结果：",[19,99410,99411],{},[938,99412],{"alt":104,"src":99413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[99,99415,99417],{"className":31553,"code":99416,"language":31555,"meta":104,"style":104},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[106,99418,99419,99424],{"__ignoreMap":104},[109,99420,99421],{"class":111,"line":112},[109,99422,99423],{"class":115},"#指定axis为1进行拼接\n",[109,99425,99426,99428,99430,99432,99434],{"class":111,"line":119},[109,99427,99397],{"class":126},[109,99429,48689],{"class":6553},[109,99431,130],{"class":122},[109,99433,1755],{"class":133},[109,99435,1330],{"class":126},[19,99437,99408],{},[19,99439,99440],{},[938,99441],{"alt":104,"src":99442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99444,99445],{},[23,99446,99447],{},"二维数组总结：0竖着方向，1横着方向",[19,99449,99450],{},"④三维数组拼接",[19,99452,99453],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[99,99455,99457],{"className":31553,"code":99456,"language":31555,"meta":104,"style":104},"#两个三行六列\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",[106,99458,99459,99464,99492,99522,99527,99544,99549,99554,99559,99576,99581,99586,99591,99604],{"__ignoreMap":104},[109,99460,99461],{"class":111,"line":112},[109,99462,99463],{"class":115},"#两个三行六列\n",[109,99465,99466,99468,99470,99472,99474,99476,99478,99480,99482,99484,99486,99488,99490],{"class":111,"line":119},[109,99467,96696],{"class":126},[109,99469,130],{"class":122},[109,99471,94177],{"class":126},[109,99473,1755],{"class":133},[109,99475,1914],{"class":126},[109,99477,1862],{"class":133},[109,99479,94182],{"class":126},[109,99481,1618],{"class":133},[109,99483,1914],{"class":126},[109,99485,1612],{"class":133},[109,99487,1914],{"class":126},[109,99489,1881],{"class":133},[109,99491,1330],{"class":126},[109,99493,99494,99497,99499,99501,99503,99505,99508,99510,99512,99514,99516,99518,99520],{"class":111,"line":140},[109,99495,99496],{"class":126},"bbb",[109,99498,130],{"class":122},[109,99500,94177],{"class":126},[109,99502,1874],{"class":133},[109,99504,1914],{"class":126},[109,99506,99507],{"class":133},"137",[109,99509,94182],{"class":126},[109,99511,1618],{"class":133},[109,99513,1914],{"class":126},[109,99515,1612],{"class":133},[109,99517,1914],{"class":126},[109,99519,1881],{"class":133},[109,99521,1330],{"class":126},[109,99523,99524],{"class":111,"line":154},[109,99525,99526],{"class":115},"#axis=0\n",[109,99528,99529,99531,99533,99536,99538,99540,99542],{"class":111,"line":161},[109,99530,2227],{"class":126},[109,99532,130],{"class":122},[109,99534,99535],{"class":126},"np.concatenate((aaa,bbb),",[109,99537,48689],{"class":6553},[109,99539,130],{"class":122},[109,99541,1314],{"class":133},[109,99543,1330],{"class":126},[109,99545,99546],{"class":111,"line":167},[109,99547,99548],{"class":126},"s.shape\n",[109,99550,99551],{"class":111,"line":185},[109,99552,99553],{"class":115},"#输出：(4,3,6)\n",[109,99555,99556],{"class":111,"line":201},[109,99557,99558],{"class":115},"#axis=1\n",[109,99560,99561,99564,99566,99568,99570,99572,99574],{"class":111,"line":206},[109,99562,99563],{"class":126},"ss",[109,99565,130],{"class":122},[109,99567,99535],{"class":126},[109,99569,48689],{"class":6553},[109,99571,130],{"class":122},[109,99573,1755],{"class":133},[109,99575,1330],{"class":126},[109,99577,99578],{"class":111,"line":218},[109,99579,99580],{"class":126},"ss.shape\n",[109,99582,99583],{"class":111,"line":223},[109,99584,99585],{"class":115},"#输出：(2,6,6)\n",[109,99587,99588],{"class":111,"line":229},[109,99589,99590],{"class":115},"#axis=2\n",[109,99592,99593,99595,99597,99599,99601],{"class":111,"line":244},[109,99594,99535],{"class":126},[109,99596,48689],{"class":6553},[109,99598,130],{"class":122},[109,99600,1618],{"class":133},[109,99602,99603],{"class":126},").shape\n",[109,99605,99606],{"class":111,"line":258},[109,99607,99608],{"class":115},"#输出：（2，3，12）\n",[19,99610,99611],{},"⑤四维数组拼接",[99,99613,99615],{"className":31553,"code":99614,"language":31555,"meta":104,"style":104},"#两个三行六列\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",[106,99616,99617,99621,99649,99677,99702,99728,99732,99745,99750,99754,99766,99771,99775,99787,99792,99797,99809],{"__ignoreMap":104},[109,99618,99619],{"class":111,"line":112},[109,99620,99463],{"class":115},[109,99622,99623,99625,99627,99629,99631,99633,99635,99637,99639,99641,99643,99645,99647],{"class":111,"line":119},[109,99624,96696],{"class":126},[109,99626,130],{"class":122},[109,99628,94177],{"class":126},[109,99630,1755],{"class":133},[109,99632,1914],{"class":126},[109,99634,1862],{"class":133},[109,99636,94182],{"class":126},[109,99638,1618],{"class":133},[109,99640,1914],{"class":126},[109,99642,1612],{"class":133},[109,99644,1914],{"class":126},[109,99646,1881],{"class":133},[109,99648,1330],{"class":126},[109,99650,99651,99653,99655,99657,99659,99661,99663,99665,99667,99669,99671,99673,99675],{"class":111,"line":140},[109,99652,99496],{"class":126},[109,99654,130],{"class":122},[109,99656,94177],{"class":126},[109,99658,1874],{"class":133},[109,99660,1914],{"class":126},[109,99662,99507],{"class":133},[109,99664,94182],{"class":126},[109,99666,1618],{"class":133},[109,99668,1914],{"class":126},[109,99670,1612],{"class":133},[109,99672,1914],{"class":126},[109,99674,1881],{"class":133},[109,99676,1330],{"class":126},[109,99678,99679,99682,99684,99686,99688,99690,99692,99694,99696,99698,99700],{"class":111,"line":154},[109,99680,99681],{"class":126},"aaaa",[109,99683,130],{"class":122},[109,99685,98845],{"class":126},[109,99687,1618],{"class":133},[109,99689,1914],{"class":126},[109,99691,1612],{"class":133},[109,99693,1914],{"class":126},[109,99695,1612],{"class":133},[109,99697,1914],{"class":126},[109,99699,1618],{"class":133},[109,99701,1330],{"class":126},[109,99703,99704,99707,99709,99712,99714,99716,99718,99720,99722,99724,99726],{"class":111,"line":161},[109,99705,99706],{"class":126},"bbbb",[109,99708,130],{"class":122},[109,99710,99711],{"class":126},"bbb.reshape(",[109,99713,1618],{"class":133},[109,99715,1914],{"class":126},[109,99717,1612],{"class":133},[109,99719,1914],{"class":126},[109,99721,1612],{"class":133},[109,99723,1914],{"class":126},[109,99725,1618],{"class":133},[109,99727,1330],{"class":126},[109,99729,99730],{"class":111,"line":167},[109,99731,99526],{"class":115},[109,99733,99734,99737,99739,99741,99743],{"class":111,"line":185},[109,99735,99736],{"class":126},"np.concatenate((aaaa,bbbb),",[109,99738,48689],{"class":6553},[109,99740,130],{"class":122},[109,99742,1314],{"class":133},[109,99744,99603],{"class":126},[109,99746,99747],{"class":111,"line":201},[109,99748,99749],{"class":115},"#结果：（4，3，3，2）\n",[109,99751,99752],{"class":111,"line":206},[109,99753,99558],{"class":115},[109,99755,99756,99758,99760,99762,99764],{"class":111,"line":218},[109,99757,99736],{"class":126},[109,99759,48689],{"class":6553},[109,99761,130],{"class":122},[109,99763,1755],{"class":133},[109,99765,99603],{"class":126},[109,99767,99768],{"class":111,"line":223},[109,99769,99770],{"class":115},"#结果：（2，6，3，2）\n",[109,99772,99773],{"class":111,"line":229},[109,99774,99590],{"class":115},[109,99776,99777,99779,99781,99783,99785],{"class":111,"line":244},[109,99778,99736],{"class":126},[109,99780,48689],{"class":6553},[109,99782,130],{"class":122},[109,99784,1618],{"class":133},[109,99786,99603],{"class":126},[109,99788,99789],{"class":111,"line":258},[109,99790,99791],{"class":115},"#结果：（2，3，6，2）\n",[109,99793,99794],{"class":111,"line":263},[109,99795,99796],{"class":115},"#axis=3\n",[109,99798,99799,99801,99803,99805,99807],{"class":111,"line":269},[109,99800,99736],{"class":126},[109,99802,48689],{"class":6553},[109,99804,130],{"class":122},[109,99806,1612],{"class":133},[109,99808,99603],{"class":126},[109,99810,99811],{"class":111,"line":304},[109,99812,99813],{"class":115},"#结果：（2，3，3，4）\n",[14,99815,99817],{"id":99816},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99819,99820],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99822,99823],{},"①二维数组",[99,99825,99827],{"className":31553,"code":99826,"language":31555,"meta":104,"style":104},"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",[106,99828,99829,99853,99877,99882,99887],{"__ignoreMap":104},[109,99830,99831,99833,99835,99837,99839,99841,99843,99845,99847,99849,99851],{"class":111,"line":112},[109,99832,94481],{"class":126},[109,99834,130],{"class":122},[109,99836,94177],{"class":126},[109,99838,1755],{"class":133},[109,99840,1914],{"class":126},[109,99842,2055],{"class":133},[109,99844,94182],{"class":126},[109,99846,1612],{"class":133},[109,99848,1914],{"class":126},[109,99850,1831],{"class":133},[109,99852,1330],{"class":126},[109,99854,99855,99857,99859,99861,99863,99865,99867,99869,99871,99873,99875],{"class":111,"line":119},[109,99856,99362],{"class":126},[109,99858,130],{"class":122},[109,99860,94177],{"class":126},[109,99862,1874],{"class":133},[109,99864,1914],{"class":126},[109,99866,2174],{"class":133},[109,99868,94182],{"class":126},[109,99870,1612],{"class":133},[109,99872,1914],{"class":126},[109,99874,1831],{"class":133},[109,99876,1330],{"class":126},[109,99878,99879],{"class":111,"line":140},[109,99880,99881],{"class":126},"np.hstack((aa,bb))\n",[109,99883,99884],{"class":111,"line":154},[109,99885,99886],{"class":115},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[109,99888,99889],{"class":111,"line":161},[109,99890,99891],{"class":115},"#np.hstack([aa,bb])\n",[19,99893,99408],{},[19,99895,99896],{},[938,99897],{"alt":104,"src":99898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99900,99901],{},"等效于concatenate()函数中axis=1时的情况",[19,99903,99904],{},"②三维数组",[99,99906,99908],{"className":31553,"code":99907,"language":31555,"meta":104,"style":104},"#两个三行六列\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",[106,99909,99910,99914,99942,99970,99975,99980],{"__ignoreMap":104},[109,99911,99912],{"class":111,"line":112},[109,99913,99463],{"class":115},[109,99915,99916,99918,99920,99922,99924,99926,99928,99930,99932,99934,99936,99938,99940],{"class":111,"line":119},[109,99917,96696],{"class":126},[109,99919,130],{"class":122},[109,99921,94177],{"class":126},[109,99923,1755],{"class":133},[109,99925,1914],{"class":126},[109,99927,1862],{"class":133},[109,99929,94182],{"class":126},[109,99931,1618],{"class":133},[109,99933,1914],{"class":126},[109,99935,1612],{"class":133},[109,99937,1914],{"class":126},[109,99939,1881],{"class":133},[109,99941,1330],{"class":126},[109,99943,99944,99946,99948,99950,99952,99954,99956,99958,99960,99962,99964,99966,99968],{"class":111,"line":140},[109,99945,99496],{"class":126},[109,99947,130],{"class":122},[109,99949,94177],{"class":126},[109,99951,1874],{"class":133},[109,99953,1914],{"class":126},[109,99955,99507],{"class":133},[109,99957,94182],{"class":126},[109,99959,1618],{"class":133},[109,99961,1914],{"class":126},[109,99963,1612],{"class":133},[109,99965,1914],{"class":126},[109,99967,1881],{"class":133},[109,99969,1330],{"class":126},[109,99971,99972],{"class":111,"line":154},[109,99973,99974],{"class":115},"#使用hstack\n",[109,99976,99977],{"class":111,"line":161},[109,99978,99979],{"class":126},"np.hstack((aaa,bbb)).shape\n",[109,99981,99982],{"class":111,"line":167},[109,99983,99984],{"class":115},"#输出：（2，6，6）\n",[14,99986,99988],{"id":99987},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99990,99991],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99993,99823],{},[99,99995,99997],{"className":31553,"code":99996,"language":31555,"meta":104,"style":104},"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",[106,99998,99999,100023,100047,100052,100057,100062],{"__ignoreMap":104},[109,100000,100001,100003,100005,100007,100009,100011,100013,100015,100017,100019,100021],{"class":111,"line":112},[109,100002,94481],{"class":126},[109,100004,130],{"class":122},[109,100006,94177],{"class":126},[109,100008,1755],{"class":133},[109,100010,1914],{"class":126},[109,100012,2055],{"class":133},[109,100014,94182],{"class":126},[109,100016,1612],{"class":133},[109,100018,1914],{"class":126},[109,100020,1831],{"class":133},[109,100022,1330],{"class":126},[109,100024,100025,100027,100029,100031,100033,100035,100037,100039,100041,100043,100045],{"class":111,"line":119},[109,100026,99362],{"class":126},[109,100028,130],{"class":122},[109,100030,94177],{"class":126},[109,100032,1874],{"class":133},[109,100034,1914],{"class":126},[109,100036,2174],{"class":133},[109,100038,94182],{"class":126},[109,100040,1612],{"class":133},[109,100042,1914],{"class":126},[109,100044,1831],{"class":133},[109,100046,1330],{"class":126},[109,100048,100049],{"class":111,"line":140},[109,100050,100051],{"class":115},"#vstack 垂直方向进行堆叠\n",[109,100053,100054],{"class":111,"line":154},[109,100055,100056],{"class":126},"np.vstack((aa,bb))\n",[109,100058,100059],{"class":111,"line":161},[109,100060,100061],{"class":115},"#与hstack传的参数类似，等价于：\n",[109,100063,100064],{"class":111,"line":167},[109,100065,100066],{"class":126},"np.vstack([aa,bb])\n",[19,100068,99408],{},[19,100070,100071],{},[938,100072],{"alt":104,"src":100073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100075,99904],{},[99,100077,100079],{"className":31553,"code":100078,"language":31555,"meta":104,"style":104},"#两个三行六列\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",[106,100080,100081,100085,100113,100141,100146,100151],{"__ignoreMap":104},[109,100082,100083],{"class":111,"line":112},[109,100084,99463],{"class":115},[109,100086,100087,100089,100091,100093,100095,100097,100099,100101,100103,100105,100107,100109,100111],{"class":111,"line":119},[109,100088,96696],{"class":126},[109,100090,130],{"class":122},[109,100092,94177],{"class":126},[109,100094,1755],{"class":133},[109,100096,1914],{"class":126},[109,100098,1862],{"class":133},[109,100100,94182],{"class":126},[109,100102,1618],{"class":133},[109,100104,1914],{"class":126},[109,100106,1612],{"class":133},[109,100108,1914],{"class":126},[109,100110,1881],{"class":133},[109,100112,1330],{"class":126},[109,100114,100115,100117,100119,100121,100123,100125,100127,100129,100131,100133,100135,100137,100139],{"class":111,"line":140},[109,100116,99496],{"class":126},[109,100118,130],{"class":122},[109,100120,94177],{"class":126},[109,100122,1874],{"class":133},[109,100124,1914],{"class":126},[109,100126,99507],{"class":133},[109,100128,94182],{"class":126},[109,100130,1618],{"class":133},[109,100132,1914],{"class":126},[109,100134,1612],{"class":133},[109,100136,1914],{"class":126},[109,100138,1881],{"class":133},[109,100140,1330],{"class":126},[109,100142,100143],{"class":111,"line":154},[109,100144,100145],{"class":115},"#使用vstack\n",[109,100147,100148],{"class":111,"line":161},[109,100149,100150],{"class":126},"np.vstack((aaa,bbb)).shape\n",[109,100152,100153],{"class":111,"line":167},[109,100154,100155],{"class":115},"#输出：（4，3，6）\n",[14,100157,100159],{"id":100158},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100161,100162],{},"该方法是三维数组特有的方法",[19,100164,100165],{},"也就是说",[19,100167,100168],{},"一维数组拼接方法用：concatenate()",[19,100170,100171],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100173,100174],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100176,100177],{},"四维数组及多维数组只能用concatenate进行拼接",[99,100179,100181],{"className":31553,"code":100180,"language":31555,"meta":104,"style":104},"#两个三行六列\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",[106,100182,100183,100187,100215,100243,100248,100253],{"__ignoreMap":104},[109,100184,100185],{"class":111,"line":112},[109,100186,99463],{"class":115},[109,100188,100189,100191,100193,100195,100197,100199,100201,100203,100205,100207,100209,100211,100213],{"class":111,"line":119},[109,100190,96696],{"class":126},[109,100192,130],{"class":122},[109,100194,94177],{"class":126},[109,100196,1755],{"class":133},[109,100198,1914],{"class":126},[109,100200,1862],{"class":133},[109,100202,94182],{"class":126},[109,100204,1618],{"class":133},[109,100206,1914],{"class":126},[109,100208,1612],{"class":133},[109,100210,1914],{"class":126},[109,100212,1881],{"class":133},[109,100214,1330],{"class":126},[109,100216,100217,100219,100221,100223,100225,100227,100229,100231,100233,100235,100237,100239,100241],{"class":111,"line":140},[109,100218,99496],{"class":126},[109,100220,130],{"class":122},[109,100222,94177],{"class":126},[109,100224,1874],{"class":133},[109,100226,1914],{"class":126},[109,100228,99507],{"class":133},[109,100230,94182],{"class":126},[109,100232,1618],{"class":133},[109,100234,1914],{"class":126},[109,100236,1612],{"class":133},[109,100238,1914],{"class":126},[109,100240,1881],{"class":133},[109,100242,1330],{"class":126},[109,100244,100245],{"class":111,"line":154},[109,100246,100247],{"class":115},"#使用dstack\n",[109,100249,100250],{"class":111,"line":161},[109,100251,100252],{"class":126},"np.dstack((aaa,bbb)).shape\n",[109,100254,100255],{"class":111,"line":167},[109,100256,100257],{"class":115},"#结果：（2，3，12）\n",[1467,100259,100260],{},"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":104,"searchDepth":119,"depth":119,"links":100262},[100263,100264,100265,100266],{"id":99202,"depth":119,"text":99203},{"id":99816,"depth":119,"text":99817},{"id":99987,"depth":119,"text":99988},{"id":100158,"depth":119,"text":100159},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99194,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100273,"title":100274,"body":100275,"description":24550,"extension":1476,"meta":100550,"navigation":157,"path":100551,"seo":100552,"stem":100553,"__hash__":100554},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100276,"toc":100548},[100277,100280,100283,100377,100380,100383,100386,100389,100392,100395,100398,100401,100545],[10,100278,100274],{"id":100279},"_7数组转置",[19,100281,100282],{},"使用transpose()函数",[99,100284,100286],{"className":31553,"code":100285,"language":31555,"meta":104,"style":104},"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",[106,100287,100288,100298,100322,100327,100332,100337,100342,100350,100354,100358,100363,100368,100373],{"__ignoreMap":104},[109,100289,100290,100292,100294,100296],{"class":111,"line":112},[109,100291,31567],{"class":122},[109,100293,32555],{"class":126},[109,100295,32558],{"class":122},[109,100297,32561],{"class":126},[109,100299,100300,100302,100304,100306,100308,100310,100312,100314,100316,100318,100320],{"class":111,"line":119},[109,100301,1776],{"class":126},[109,100303,130],{"class":122},[109,100305,32892],{"class":126},[109,100307,1755],{"class":133},[109,100309,1914],{"class":126},[109,100311,2055],{"class":133},[109,100313,94182],{"class":126},[109,100315,1831],{"class":133},[109,100317,1914],{"class":126},[109,100319,1612],{"class":133},[109,100321,1330],{"class":126},[109,100323,100324],{"class":111,"line":140},[109,100325,100326],{"class":115},"#二维数组转置\n",[109,100328,100329],{"class":111,"line":154},[109,100330,100331],{"class":115},"#调用transpose()函数\n",[109,100333,100334],{"class":111,"line":161},[109,100335,100336],{"class":126},"a.transpose()\n",[109,100338,100339],{"class":111,"line":167},[109,100340,100341],{"class":115},"#对于二维数组也可以采用.T来实现\n",[109,100343,100344,100347],{"class":111,"line":185},[109,100345,100346],{"class":126},"a.T",[109,100348,100349],{"class":115},"#与上述代码一样\n",[109,100351,100352],{"class":111,"line":201},[109,100353,94739],{"class":115},[109,100355,100356],{"class":111,"line":206},[109,100357,95103],{"class":278},[109,100359,100360],{"class":111,"line":218},[109,100361,100362],{"class":278},"array([[ 1,  4,  7, 10],\n",[109,100364,100365],{"class":111,"line":223},[109,100366,100367],{"class":278},"       [ 2,  5,  8, 11],\n",[109,100369,100370],{"class":111,"line":229},[109,100371,100372],{"class":278},"       [ 3,  6,  9, 12]])\n",[109,100374,100375],{"class":111,"line":244},[109,100376,95103],{"class":278},[19,100378,100379],{},"也可以使用np.transpose()的形式",[19,100381,100382],{},"#多维数组进行转置 np.transpose()",[19,100384,100385],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100387,100388],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100390,100391],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100393,100394],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100396,100397],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100399,100400],{},"四维及以上的数组也是一样的道理",[99,100402,100404],{"className":31553,"code":100403,"language":31555,"meta":104,"style":104},"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",[106,100405,100406,100434,100439,100444,100449,100467,100472,100504,100509,100514,100519,100540],{"__ignoreMap":104},[109,100407,100408,100410,100412,100414,100416,100418,100420,100422,100424,100426,100428,100430,100432],{"class":111,"line":112},[109,100409,2352],{"class":126},[109,100411,130],{"class":122},[109,100413,94177],{"class":126},[109,100415,1755],{"class":133},[109,100417,1914],{"class":126},[109,100419,1862],{"class":133},[109,100421,94182],{"class":126},[109,100423,1612],{"class":133},[109,100425,1914],{"class":126},[109,100427,1881],{"class":133},[109,100429,1914],{"class":126},[109,100431,1618],{"class":133},[109,100433,1330],{"class":126},[109,100435,100436],{"class":111,"line":119},[109,100437,100438],{"class":126},"x.shape\n",[109,100440,100441],{"class":111,"line":140},[109,100442,100443],{"class":115},"#结果：（3,6,2）\n",[109,100445,100446],{"class":111,"line":154},[109,100447,100448],{"class":115},"#使用np.transpose()进行转置 变为(2,6,3)\n",[109,100450,100451,100454,100456,100458,100460,100462,100464],{"class":111,"line":161},[109,100452,100453],{"class":126},"np.transpose(x,(",[109,100455,1618],{"class":133},[109,100457,1914],{"class":126},[109,100459,1755],{"class":133},[109,100461,1914],{"class":126},[109,100463,1314],{"class":133},[109,100465,100466],{"class":126},")).shape\n",[109,100468,100469],{"class":111,"line":167},[109,100470,100471],{"class":115},"#结果：(2,6,3)\n",[109,100473,100474,100476,100478,100480,100482,100484,100486,100488,100490,100492,100494,100496,100498,100500,100502],{"class":111,"line":185},[109,100475,99681],{"class":126},[109,100477,130],{"class":122},[109,100479,94177],{"class":126},[109,100481,1755],{"class":133},[109,100483,1914],{"class":126},[109,100485,1862],{"class":133},[109,100487,94182],{"class":126},[109,100489,1612],{"class":133},[109,100491,1914],{"class":126},[109,100493,1618],{"class":133},[109,100495,1914],{"class":126},[109,100497,1755],{"class":133},[109,100499,1914],{"class":126},[109,100501,1881],{"class":133},[109,100503,1330],{"class":126},[109,100505,100506],{"class":111,"line":201},[109,100507,100508],{"class":126},"aaaa.shape\n",[109,100510,100511],{"class":111,"line":206},[109,100512,100513],{"class":115},"#结果：（3，2，1，6）\n",[109,100515,100516],{"class":111,"line":218},[109,100517,100518],{"class":115},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[109,100520,100521,100524,100526,100528,100530,100532,100534,100536,100538],{"class":111,"line":223},[109,100522,100523],{"class":126},"np.transpose(aaaa,(",[109,100525,1755],{"class":133},[109,100527,1914],{"class":126},[109,100529,1618],{"class":133},[109,100531,1914],{"class":126},[109,100533,1314],{"class":133},[109,100535,1914],{"class":126},[109,100537,1612],{"class":133},[109,100539,100466],{"class":126},[109,100541,100542],{"class":111,"line":229},[109,100543,100544],{"class":115},"#结果：(2,1,3,6)\n",[1467,100546,100547],{},"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":104,"searchDepth":119,"depth":119,"links":100549},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100274,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100556,"title":100557,"body":100558,"description":24550,"extension":1476,"meta":101292,"navigation":157,"path":101293,"seo":101294,"stem":101295,"__hash__":101296},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100559,"toc":101290},[100560,100563,100566,100569,100572,100575,100578,100581,100584,100693,100696,100699,101287],[10,100561,100557],{"id":100562},"_8数组分割",[19,100564,100565],{},"split分割",[19,100567,100568],{},"numpy.split(ary,indics_or_sections,axis)",[19,100570,100571],{},"解释：",[19,100573,100574],{},"ary:被分割的数组",[19,100576,100577],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100579,100580],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100582,100583],{},"①一维数组的分割",[99,100585,100587],{"className":31553,"code":100586,"language":31555,"meta":104,"style":104},"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",[106,100588,100589,100605,100610,100619,100623,100628,100636,100640,100645,100650,100663,100667,100672,100684,100688],{"__ignoreMap":104},[109,100590,100591,100593,100595,100597,100599,100601,100603],{"class":111,"line":112},[109,100592,1776],{"class":126},[109,100594,130],{"class":122},[109,100596,94177],{"class":126},[109,100598,1755],{"class":133},[109,100600,1914],{"class":126},[109,100602,1956],{"class":133},[109,100604,1330],{"class":126},[109,100606,100607],{"class":111,"line":119},[109,100608,100609],{"class":115},"#如果传入整数，必须能够平分，否则会报错\n",[109,100611,100612,100615,100617],{"class":111,"line":140},[109,100613,100614],{"class":126},"np.split(a,",[109,100616,1618],{"class":133},[109,100618,1330],{"class":126},[109,100620,100621],{"class":111,"line":154},[109,100622,94739],{"class":115},[109,100624,100625],{"class":111,"line":161},[109,100626,100627],{"class":115},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[109,100629,100630,100632,100634],{"class":111,"line":167},[109,100631,100614],{"class":126},[109,100633,1831],{"class":133},[109,100635,1330],{"class":126},[109,100637,100638],{"class":111,"line":185},[109,100639,94739],{"class":115},[109,100641,100642],{"class":111,"line":201},[109,100643,100644],{"class":115},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[109,100646,100647],{"class":111,"line":206},[109,100648,100649],{"class":115},"#传入数组\n",[109,100651,100652,100655,100657,100659,100661],{"class":111,"line":218},[109,100653,100654],{"class":126},"np.split(a,[",[109,100656,1612],{"class":133},[109,100658,1914],{"class":126},[109,100660,1856],{"class":133},[109,100662,5994],{"class":126},[109,100664,100665],{"class":111,"line":223},[109,100666,94739],{"class":115},[109,100668,100669],{"class":111,"line":229},[109,100670,100671],{"class":115},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[109,100673,100674,100676,100678,100680,100682],{"class":111,"line":244},[109,100675,100654],{"class":126},[109,100677,1856],{"class":133},[109,100679,1914],{"class":126},[109,100681,1905],{"class":133},[109,100683,5994],{"class":126},[109,100685,100686],{"class":111,"line":258},[109,100687,94739],{"class":115},[109,100689,100690],{"class":111,"line":263},[109,100691,100692],{"class":115},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100694,100695],{},"②二维数组的分割",[19,100697,100698],{},"使用split()",[99,100700,100702],{"className":31553,"code":100701,"language":31555,"meta":104,"style":104},"#二维数组分割\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",[106,100703,100704,100709,100733,100738,100747,100751,100755,100760,100765,100770,100775,100780,100785,100790,100794,100807,100811,100815,100819,100823,100827,100832,100837,100842,100846,100851,100867,100871,100875,100880,100885,100890,100895,100900,100905,100910,100915,100920,100925,100930,100935,100940,100945,100950,100955,100960,100965,100969,100973,100993,100997,101001,101006,101011,101016,101021,101026,101031,101036,101041,101046,101051,101056,101061,101066,101071,101076,101081,101086,101091,101095,101100,101109,101113,101117,101121,101125,101129,101133,101137,101141,101145,101154,101158,101162,101166,101170,101174,101178,101182,101186,101190,101194,101198,101202,101206,101210,101214,101218,101222,101226,101230,101234,101238,101251,101255,101259,101263,101267,101271,101275,101279,101283],{"__ignoreMap":104},[109,100705,100706],{"class":111,"line":112},[109,100707,100708],{"class":115},"#二维数组分割\n",[109,100710,100711,100713,100715,100717,100719,100721,100723,100725,100727,100729,100731],{"class":111,"line":119},[109,100712,94481],{"class":126},[109,100714,130],{"class":122},[109,100716,94177],{"class":126},[109,100718,1755],{"class":133},[109,100720,1914],{"class":126},[109,100722,1862],{"class":133},[109,100724,94182],{"class":126},[109,100726,1881],{"class":133},[109,100728,1914],{"class":126},[109,100730,1881],{"class":133},[109,100732,1330],{"class":126},[109,100734,100735],{"class":111,"line":140},[109,100736,100737],{"class":115},"#默认axis=0  传入整数平均分,按行来的\n",[109,100739,100740,100743,100745],{"class":111,"line":154},[109,100741,100742],{"class":126},"np.split(aa,",[109,100744,1612],{"class":133},[109,100746,1330],{"class":126},[109,100748,100749],{"class":111,"line":161},[109,100750,96939],{"class":115},[109,100752,100753],{"class":111,"line":167},[109,100754,95103],{"class":278},[109,100756,100757],{"class":111,"line":185},[109,100758,100759],{"class":278},"[array([[ 1,  2,  3,  4,  5,  6],\n",[109,100761,100762],{"class":111,"line":201},[109,100763,100764],{"class":278},"        [ 7,  8,  9, 10, 11, 12]]),\n",[109,100766,100767],{"class":111,"line":206},[109,100768,100769],{"class":278}," array([[13, 14, 15, 16, 17, 18],\n",[109,100771,100772],{"class":111,"line":218},[109,100773,100774],{"class":278},"        [19, 20, 21, 22, 23, 24]]),\n",[109,100776,100777],{"class":111,"line":223},[109,100778,100779],{"class":278}," array([[25, 26, 27, 28, 29, 30],\n",[109,100781,100782],{"class":111,"line":229},[109,100783,100784],{"class":278},"        [31, 32, 33, 34, 35, 36]])]\n",[109,100786,100787],{"class":111,"line":244},[109,100788,100789],{"class":278}," '''\n",[109,100791,100792],{"class":111,"line":258},[109,100793,100649],{"class":115},[109,100795,100796,100799,100801,100803,100805],{"class":111,"line":263},[109,100797,100798],{"class":126},"np.split(aa,[",[109,100800,1618],{"class":133},[109,100802,1914],{"class":126},[109,100804,1856],{"class":133},[109,100806,5994],{"class":126},[109,100808,100809],{"class":111,"line":269},[109,100810,96939],{"class":115},[109,100812,100813],{"class":111,"line":304},[109,100814,95103],{"class":278},[109,100816,100817],{"class":111,"line":331},[109,100818,100759],{"class":278},[109,100820,100821],{"class":111,"line":336},[109,100822,100764],{"class":278},[109,100824,100825],{"class":111,"line":364},[109,100826,100769],{"class":278},[109,100828,100829],{"class":111,"line":391},[109,100830,100831],{"class":278},"        [19, 20, 21, 22, 23, 24],\n",[109,100833,100834],{"class":111,"line":396},[109,100835,100836],{"class":278},"        [25, 26, 27, 28, 29, 30]]),\n",[109,100838,100839],{"class":111,"line":402},[109,100840,100841],{"class":278}," array([[31, 32, 33, 34, 35, 36]])]\n",[109,100843,100844],{"class":111,"line":419},[109,100845,95103],{"class":278},[109,100847,100848],{"class":111,"line":435},[109,100849,100850],{"class":115},"#axis=1 按照列来分\n",[109,100852,100853,100855,100857,100859,100861,100863,100865],{"class":111,"line":440},[109,100854,100742],{"class":126},[109,100856,1612],{"class":133},[109,100858,1914],{"class":126},[109,100860,48689],{"class":6553},[109,100862,130],{"class":122},[109,100864,1755],{"class":133},[109,100866,1330],{"class":126},[109,100868,100869],{"class":111,"line":467},[109,100870,96939],{"class":115},[109,100872,100873],{"class":111,"line":494},[109,100874,95103],{"class":278},[109,100876,100877],{"class":111,"line":499},[109,100878,100879],{"class":278},"[array([[ 1,  2],\n",[109,100881,100882],{"class":111,"line":526},[109,100883,100884],{"class":278},"        [ 7,  8],\n",[109,100886,100887],{"class":111,"line":552},[109,100888,100889],{"class":278},"        [13, 14],\n",[109,100891,100892],{"class":111,"line":557},[109,100893,100894],{"class":278},"        [19, 20],\n",[109,100896,100897],{"class":111,"line":584},[109,100898,100899],{"class":278},"        [25, 26],\n",[109,100901,100902],{"class":111,"line":611},[109,100903,100904],{"class":278},"        [31, 32]]),\n",[109,100906,100907],{"class":111,"line":616},[109,100908,100909],{"class":278}," array([[ 3,  4],\n",[109,100911,100912],{"class":111,"line":633},[109,100913,100914],{"class":278},"        [ 9, 10],\n",[109,100916,100917],{"class":111,"line":649},[109,100918,100919],{"class":278},"        [15, 16],\n",[109,100921,100922],{"class":111,"line":676},[109,100923,100924],{"class":278},"        [21, 22],\n",[109,100926,100927],{"class":111,"line":703},[109,100928,100929],{"class":278},"        [27, 28],\n",[109,100931,100932],{"class":111,"line":708},[109,100933,100934],{"class":278},"        [33, 34]]),\n",[109,100936,100937],{"class":111,"line":723},[109,100938,100939],{"class":278}," array([[ 5,  6],\n",[109,100941,100942],{"class":111,"line":728},[109,100943,100944],{"class":278},"        [11, 12],\n",[109,100946,100947],{"class":111,"line":739},[109,100948,100949],{"class":278},"        [17, 18],\n",[109,100951,100952],{"class":111,"line":9352},[109,100953,100954],{"class":278},"        [23, 24],\n",[109,100956,100957],{"class":111,"line":9364},[109,100958,100959],{"class":278},"        [29, 30],\n",[109,100961,100962],{"class":111,"line":9376},[109,100963,100964],{"class":278},"        [35, 36]])]\n",[109,100966,100967],{"class":111,"line":11034},[109,100968,100789],{"class":278},[109,100970,100971],{"class":111,"line":11059},[109,100972,100649],{"class":115},[109,100974,100975,100977,100979,100981,100983,100985,100987,100989,100991],{"class":111,"line":11082},[109,100976,100798],{"class":126},[109,100978,1755],{"class":133},[109,100980,1914],{"class":126},[109,100982,1618],{"class":133},[109,100984,42784],{"class":126},[109,100986,48689],{"class":6553},[109,100988,130],{"class":122},[109,100990,1755],{"class":133},[109,100992,1330],{"class":126},[109,100994,100995],{"class":111,"line":11106},[109,100996,94739],{"class":115},[109,100998,100999],{"class":111,"line":11111},[109,101000,95103],{"class":278},[109,101002,101003],{"class":111,"line":11116},[109,101004,101005],{"class":278},"[array([[ 1],\n",[109,101007,101008],{"class":111,"line":11121},[109,101009,101010],{"class":278},"        [ 7],\n",[109,101012,101013],{"class":111,"line":11130},[109,101014,101015],{"class":278},"        [13],\n",[109,101017,101018],{"class":111,"line":11135},[109,101019,101020],{"class":278},"        [19],\n",[109,101022,101023],{"class":111,"line":11141},[109,101024,101025],{"class":278},"        [25],\n",[109,101027,101028],{"class":111,"line":11162},[109,101029,101030],{"class":278},"        [31]]),\n",[109,101032,101033],{"class":111,"line":11168},[109,101034,101035],{"class":278}," array([[ 2],\n",[109,101037,101038],{"class":111,"line":11182},[109,101039,101040],{"class":278},"        [ 8],\n",[109,101042,101043],{"class":111,"line":11188},[109,101044,101045],{"class":278},"        [14],\n",[109,101047,101048],{"class":111,"line":11215},[109,101049,101050],{"class":278},"        [20],\n",[109,101052,101053],{"class":111,"line":11224},[109,101054,101055],{"class":278},"        [26],\n",[109,101057,101058],{"class":111,"line":11230},[109,101059,101060],{"class":278},"        [32]]),\n",[109,101062,101063],{"class":111,"line":11238},[109,101064,101065],{"class":278}," array([[ 3,  4,  5,  6],\n",[109,101067,101068],{"class":111,"line":11243},[109,101069,101070],{"class":278},"        [ 9, 10, 11, 12],\n",[109,101072,101073],{"class":111,"line":17777},[109,101074,101075],{"class":278},"        [15, 16, 17, 18],\n",[109,101077,101078],{"class":111,"line":17783},[109,101079,101080],{"class":278},"        [21, 22, 23, 24],\n",[109,101082,101083],{"class":111,"line":17806},[109,101084,101085],{"class":278},"        [27, 28, 29, 30],\n",[109,101087,101088],{"class":111,"line":17812},[109,101089,101090],{"class":278},"        [33, 34, 35, 36]])]\n",[109,101092,101093],{"class":111,"line":17835},[109,101094,95103],{"class":278},[109,101096,101097],{"class":111,"line":17849},[109,101098,101099],{"class":115},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[109,101101,101102,101105,101107],{"class":111,"line":17869},[109,101103,101104],{"class":126},"np.vsplit(aa,",[109,101106,1612],{"class":133},[109,101108,1330],{"class":126},[109,101110,101111],{"class":111,"line":17875},[109,101112,94739],{"class":115},[109,101114,101115],{"class":111,"line":17886},[109,101116,95103],{"class":278},[109,101118,101119],{"class":111,"line":17909},[109,101120,100759],{"class":278},[109,101122,101123],{"class":111,"line":17931},[109,101124,100764],{"class":278},[109,101126,101127],{"class":111,"line":17936},[109,101128,100769],{"class":278},[109,101130,101131],{"class":111,"line":17942},[109,101132,100774],{"class":278},[109,101134,101135],{"class":111,"line":17956},[109,101136,100779],{"class":278},[109,101138,101139],{"class":111,"line":17969},[109,101140,100784],{"class":278},[109,101142,101143],{"class":111,"line":17974},[109,101144,95103],{"class":278},[109,101146,101147,101150,101152],{"class":111,"line":17988},[109,101148,101149],{"class":126},"np.hsplit(aa,",[109,101151,1612],{"class":133},[109,101153,1330],{"class":126},[109,101155,101156],{"class":111,"line":17993},[109,101157,94739],{"class":115},[109,101159,101160],{"class":111,"line":17999},[109,101161,95103],{"class":278},[109,101163,101164],{"class":111,"line":18004},[109,101165,100879],{"class":278},[109,101167,101168],{"class":111,"line":18018},[109,101169,100884],{"class":278},[109,101171,101172],{"class":111,"line":18023},[109,101173,100889],{"class":278},[109,101175,101176],{"class":111,"line":18028},[109,101177,100894],{"class":278},[109,101179,101180],{"class":111,"line":18042},[109,101181,100899],{"class":278},[109,101183,101184],{"class":111,"line":18054},[109,101185,100904],{"class":278},[109,101187,101188],{"class":111,"line":18059},[109,101189,100909],{"class":278},[109,101191,101192],{"class":111,"line":18072},[109,101193,100914],{"class":278},[109,101195,101196],{"class":111,"line":18077},[109,101197,100919],{"class":278},[109,101199,101200],{"class":111,"line":18082},[109,101201,100924],{"class":278},[109,101203,101204],{"class":111,"line":18087},[109,101205,100929],{"class":278},[109,101207,101208],{"class":111,"line":18100},[109,101209,100934],{"class":278},[109,101211,101212],{"class":111,"line":18105},[109,101213,100939],{"class":278},[109,101215,101216],{"class":111,"line":33808},[109,101217,100944],{"class":278},[109,101219,101220],{"class":111,"line":33814},[109,101221,100949],{"class":278},[109,101223,101224],{"class":111,"line":33820},[109,101225,100954],{"class":278},[109,101227,101228],{"class":111,"line":33826},[109,101229,100959],{"class":278},[109,101231,101232],{"class":111,"line":33832},[109,101233,100964],{"class":278},[109,101235,101236],{"class":111,"line":33843},[109,101237,95103],{"class":278},[109,101239,101240,101243,101245,101247,101249],{"class":111,"line":33849},[109,101241,101242],{"class":126},"np.vsplit(aa,[",[109,101244,1618],{"class":133},[109,101246,1914],{"class":126},[109,101248,1856],{"class":133},[109,101250,5994],{"class":126},[109,101252,101253],{"class":111,"line":33869},[109,101254,94739],{"class":115},[109,101256,101257],{"class":111,"line":33875},[109,101258,95103],{"class":278},[109,101260,101261],{"class":111,"line":33886},[109,101262,100759],{"class":278},[109,101264,101265],{"class":111,"line":33892},[109,101266,100764],{"class":278},[109,101268,101269],{"class":111,"line":33898},[109,101270,100769],{"class":278},[109,101272,101273],{"class":111,"line":33904},[109,101274,100831],{"class":278},[109,101276,101277],{"class":111,"line":33910},[109,101278,100836],{"class":278},[109,101280,101281],{"class":111,"line":33916},[109,101282,100841],{"class":278},[109,101284,101285],{"class":111,"line":33922},[109,101286,100789],{"class":278},[1467,101288,101289],{},"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":104,"searchDepth":119,"depth":119,"links":101291},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100557,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101298,"title":101299,"body":101300,"description":24550,"extension":1476,"meta":101794,"navigation":157,"path":101795,"seo":101796,"stem":101797,"__hash__":101798},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101301,"toc":101785},[101302,101305,101308,101333,101337,101396,101448,101452,101454,101490,101544,101546,101584,101655,101659,101664,101668,101671,101704,101707,101711,101714,101717,101720,101723,101728,101732,101735,101738,101741,101744,101749,101753,101758,101761,101782],[10,101303,101299],{"id":101304},"_9数学函数",[19,101306,101307],{},"补充回顾：python的列表推导式",[99,101309,101311],{"className":31553,"code":101310,"language":31555,"meta":104,"style":104},"[1\u002Fi for i in a]\n",[106,101312,101313],{"__ignoreMap":104},[109,101314,101315,101317,101319,101321,101324,101326,101328,101330],{"class":111,"line":112},[109,101316,1289],{"class":126},[109,101318,1755],{"class":133},[109,101320,2116],{"class":122},[109,101322,101323],{"class":126},"i ",[109,101325,4372],{"class":122},[109,101327,10756],{"class":126},[109,101329,27218],{"class":122},[109,101331,101332],{"class":126}," a]\n",[14,101334,101336],{"id":101335},"_91-求倒数","9.1 求倒数",[99,101338,101340],{"className":31553,"code":101339,"language":31555,"meta":104,"style":104},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[106,101341,101342,101347,101375,101387],{"__ignoreMap":104},[109,101343,101344],{"class":111,"line":112},[109,101345,101346],{"class":115},"#数组求倒数\n",[109,101348,101349,101351,101353,101355,101357,101359,101361,101363,101365,101367,101369,101371,101373],{"class":111,"line":119},[109,101350,1776],{"class":126},[109,101352,130],{"class":122},[109,101354,1289],{"class":126},[109,101356,1755],{"class":133},[109,101358,1914],{"class":126},[109,101360,1618],{"class":133},[109,101362,1914],{"class":126},[109,101364,1612],{"class":133},[109,101366,1914],{"class":126},[109,101368,1831],{"class":133},[109,101370,1914],{"class":126},[109,101372,1856],{"class":133},[109,101374,34421],{"class":126},[109,101376,101377,101379,101381,101384],{"class":111,"line":140},[109,101378,1801],{"class":126},[109,101380,130],{"class":122},[109,101382,101383],{"class":126},"np.array(a)",[109,101385,101386],{"class":115},"#将列表转换为数组\n",[109,101388,101389,101391,101393],{"class":111,"line":154},[109,101390,1755],{"class":133},[109,101392,2116],{"class":122},[109,101394,101395],{"class":126},"b\n",[99,101397,101399],{"className":31553,"code":101398,"language":31555,"meta":104,"style":104},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[106,101400,101401,101429,101438,101443],{"__ignoreMap":104},[109,101402,101403,101405,101407,101409,101411,101413,101415,101417,101419,101421,101423,101425,101427],{"class":111,"line":112},[109,101404,1776],{"class":126},[109,101406,130],{"class":122},[109,101408,1289],{"class":126},[109,101410,1755],{"class":133},[109,101412,1914],{"class":126},[109,101414,1618],{"class":133},[109,101416,1914],{"class":126},[109,101418,1612],{"class":133},[109,101420,1914],{"class":126},[109,101422,1831],{"class":133},[109,101424,1914],{"class":126},[109,101426,1856],{"class":133},[109,101428,34421],{"class":126},[109,101430,101431,101433,101435],{"class":111,"line":119},[109,101432,1801],{"class":126},[109,101434,130],{"class":122},[109,101436,101437],{"class":126},"np.array(a)\n",[109,101439,101440],{"class":111,"line":140},[109,101441,101442],{"class":115},"#调用numpy中的函数reciprocal()\n",[109,101444,101445],{"class":111,"line":154},[109,101446,101447],{"class":126},"np.reciprocal(b)\n",[14,101449,101451],{"id":101450},"_92-求平方","9.2 求平方",[19,101453,95705],{},[99,101455,101457],{"className":31553,"code":101456,"language":31555,"meta":104,"style":104},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[106,101458,101459,101464,101469,101485],{"__ignoreMap":104},[109,101460,101461],{"class":111,"line":112},[109,101462,101463],{"class":115},"#square()，求平方\n",[109,101465,101466],{"class":111,"line":119},[109,101467,101468],{"class":115},"#一维数组\n",[109,101470,101471,101473,101475,101477,101479,101481,101483],{"class":111,"line":140},[109,101472,1776],{"class":126},[109,101474,130],{"class":122},[109,101476,94177],{"class":126},[109,101478,1755],{"class":133},[109,101480,1914],{"class":126},[109,101482,1008],{"class":133},[109,101484,1330],{"class":126},[109,101486,101487],{"class":111,"line":154},[109,101488,101489],{"class":126},"np.square(a)\n",[99,101491,101493],{"className":31553,"code":101492,"language":31555,"meta":104,"style":104},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[106,101494,101495,101500,101505,101526],{"__ignoreMap":104},[109,101496,101497],{"class":111,"line":112},[109,101498,101499],{"class":115},"#或者通过循环遍历的形式来计算\n",[109,101501,101502],{"class":111,"line":119},[109,101503,101504],{"class":115},"#这是一个列表\n",[109,101506,101507,101510,101512,101514,101516,101518,101520,101523],{"class":111,"line":140},[109,101508,101509],{"class":126},"[i",[109,101511,1988],{"class":122},[109,101513,101323],{"class":126},[109,101515,4372],{"class":122},[109,101517,10756],{"class":126},[109,101519,27218],{"class":122},[109,101521,101522],{"class":126}," a]",[109,101524,101525],{"class":115},"#这个求完之后在数列当中\n",[109,101527,101528,101531,101533,101535,101537,101539,101541],{"class":111,"line":154},[109,101529,101530],{"class":126},"np.array([i",[109,101532,1988],{"class":122},[109,101534,101323],{"class":126},[109,101536,4372],{"class":122},[109,101538,10756],{"class":126},[109,101540,27218],{"class":122},[109,101542,101543],{"class":126}," a])\n",[19,101545,94466],{},[99,101547,101549],{"className":31553,"code":101548,"language":31555,"meta":104,"style":104},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[106,101550,101551,101555,101579],{"__ignoreMap":104},[109,101552,101553],{"class":111,"line":112},[109,101554,94476],{"class":115},[109,101556,101557,101559,101561,101563,101565,101567,101569,101571,101573,101575,101577],{"class":111,"line":119},[109,101558,94481],{"class":126},[109,101560,130],{"class":122},[109,101562,94177],{"class":126},[109,101564,1755],{"class":133},[109,101566,1914],{"class":126},[109,101568,2055],{"class":133},[109,101570,94182],{"class":126},[109,101572,1831],{"class":133},[109,101574,1914],{"class":126},[109,101576,1612],{"class":133},[109,101578,1330],{"class":126},[109,101580,101581],{"class":111,"line":140},[109,101582,101583],{"class":126},"np.square(aa)\n",[99,101585,101587],{"className":31553,"code":101586,"language":31555,"meta":104,"style":104},"#传统的方式\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",[106,101588,101589,101594,101603,101619,101635,101650],{"__ignoreMap":104},[109,101590,101591],{"class":111,"line":112},[109,101592,101593],{"class":115},"#传统的方式\n",[109,101595,101596,101598,101600],{"class":111,"line":119},[109,101597,99362],{"class":126},[109,101599,130],{"class":122},[109,101601,101602],{"class":126},"np.empty_like(aa)\n",[109,101604,101605,101607,101609,101611,101613,101615,101617],{"class":111,"line":140},[109,101606,4372],{"class":122},[109,101608,10756],{"class":126},[109,101610,27218],{"class":122},[109,101612,33618],{"class":133},[109,101614,714],{"class":126},[109,101616,1831],{"class":133},[109,101618,31961],{"class":126},[109,101620,101621,101623,101625,101627,101629,101631,101633],{"class":111,"line":154},[109,101622,1302],{"class":122},[109,101624,10818],{"class":126},[109,101626,27218],{"class":122},[109,101628,33618],{"class":133},[109,101630,714],{"class":126},[109,101632,1612],{"class":133},[109,101634,31961],{"class":126},[109,101636,101637,101640,101642,101645,101647],{"class":111,"line":161},[109,101638,101639],{"class":126},"        bb[i,j]",[109,101641,130],{"class":122},[109,101643,101644],{"class":126},"aa[i,j]",[109,101646,1988],{"class":122},[109,101648,101649],{"class":126},"aa[i,j]\n",[109,101651,101652],{"class":111,"line":167},[109,101653,101654],{"class":126},"bb\n",[14,101656,101658],{"id":101657},"_93-求各元素的符号","9.3 求各元素的符号",[19,101660,101661],{},[938,101662],{"alt":104,"src":101663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101665,101667],{"id":101666},"_94-modf函数","9.4 modf函数",[19,101669,101670],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[99,101672,101674],{"className":31553,"code":101673,"language":31555,"meta":104,"style":104},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[106,101675,101676,101699],{"__ignoreMap":104},[109,101677,101678,101680,101682,101684,101686,101688,101690,101692,101694,101697],{"class":111,"line":112},[109,101679,1776],{"class":126},[109,101681,130],{"class":122},[109,101683,94177],{"class":126},[109,101685,2064],{"class":122},[109,101687,1008],{"class":133},[109,101689,1914],{"class":126},[109,101691,1008],{"class":133},[109,101693,1914],{"class":126},[109,101695,101696],{"class":133},"0.3",[109,101698,1330],{"class":126},[109,101700,101701],{"class":111,"line":119},[109,101702,101703],{"class":126},"np.modf(a)\n",[19,101705,101706],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101708,101710],{"id":101709},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101712,101713],{},"np.cell()",[19,101715,101716],{},"np.floor()",[19,101718,101719],{},"np.rint()",[19,101721,101722],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101724,101725],{},[938,101726],{"alt":104,"src":101727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101729,101731],{"id":101730},"_96-around函数","9.6 around()函数",[19,101733,101734],{},"around()函数也可以实现对数的小数位数进行操作",[19,101736,101737],{},"其中的参数：",[19,101739,101740],{},"1.要传的数组",[19,101742,101743],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101745,101746],{},[938,101747],{"alt":104,"src":101748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101750,101752],{"id":101751},"_97-三角函数","9.7 三角函数",[19,101754,101755],{},[938,101756],{"alt":104,"src":101757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101759,101760],{},"引入图像模块非常重要",[99,101762,101764],{"className":31553,"code":101763,"language":31555,"meta":104,"style":104},"from matplotlib import pyplot as plt\n",[106,101765,101766],{"__ignoreMap":104},[109,101767,101768,101770,101773,101775,101778,101780],{"class":111,"line":112},[109,101769,31912],{"class":122},[109,101771,101772],{"class":126}," matplotlib ",[109,101774,31567],{"class":122},[109,101776,101777],{"class":126}," pyplot ",[109,101779,32558],{"class":122},[109,101781,32612],{"class":126},[1467,101783,101784],{},"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":104,"searchDepth":119,"depth":119,"links":101786},[101787,101788,101789,101790,101791,101792,101793],{"id":101335,"depth":119,"text":101336},{"id":101450,"depth":119,"text":101451},{"id":101657,"depth":119,"text":101658},{"id":101666,"depth":119,"text":101667},{"id":101709,"depth":119,"text":101710},{"id":101730,"depth":119,"text":101731},{"id":101751,"depth":119,"text":101752},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101299,"description":24550},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101800,"title":101801,"body":101802,"description":24550,"extension":1476,"meta":101806,"navigation":157,"path":101807,"seo":101808,"stem":101809,"__hash__":101810},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101803,"toc":101804},[],{"title":104,"searchDepth":119,"depth":119,"links":101805},[],{"category":51595},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101801,"description":24550},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101812,"title":101813,"body":101814,"description":104,"extension":1476,"meta":103822,"navigation":157,"path":103823,"seo":103824,"stem":103825,"__hash__":103826},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101815,"toc":103798},[101816,101819,101823,101826,101829,101835,101838,101861,101864,101898,101901,101942,101946,101949,102042,102045,102089,102092,102109,102112,102126,102129,102132,102177,102180,102217,102221,102224,102230,102235,102255,102259,102262,102328,102331,102349,102353,102356,102385,102395,102401,102405,102408,102414,102425,102429,102432,102462,102465,102745,102748,102751,102762,102765,102768,102790,102797,102800,102818,102821,102824,102838,102846,102849,102875,102881,102884,102887,102897,102909,102929,102938,102958,102968,102992,103005,103019,103024,103065,103082,103107,103119,103139,103145,103190,103209,103226,103239,103255,103262,103274,103283,103318,103339,103364,103377,103401,103416,103441,103444,103465,103474,103477,103488,103492,103495,103501,103513,103520,103524,103527,103539,103542,103556,103559,103569,103579,103582,103622,103625,103629,103635,103638,103652,103656,103659,103692,103696,103699,103722,103730,103733,103739,103745,103748,103751,103779,103783,103786,103792,103795],[10,101817,101813],{"id":101818},"_1环境安装与第一个-mujoco-程序",[14,101820,101822],{"id":101821},"_1目标说明","1.目标说明",[19,101824,101825],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101827,101828],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[99,101830,101833],{"className":101831,"code":101832,"language":6524,"meta":104},[6522],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[106,101834,101832],{"__ignoreMap":104},[19,101836,101837],{},"需要掌握:",[765,101839,101840,101843,101846,101851,101856],{},[30,101841,101842],{},"Fedora 44 下 MuJoCo 的系统依赖",[30,101844,101845],{},"Python 虚拟环境创建",[30,101847,101848],{},[106,101849,101850],{},"mujoco.MjModel",[30,101852,101853],{},[106,101854,101855],{},"mujoco.MjData",[30,101857,101858],{},[106,101859,101860],{},"mujoco.mj_step(model, data)",[19,101862,101863],{},"MuJoCo 中最重要的两个对象:",[1677,101865,101866,101876],{},[1680,101867,101868],{},[1683,101869,101870,101873],{},[1686,101871,101872],{"align":24910},"对象",[1686,101874,101875],{"align":24910},"含义",[1723,101877,101878,101888],{},[1683,101879,101880,101885],{},[1728,101881,101882],{"align":24910},[106,101883,101884],{},"MjModel",[1728,101886,101887],{"align":24910},"模型结构，来自 XML，基本不随时间变化",[1683,101889,101890,101895],{},[1728,101891,101892],{"align":24910},[106,101893,101894],{},"MjData",[1728,101896,101897],{"align":24910},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101899,101900],{},"可以先用一个类比理解：",[1677,101902,101903,101913],{},[1680,101904,101905],{},[1683,101906,101907,101910],{},[1686,101908,101909],{"align":24910},"类比",[1686,101911,101912],{"align":24910},"MuJoCo 对象",[1723,101914,101915,101924,101933],{},[1683,101916,101917,101920],{},[1728,101918,101919],{"align":24910},"游戏地图和角色配置",[1728,101921,101922],{"align":24910},[106,101923,101884],{},[1683,101925,101926,101929],{},[1728,101927,101928],{"align":24910},"游戏运行到当前帧的状态",[1728,101930,101931],{"align":24910},[106,101932,101894],{},[1683,101934,101935,101938],{},[1728,101936,101937],{"align":24910},"前进一帧",[1728,101939,101940],{"align":24910},[106,101941,101860],{},[14,101943,101945],{"id":101944},"_2环境与依赖安装","2.环境与依赖安装",[19,101947,101948],{},"Fedora 44 系统依赖:",[99,101950,101952],{"className":24996,"code":101951,"language":24998,"meta":104,"style":104},"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",[106,101953,101954,101966,101979,101992,102002,102012,102031],{"__ignoreMap":104},[109,101955,101956,101958,101960,101962,101964],{"class":111,"line":112},[109,101957,25751],{"class":211},[109,101959,27490],{"class":278},[109,101961,25008],{"class":278},[109,101963,27575],{"class":133},[109,101965,25853],{"class":133},[109,101967,101968,101971,101974,101977],{"class":111,"line":119},[109,101969,101970],{"class":278},"  python3",[109,101972,101973],{"class":278}," python3-pip",[109,101975,101976],{"class":278}," python3-virtualenv",[109,101978,25853],{"class":133},[109,101980,101981,101984,101987,101990],{"class":111,"line":140},[109,101982,101983],{"class":278},"  mesa-libGL",[109,101985,101986],{"class":278}," mesa-libGLU",[109,101988,101989],{"class":278}," mesa-dri-drivers",[109,101991,25853],{"class":133},[109,101993,101994,101997,102000],{"class":111,"line":154},[109,101995,101996],{"class":278},"  libglvnd-glx",[109,101998,101999],{"class":278}," libglvnd-opengl",[109,102001,25853],{"class":133},[109,102003,102004,102007,102010],{"class":111,"line":161},[109,102005,102006],{"class":278},"  glfw",[109,102008,102009],{"class":278}," glfw-devel",[109,102011,25853],{"class":133},[109,102013,102014,102017,102020,102023,102026,102029],{"class":111,"line":167},[109,102015,102016],{"class":278},"  libX11",[109,102018,102019],{"class":278}," libXcursor",[109,102021,102022],{"class":278}," libXi",[109,102024,102025],{"class":278}," libXinerama",[109,102027,102028],{"class":278}," libXrandr",[109,102030,25853],{"class":133},[109,102032,102033,102036,102039],{"class":111,"line":185},[109,102034,102035],{"class":278},"  gcc",[109,102037,102038],{"class":278}," gcc-c++",[109,102040,102041],{"class":278}," make\n",[19,102043,102044],{},"创建 Python 环境:",[99,102046,102048],{"className":24996,"code":102047,"language":24998,"meta":104,"style":104},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[106,102049,102050,102064,102072],{"__ignoreMap":104},[109,102051,102052,102055,102058,102061],{"class":111,"line":112},[109,102053,102054],{"class":211},"python3",[109,102056,102057],{"class":133}," -m",[109,102059,102060],{"class":278}," venv",[109,102062,102063],{"class":278}," .venv\n",[109,102065,102066,102069],{"class":111,"line":119},[109,102067,102068],{"class":133},"source",[109,102070,102071],{"class":278}," .venv\u002Fbin\u002Factivate\n",[109,102073,102074,102076,102078,102081,102083,102086],{"class":111,"line":140},[109,102075,31555],{"class":211},[109,102077,102057],{"class":133},[109,102079,102080],{"class":278}," pip",[109,102082,25008],{"class":278},[109,102084,102085],{"class":133}," --upgrade",[109,102087,102088],{"class":278}," pip\n",[19,102090,102091],{},"pip 安装:",[99,102093,102095],{"className":24996,"code":102094,"language":24998,"meta":104,"style":104},"pip install \"mujoco>=2.3\" numpy\n",[106,102096,102097],{"__ignoreMap":104},[109,102098,102099,102101,102103,102106],{"class":111,"line":112},[109,102100,25005],{"class":211},[109,102102,25008],{"class":278},[109,102104,102105],{"class":278}," \"mujoco>=2.3\"",[109,102107,102108],{"class":278}," numpy\n",[19,102110,102111],{},"安装完成后，先做最小检查：",[99,102113,102115],{"className":24996,"code":102114,"language":24998,"meta":104,"style":104},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[106,102116,102117],{"__ignoreMap":104},[109,102118,102119,102121,102123],{"class":111,"line":112},[109,102120,31555],{"class":211},[109,102122,31533],{"class":133},[109,102124,102125],{"class":278}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102127,102128],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102130,102131],{},"conda 安装:",[99,102133,102135],{"className":24996,"code":102134,"language":24998,"meta":104,"style":104},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[106,102136,102137,102157,102167],{"__ignoreMap":104},[109,102138,102139,102141,102143,102145,102148,102151,102154],{"class":111,"line":112},[109,102140,31505],{"class":211},[109,102142,30351],{"class":278},[109,102144,26290],{"class":133},[109,102146,102147],{"class":278}," mujoco-study",[109,102149,102150],{"class":278}," python=",[109,102152,102153],{"class":133},"3.10",[109,102155,102156],{"class":133}," -y\n",[109,102158,102159,102161,102164],{"class":111,"line":119},[109,102160,31505],{"class":211},[109,102162,102163],{"class":278}," activate",[109,102165,102166],{"class":278}," mujoco-study\n",[109,102168,102169,102171,102173,102175],{"class":111,"line":140},[109,102170,25005],{"class":211},[109,102172,25008],{"class":278},[109,102174,102105],{"class":278},[109,102176,102108],{"class":278},[19,102178,102179],{},"版本冲突说明:",[765,102181,102182,102188,102198,102207],{},[30,102183,102184,102185,29560],{},"不要安装 ",[106,102186,102187],{},"mujoco-py",[30,102189,102190,102191,102193,102194,102197],{},"如果旧项目里同时安装了 ",[106,102192,102187],{}," 和 ",[106,102195,102196],{},"mujoco","，建议新建干净虚拟环境。",[30,102199,102200,102203,102204,29560],{},[106,102201,102202],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[106,102205,102206],{},"~\u002F.mujoco\u002Fmujoco210",[30,102208,102209,102210,83714,102213,102216],{},"离屏渲染可能涉及 OpenGL 后端，",[106,102211,102212],{},"MUJOCO_GL=egl",[106,102214,102215],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102218,102220],{"id":102219},"_3核心概念解释","3.核心概念解释",[19,102222,102223],{},"MuJoCo 的基本执行流程:",[99,102225,102228],{"className":102226,"code":102227,"language":6524,"meta":104},[6522],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[106,102229,102227],{"__ignoreMap":104},[19,102231,102232,102234],{},[106,102233,101884],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102236,102237,102239,102240,1750,102243,1750,102246,1750,102249,1750,102252,29560],{},[106,102238,101894],{}," 存放仿真运行时状态，例如 ",[106,102241,102242],{},"data.time",[106,102244,102245],{},"data.qpos",[106,102247,102248],{},"data.qvel",[106,102250,102251],{},"data.ctrl",[106,102253,102254],{},"data.xpos",[51,102256,102258],{"id":102257},"xml-是什么","XML 是什么",[19,102260,102261],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[99,102263,102265],{"className":54242,"code":102264,"language":54244,"meta":104,"style":104},"\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",[106,102266,102267,102289,102320],{"__ignoreMap":104},[109,102268,102269,102271,102273,102275,102277,102279,102282,102284,102287],{"class":111,"line":112},[109,102270,1320],{"class":126},[109,102272,52975],{"class":52475},[109,102274,16093],{"class":211},[109,102276,130],{"class":126},[109,102278,54666],{"class":278},[109,102280,102281],{"class":211}," pos",[109,102283,130],{"class":126},[109,102285,102286],{"class":278},"\"0 0 1\"",[109,102288,52482],{"class":126},[109,102290,102291,102293,102296,102298,102300,102303,102305,102307,102309,102312,102314,102317],{"class":111,"line":119},[109,102292,53319],{"class":126},[109,102294,102295],{"class":52475},"geom",[109,102297,16093],{"class":211},[109,102299,130],{"class":126},[109,102301,102302],{"class":278},"\"box_geom\"",[109,102304,54999],{"class":211},[109,102306,130],{"class":126},[109,102308,54666],{"class":278},[109,102310,102311],{"class":211}," size",[109,102313,130],{"class":126},[109,102315,102316],{"class":278},"\"0.1 0.1 0.1\"",[109,102318,102319],{"class":126},"\u002F>\n",[109,102321,102322,102324,102326],{"class":111,"line":140},[109,102323,52960],{"class":126},[109,102325,52975],{"class":52475},[109,102327,52482],{"class":126},[19,102329,102330],{},"这段意思是：",[765,102332,102333,102339,102346],{},[30,102334,102335,102336,102338],{},"创建一个叫 ",[106,102337,54889],{}," 的刚体。",[30,102340,102341,102342,102345],{},"它初始放在 ",[106,102343,102344],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[30,102347,102348],{},"它里面有一个盒子形状的几何体。",[51,102350,102352],{"id":102351},"timestep-是什么","timestep 是什么",[19,102354,102355],{},"XML 里的：",[99,102357,102359],{"className":54242,"code":102358,"language":54244,"meta":104,"style":104},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[106,102360,102361],{"__ignoreMap":104},[109,102362,102363,102365,102367,102370,102372,102375,102378,102380,102383],{"class":111,"line":112},[109,102364,1320],{"class":126},[109,102366,70341],{"class":52475},[109,102368,102369],{"class":211}," timestep",[109,102371,130],{"class":126},[109,102373,102374],{"class":278},"\"0.01\"",[109,102376,102377],{"class":211}," gravity",[109,102379,130],{"class":126},[109,102381,102382],{"class":278},"\"0 0 -9.81\"",[109,102384,102319],{"class":126},[19,102386,102387,102388,102391,102392,102394],{},"表示每调用一次 ",[106,102389,102390],{},"mj_step","，仿真时间前进 ",[106,102393,40161],{}," 秒。循环 100 次，大约就是 1 秒：",[99,102396,102399],{"className":102397,"code":102398,"language":6524,"meta":104},[6522],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[106,102400,102398],{"__ignoreMap":104},[51,102402,102404],{"id":102403},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102406,102407],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[99,102409,102412],{"className":102410,"code":102411,"language":6524,"meta":104},[6522],"x y z qw qx qy qz\n",[106,102413,102411],{"__ignoreMap":104},[19,102415,102416,102417,102420,102421,102424],{},"表示一个自由刚体的位置和姿态。其中 ",[106,102418,102419],{},"x y z"," 是位置，",[106,102422,102423],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102426,102428],{"id":102427},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102430,102431],{},"新建文件:",[99,102433,102435],{"className":24996,"code":102434,"language":24998,"meta":104,"style":104},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[106,102436,102437,102447,102454],{"__ignoreMap":104},[109,102438,102439,102442,102444],{"class":111,"line":112},[109,102440,102441],{"class":211},"mkdir",[109,102443,30391],{"class":133},[109,102445,102446],{"class":278}," mujoco_tutorial\n",[109,102448,102449,102452],{"class":111,"line":119},[109,102450,102451],{"class":133},"cd",[109,102453,102446],{"class":278},[109,102455,102456,102459],{"class":111,"line":140},[109,102457,102458],{"class":211},"touch",[109,102460,102461],{"class":278}," ch1_first_sim.py\n",[19,102463,102464],{},"写入:",[99,102466,102468],{"className":31553,"code":102467,"language":31555,"meta":104,"style":104},"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",[106,102469,102470,102477,102481,102485,102495,102500,102505,102509,102514,102519,102523,102528,102533,102538,102543,102548,102553,102557,102561,102565,102578,102592,102602,102606,102618,102630,102642,102654,102666,102670,102687,102692,102696,102707,102718,102722,102726,102740],{"__ignoreMap":104},[109,102471,102472,102474],{"class":111,"line":112},[109,102473,31567],{"class":122},[109,102475,102476],{"class":126}," mujoco\n",[109,102478,102479],{"class":111,"line":119},[109,102480,158],{"emptyLinePlaceholder":157},[109,102482,102483],{"class":111,"line":140},[109,102484,158],{"emptyLinePlaceholder":157},[109,102486,102487,102490,102492],{"class":111,"line":154},[109,102488,102489],{"class":133},"XML",[109,102491,14737],{"class":122},[109,102493,102494],{"class":278}," \"\"\"\n",[109,102496,102497],{"class":111,"line":161},[109,102498,102499],{"class":278},"\u003Cmujoco model=\"first_sim\">\n",[109,102501,102502],{"class":111,"line":167},[109,102503,102504],{"class":278},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[109,102506,102507],{"class":111,"line":185},[109,102508,158],{"emptyLinePlaceholder":157},[109,102510,102511],{"class":111,"line":201},[109,102512,102513],{"class":278},"  \u003Cworldbody>\n",[109,102515,102516],{"class":111,"line":206},[109,102517,102518],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[109,102520,102521],{"class":111,"line":218},[109,102522,158],{"emptyLinePlaceholder":157},[109,102524,102525],{"class":111,"line":223},[109,102526,102527],{"class":278},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[109,102529,102530],{"class":111,"line":229},[109,102531,102532],{"class":278},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[109,102534,102535],{"class":111,"line":244},[109,102536,102537],{"class":278},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[109,102539,102540],{"class":111,"line":258},[109,102541,102542],{"class":278},"    \u003C\u002Fbody>\n",[109,102544,102545],{"class":111,"line":263},[109,102546,102547],{"class":278},"  \u003C\u002Fworldbody>\n",[109,102549,102550],{"class":111,"line":269},[109,102551,102552],{"class":278},"\u003C\u002Fmujoco>\n",[109,102554,102555],{"class":111,"line":304},[109,102556,96873],{"class":278},[109,102558,102559],{"class":111,"line":331},[109,102560,158],{"emptyLinePlaceholder":157},[109,102562,102563],{"class":111,"line":336},[109,102564,158],{"emptyLinePlaceholder":157},[109,102566,102567,102569,102571,102574,102576],{"class":111,"line":364},[109,102568,33122],{"class":122},[109,102570,212],{"class":211},[109,102572,102573],{"class":126},"() -> ",[109,102575,96861],{"class":133},[109,102577,5082],{"class":126},[109,102579,102580,102583,102585,102588,102590],{"class":111,"line":391},[109,102581,102582],{"class":126},"    model ",[109,102584,130],{"class":122},[109,102586,102587],{"class":126}," mujoco.MjModel.from_xml_string(",[109,102589,102489],{"class":133},[109,102591,1330],{"class":126},[109,102593,102594,102597,102599],{"class":111,"line":396},[109,102595,102596],{"class":126},"    data ",[109,102598,130],{"class":122},[109,102600,102601],{"class":126}," mujoco.MjData(model)\n",[109,102603,102604],{"class":111,"line":402},[109,102605,158],{"emptyLinePlaceholder":157},[109,102607,102608,102610,102612,102615],{"class":111,"line":419},[109,102609,32474],{"class":133},[109,102611,714],{"class":126},[109,102613,102614],{"class":278},"\"nq:\"",[109,102616,102617],{"class":126},", model.nq)\n",[109,102619,102620,102622,102624,102627],{"class":111,"line":435},[109,102621,32474],{"class":133},[109,102623,714],{"class":126},[109,102625,102626],{"class":278},"\"nv:\"",[109,102628,102629],{"class":126},", model.nv)\n",[109,102631,102632,102634,102636,102639],{"class":111,"line":440},[109,102633,32474],{"class":133},[109,102635,714],{"class":126},[109,102637,102638],{"class":278},"\"nu:\"",[109,102640,102641],{"class":126},", model.nu)\n",[109,102643,102644,102646,102648,102651],{"class":111,"line":467},[109,102645,32474],{"class":133},[109,102647,714],{"class":126},[109,102649,102650],{"class":278},"\"initial time:\"",[109,102652,102653],{"class":126},", data.time)\n",[109,102655,102656,102658,102660,102663],{"class":111,"line":494},[109,102657,32474],{"class":133},[109,102659,714],{"class":126},[109,102661,102662],{"class":278},"\"initial qpos:\"",[109,102664,102665],{"class":126},", data.qpos.copy())\n",[109,102667,102668],{"class":111,"line":499},[109,102669,158],{"emptyLinePlaceholder":157},[109,102671,102672,102674,102677,102679,102681,102683,102685],{"class":111,"line":526},[109,102673,1302],{"class":122},[109,102675,102676],{"class":126}," _ ",[109,102678,27218],{"class":122},[109,102680,33618],{"class":133},[109,102682,714],{"class":126},[109,102684,1351],{"class":133},[109,102686,31961],{"class":126},[109,102688,102689],{"class":111,"line":552},[109,102690,102691],{"class":126},"        mujoco.mj_step(model, data)\n",[109,102693,102694],{"class":111,"line":557},[109,102695,158],{"emptyLinePlaceholder":157},[109,102697,102698,102700,102702,102705],{"class":111,"line":584},[109,102699,32474],{"class":133},[109,102701,714],{"class":126},[109,102703,102704],{"class":278},"\"final time:\"",[109,102706,102653],{"class":126},[109,102708,102709,102711,102713,102716],{"class":111,"line":611},[109,102710,32474],{"class":133},[109,102712,714],{"class":126},[109,102714,102715],{"class":278},"\"final qpos:\"",[109,102717,102665],{"class":126},[109,102719,102720],{"class":111,"line":616},[109,102721,158],{"emptyLinePlaceholder":157},[109,102723,102724],{"class":111,"line":633},[109,102725,158],{"emptyLinePlaceholder":157},[109,102727,102728,102730,102732,102735,102738],{"class":111,"line":649},[109,102729,2922],{"class":122},[109,102731,32395],{"class":133},[109,102733,102734],{"class":122}," ==",[109,102736,102737],{"class":278}," \"__main__\"",[109,102739,5082],{"class":126},[109,102741,102742],{"class":111,"line":676},[109,102743,102744],{"class":126},"    main()\n",[51,102746,102747],{"id":102747},"代码逐段解释",[19,102749,102750],{},"导入库：",[99,102752,102754],{"className":31553,"code":102753,"language":31555,"meta":104,"style":104},"import mujoco\n",[106,102755,102756],{"__ignoreMap":104},[109,102757,102758,102760],{"class":111,"line":112},[109,102759,31567],{"class":122},[109,102761,102476],{"class":126},[19,102763,102764],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102766,102767],{},"定义 XML：",[99,102769,102771],{"className":31553,"code":102770,"language":31555,"meta":104,"style":104},"XML = \"\"\"\n...\n\"\"\"\n",[106,102772,102773,102781,102786],{"__ignoreMap":104},[109,102774,102775,102777,102779],{"class":111,"line":112},[109,102776,102489],{"class":133},[109,102778,14737],{"class":122},[109,102780,102494],{"class":278},[109,102782,102783],{"class":111,"line":119},[109,102784,102785],{"class":278},"...\n",[109,102787,102788],{"class":111,"line":140},[109,102789,96873],{"class":278},[19,102791,102792,102793,102796],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[106,102794,102795],{},"freejoint"," 的方块。",[19,102798,102799],{},"编译模型：",[99,102801,102803],{"className":31553,"code":102802,"language":31555,"meta":104,"style":104},"model = mujoco.MjModel.from_xml_string(XML)\n",[106,102804,102805],{"__ignoreMap":104},[109,102806,102807,102810,102812,102814,102816],{"class":111,"line":112},[109,102808,102809],{"class":126},"model ",[109,102811,130],{"class":122},[109,102813,102587],{"class":126},[109,102815,102489],{"class":133},[109,102817,1330],{"class":126},[19,102819,102820],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102822,102823],{},"创建数据：",[99,102825,102827],{"className":31553,"code":102826,"language":31555,"meta":104,"style":104},"data = mujoco.MjData(model)\n",[106,102828,102829],{"__ignoreMap":104},[109,102830,102831,102834,102836],{"class":111,"line":112},[109,102832,102833],{"class":126},"data ",[109,102835,130],{"class":122},[109,102837,102601],{"class":126},[19,102839,102840,102842,102843,102845],{},[106,102841,34576],{}," 会保存仿真当前状态。刚创建时，时间是 ",[106,102844,1314],{},"，方块还在初始位置。",[19,102847,102848],{},"推进仿真：",[99,102850,102852],{"className":31553,"code":102851,"language":31555,"meta":104,"style":104},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[106,102853,102854,102870],{"__ignoreMap":104},[109,102855,102856,102858,102860,102862,102864,102866,102868],{"class":111,"line":112},[109,102857,4372],{"class":122},[109,102859,102676],{"class":126},[109,102861,27218],{"class":122},[109,102863,33618],{"class":133},[109,102865,714],{"class":126},[109,102867,1351],{"class":133},[109,102869,31961],{"class":126},[109,102871,102872],{"class":111,"line":119},[109,102873,102874],{"class":126},"    mujoco.mj_step(model, data)\n",[19,102876,102877,102878,102880],{},"每次 ",[106,102879,102390],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[51,102882,102883],{"id":102883},"代码逐行细讲",[19,102885,102886],{},"下面把完整代码按新手视角拆开讲。",[99,102888,102889],{"className":31553,"code":102753,"language":31555,"meta":104,"style":104},[106,102890,102891],{"__ignoreMap":104},[109,102892,102893,102895],{"class":111,"line":112},[109,102894,31567],{"class":122},[109,102896,102476],{"class":126},[19,102898,102899,102901,102902,1750,102904,1750,102906,29560],{},[106,102900,31567],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[106,102903,101850],{},[106,102905,101855],{},[106,102907,102908],{},"mujoco.mj_step",[99,102910,102911],{"className":31553,"code":102770,"language":31555,"meta":104,"style":104},[106,102912,102913,102921,102925],{"__ignoreMap":104},[109,102914,102915,102917,102919],{"class":111,"line":112},[109,102916,102489],{"class":133},[109,102918,14737],{"class":122},[109,102920,102494],{"class":278},[109,102922,102923],{"class":111,"line":119},[109,102924,102785],{"class":278},[109,102926,102927],{"class":111,"line":140},[109,102928,96873],{"class":278},[19,102930,102931,102933,102934,102937],{},[106,102932,102489],{}," 是一个变量名。右边的三引号 ",[106,102935,102936],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[99,102939,102940],{"className":54242,"code":102499,"language":54244,"meta":104,"style":104},[106,102941,102942],{"__ignoreMap":104},[109,102943,102944,102946,102948,102951,102953,102956],{"class":111,"line":112},[109,102945,1320],{"class":126},[109,102947,102196],{"class":52475},[109,102949,102950],{"class":211}," model",[109,102952,130],{"class":126},[109,102954,102955],{"class":278},"\"first_sim\"",[109,102957,52482],{"class":126},[19,102959,102960,102961,102964,102965,29560],{},"这是 XML 的根标签。",[106,102962,102963],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[106,102966,102967],{},"first_sim",[99,102969,102970],{"className":54242,"code":102358,"language":54244,"meta":104,"style":104},[106,102971,102972],{"__ignoreMap":104},[109,102973,102974,102976,102978,102980,102982,102984,102986,102988,102990],{"class":111,"line":112},[109,102975,1320],{"class":126},[109,102977,70341],{"class":52475},[109,102979,102369],{"class":211},[109,102981,130],{"class":126},[109,102983,102374],{"class":278},[109,102985,102377],{"class":211},[109,102987,130],{"class":126},[109,102989,102382],{"class":278},[109,102991,102319],{"class":126},[19,102993,102994,102996,102997,103000,103001,103004],{},[106,102995,70341],{}," 用来设置仿真参数。",[106,102998,102999],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[106,103002,103003],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[99,103006,103008],{"className":54242,"code":103007,"language":54244,"meta":104,"style":104},"\u003Cworldbody>\n",[106,103009,103010],{"__ignoreMap":104},[109,103011,103012,103014,103017],{"class":111,"line":112},[109,103013,1320],{"class":126},[109,103015,103016],{"class":52475},"worldbody",[109,103018,52482],{"class":126},[19,103020,103021,103023],{},[106,103022,103016],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[99,103025,103027],{"className":54242,"code":103026,"language":54244,"meta":104,"style":104},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[106,103028,103029],{"__ignoreMap":104},[109,103030,103031,103033,103035,103037,103039,103042,103044,103046,103049,103051,103053,103056,103058,103060,103063],{"class":111,"line":112},[109,103032,1320],{"class":126},[109,103034,102295],{"class":52475},[109,103036,16093],{"class":211},[109,103038,130],{"class":126},[109,103040,103041],{"class":278},"\"floor\"",[109,103043,54999],{"class":211},[109,103045,130],{"class":126},[109,103047,103048],{"class":278},"\"plane\"",[109,103050,102311],{"class":211},[109,103052,130],{"class":126},[109,103054,103055],{"class":278},"\"2 2 0.1\"",[109,103057,79942],{"class":211},[109,103059,130],{"class":126},[109,103061,103062],{"class":278},"\"0.8 0.8 0.8 1\"",[109,103064,102319],{"class":126},[19,103066,103067,103068,103070,103071,103074,103075,103078,103079,103081],{},"这行创建地面。",[106,103069,102295],{}," 是几何体。",[106,103072,103073],{},"name=\"floor\""," 是名字。",[106,103076,103077],{},"type=\"plane\""," 表示平面。",[106,103080,56285],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[99,103083,103085],{"className":54242,"code":103084,"language":54244,"meta":104,"style":104},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[106,103086,103087],{"__ignoreMap":104},[109,103088,103089,103091,103093,103095,103097,103099,103101,103103,103105],{"class":111,"line":112},[109,103090,1320],{"class":126},[109,103092,52975],{"class":52475},[109,103094,16093],{"class":211},[109,103096,130],{"class":126},[109,103098,54666],{"class":278},[109,103100,102281],{"class":211},[109,103102,130],{"class":126},[109,103104,102286],{"class":278},[109,103106,52482],{"class":126},[19,103108,103109,103110,29560,103112,103115,103116,103118],{},"这行创建一个刚体，名字叫 ",[106,103111,54889],{},[106,103113,103114],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[106,103117,102344],{},"，也就是离地面 1 米高。",[99,103120,103122],{"className":54242,"code":103121,"language":54244,"meta":104,"style":104},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[106,103123,103124],{"__ignoreMap":104},[109,103125,103126,103128,103130,103132,103134,103137],{"class":111,"line":112},[109,103127,1320],{"class":126},[109,103129,102795],{"class":52475},[109,103131,16093],{"class":211},[109,103133,130],{"class":126},[109,103135,103136],{"class":278},"\"box_free\"",[109,103138,102319],{"class":126},[19,103140,103141,103142,103144],{},"这行很重要。",[106,103143,102795],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[99,103146,103148],{"className":54242,"code":103147,"language":54244,"meta":104,"style":104},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[106,103149,103150],{"__ignoreMap":104},[109,103151,103152,103154,103156,103158,103160,103162,103164,103166,103168,103170,103172,103174,103177,103179,103181,103183,103185,103188],{"class":111,"line":112},[109,103153,1320],{"class":126},[109,103155,102295],{"class":52475},[109,103157,16093],{"class":211},[109,103159,130],{"class":126},[109,103161,102302],{"class":278},[109,103163,54999],{"class":211},[109,103165,130],{"class":126},[109,103167,54666],{"class":278},[109,103169,102311],{"class":211},[109,103171,130],{"class":126},[109,103173,102316],{"class":278},[109,103175,103176],{"class":211}," mass",[109,103178,130],{"class":126},[109,103180,5021],{"class":278},[109,103182,79942],{"class":211},[109,103184,130],{"class":126},[109,103186,103187],{"class":278},"\"1 0 0 1\"",[109,103189,102319],{"class":126},[19,103191,103192,103193,103196,103197,103200,103201,103204,103205,103208],{},"这行给 box body 添加一个盒子形状。",[106,103194,103195],{},"type=\"box\""," 表示形状是盒子。",[106,103198,103199],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[106,103202,103203],{},"mass=\"1\""," 表示质量是 1。",[106,103206,103207],{},"rgba=\"1 0 0 1\""," 表示红色。",[99,103210,103212],{"className":31553,"code":103211,"language":31555,"meta":104,"style":104},"def main() -> None:\n",[106,103213,103214],{"__ignoreMap":104},[109,103215,103216,103218,103220,103222,103224],{"class":111,"line":112},[109,103217,33122],{"class":122},[109,103219,212],{"class":211},[109,103221,102573],{"class":126},[109,103223,96861],{"class":133},[109,103225,5082],{"class":126},[19,103227,103228,103230,103231,103234,103235,103238],{},[106,103229,33122],{}," 用来定义函数。这里定义了一个叫 ",[106,103232,103233],{},"main"," 的函数。",[106,103236,103237],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[99,103240,103241],{"className":31553,"code":102802,"language":31555,"meta":104,"style":104},[106,103242,103243],{"__ignoreMap":104},[109,103244,103245,103247,103249,103251,103253],{"class":111,"line":112},[109,103246,102809],{"class":126},[109,103248,130],{"class":122},[109,103250,102587],{"class":126},[109,103252,102489],{"class":133},[109,103254,1330],{"class":126},[19,103256,103257,103258,103261],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[106,103259,103260],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[99,103263,103264],{"className":31553,"code":102826,"language":31555,"meta":104,"style":104},[106,103265,103266],{"__ignoreMap":104},[109,103267,103268,103270,103272],{"class":111,"line":112},[109,103269,102833],{"class":126},[109,103271,130],{"class":122},[109,103273,102601],{"class":126},[19,103275,103276,103277,103279,103280,103282],{},"这行创建仿真数据。",[106,103278,34576],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[106,103281,34576],{}," 都会变化。",[99,103284,103286],{"className":31553,"code":103285,"language":31555,"meta":104,"style":104},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[106,103287,103288,103298,103308],{"__ignoreMap":104},[109,103289,103290,103292,103294,103296],{"class":111,"line":112},[109,103291,31590],{"class":133},[109,103293,714],{"class":126},[109,103295,102614],{"class":278},[109,103297,102617],{"class":126},[109,103299,103300,103302,103304,103306],{"class":111,"line":119},[109,103301,31590],{"class":133},[109,103303,714],{"class":126},[109,103305,102626],{"class":278},[109,103307,102629],{"class":126},[109,103309,103310,103312,103314,103316],{"class":111,"line":140},[109,103311,31590],{"class":133},[109,103313,714],{"class":126},[109,103315,102638],{"class":278},[109,103317,102641],{"class":126},[19,103319,103320,103322,103323,103326,103327,103330,103331,103334,103335,103338],{},[106,103321,31590],{}," 用来输出信息。",[106,103324,103325],{},"model.nq"," 是位置变量数量，",[106,103328,103329],{},"model.nv"," 是速度变量数量，",[106,103332,103333],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[106,103336,103337],{},"nu"," 是 0。",[99,103340,103342],{"className":31553,"code":103341,"language":31555,"meta":104,"style":104},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[106,103343,103344,103354],{"__ignoreMap":104},[109,103345,103346,103348,103350,103352],{"class":111,"line":112},[109,103347,31590],{"class":133},[109,103349,714],{"class":126},[109,103351,102650],{"class":278},[109,103353,102653],{"class":126},[109,103355,103356,103358,103360,103362],{"class":111,"line":119},[109,103357,31590],{"class":133},[109,103359,714],{"class":126},[109,103361,102662],{"class":278},[109,103363,102665],{"class":126},[19,103365,103366,103367,103369,103370,103372,103373,103376],{},"这里打印初始时间和初始位置。",[106,103368,102242],{}," 一开始是 0。",[106,103371,102245],{}," 是位置数组。",[106,103374,103375],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[99,103378,103379],{"className":31553,"code":102851,"language":31555,"meta":104,"style":104},[106,103380,103381,103397],{"__ignoreMap":104},[109,103382,103383,103385,103387,103389,103391,103393,103395],{"class":111,"line":112},[109,103384,4372],{"class":122},[109,103386,102676],{"class":126},[109,103388,27218],{"class":122},[109,103390,33618],{"class":133},[109,103392,714],{"class":126},[109,103394,1351],{"class":133},[109,103396,31961],{"class":126},[109,103398,103399],{"class":111,"line":119},[109,103400,102874],{"class":126},[19,103402,103403,103405,103406,103409,103410,103412,103413,103415],{},[106,103404,4372],{}," 是循环。",[106,103407,103408],{},"range(100)"," 表示循环 100 次。",[106,103411,2522],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[106,103414,102390],{},"，仿真就前进一步。",[99,103417,103419],{"className":31553,"code":103418,"language":31555,"meta":104,"style":104},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[106,103420,103421,103431],{"__ignoreMap":104},[109,103422,103423,103425,103427,103429],{"class":111,"line":112},[109,103424,31590],{"class":133},[109,103426,714],{"class":126},[109,103428,102704],{"class":278},[109,103430,102653],{"class":126},[109,103432,103433,103435,103437,103439],{"class":111,"line":119},[109,103434,31590],{"class":133},[109,103436,714],{"class":126},[109,103438,102715],{"class":278},[109,103440,102665],{"class":126},[19,103442,103443],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[99,103445,103447],{"className":31553,"code":103446,"language":31555,"meta":104,"style":104},"if __name__ == \"__main__\":\n    main()\n",[106,103448,103449,103461],{"__ignoreMap":104},[109,103450,103451,103453,103455,103457,103459],{"class":111,"line":112},[109,103452,2922],{"class":122},[109,103454,32395],{"class":133},[109,103456,102734],{"class":122},[109,103458,102737],{"class":278},[109,103460,5082],{"class":126},[109,103462,103463],{"class":111,"line":119},[109,103464,102744],{"class":126},[19,103466,103467,103468,103471,103472,29560],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[106,103469,103470],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[106,103473,103470],{},[19,103475,103476],{},"运行:",[99,103478,103480],{"className":24996,"code":103479,"language":24998,"meta":104,"style":104},"python ch1_first_sim.py\n",[106,103481,103482],{"__ignoreMap":104},[109,103483,103484,103486],{"class":111,"line":112},[109,103485,31555],{"class":211},[109,103487,102461],{"class":278},[14,103489,103491],{"id":103490},"_5运行结果说明","5.运行结果说明",[19,103493,103494],{},"你应该看到类似输出:",[99,103496,103499],{"className":103497,"code":103498,"language":6524,"meta":104},[6522],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[106,103500,103498],{"__ignoreMap":104},[19,103502,103503,103505,103506,103509,103510,29560],{},[106,103504,102795],{}," 有 7 个位置变量: ",[106,103507,103508],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[106,103511,103512],{},"vx vy vz wx wy wz",[19,103514,103515,103516,103519],{},"你还会看到 ",[106,103517,103518],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103521,103523],{"id":103522},"_6验证步骤","6.验证步骤",[19,103525,103526],{},"确认版本:",[99,103528,103529],{"className":24996,"code":102114,"language":24998,"meta":104,"style":104},[106,103530,103531],{"__ignoreMap":104},[109,103532,103533,103535,103537],{"class":111,"line":112},[109,103534,31555],{"class":211},[109,103536,31533],{"class":133},[109,103538,102125],{"class":278},[19,103540,103541],{},"确认导入的是官方 bindings:",[99,103543,103545],{"className":24996,"code":103544,"language":24998,"meta":104,"style":104},"python -c \"import mujoco; print(mujoco)\"\n",[106,103546,103547],{"__ignoreMap":104},[109,103548,103549,103551,103553],{"class":111,"line":112},[109,103550,31555],{"class":211},[109,103552,31533],{"class":133},[109,103554,103555],{"class":278}," \"import mujoco; print(mujoco)\"\n",[19,103557,103558],{},"运行程序:",[99,103560,103561],{"className":24996,"code":103479,"language":24998,"meta":104,"style":104},[106,103562,103563],{"__ignoreMap":104},[109,103564,103565,103567],{"class":111,"line":112},[109,103566,31555],{"class":211},[109,103568,102461],{"class":278},[19,103570,103571,103572,103575,103576,29560],{},"检查 ",[106,103573,103574],{},"final time"," 是否约等于 ",[106,103577,103578],{},"1.0",[19,103580,103581],{},"再做几个小实验：",[765,103583,103584,103594,103602,103615],{},[30,103585,103586,103587,103589,103590,103593],{},"把 ",[106,103588,103114],{}," 改成 ",[106,103591,103592],{},"pos=\"0 0 2\"","，观察初始高度变化。",[30,103595,103586,103596,103589,103598,103601],{},[106,103597,103003],{},[106,103599,103600],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[30,103603,103586,103604,103589,103606,103609,103610,103612,103613,29560],{},[106,103605,102999],{},[106,103607,103608],{},"timestep=\"0.005\"","，观察 100 步后的 ",[106,103611,103574],{}," 是否变成约 ",[106,103614,36504],{},[30,103616,103617,103618,103621],{},"删除 ",[106,103619,103620],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103623,103624],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103626,103628],{"id":103627},"_7常见错误与解决方案","7.常见错误与解决方案",[51,103630,103632],{"id":103631},"modulenotfounderror-no-module-named-mujoco",[106,103633,103634],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103636,103637],{},"解决:",[99,103639,103641],{"className":24996,"code":103640,"language":24998,"meta":104,"style":104},"pip install \"mujoco>=2.3\"\n",[106,103642,103643],{"__ignoreMap":104},[109,103644,103645,103647,103649],{"class":111,"line":112},[109,103646,25005],{"class":211},[109,103648,25008],{"class":278},[109,103650,103651],{"class":278}," \"mujoco>=2.3\"\n",[51,103653,103655],{"id":103654},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103657,103658],{},"先安装系统依赖:",[99,103660,103662],{"className":24996,"code":103661,"language":24998,"meta":104,"style":104},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[106,103663,103664],{"__ignoreMap":104},[109,103665,103666,103668,103670,103672,103674,103677,103679,103682,103684,103687,103689],{"class":111,"line":112},[109,103667,25751],{"class":211},[109,103669,27490],{"class":278},[109,103671,25008],{"class":278},[109,103673,27575],{"class":133},[109,103675,103676],{"class":278}," mesa-libGL",[109,103678,101989],{"class":278},[109,103680,103681],{"class":278}," glfw",[109,103683,102009],{"class":278},[109,103685,103686],{"class":278}," libX11",[109,103688,102022],{"class":278},[109,103690,103691],{"class":278}," libXrandr\n",[51,103693,103695],{"id":103694},"xml-解析失败","XML 解析失败",[19,103697,103698],{},"检查:",[765,103700,103701,103704,103707,103713],{},[30,103702,103703],{},"标签是否闭合",[30,103705,103706],{},"属性是否带引号",[30,103708,103709,103710],{},"根节点是否是 ",[106,103711,103712],{},"\u003Cmujoco>",[30,103714,103715,103717,103718,103721],{},[106,103716,52975],{}," 是否放在 ",[106,103719,103720],{},"\u003Cworldbody>"," 内部",[51,103723,103725,103727,103728],{"id":103724},"final-time-不是严格等于-10",[106,103726,103574],{}," 不是严格等于 ",[106,103729,103578],{},[19,103731,103732],{},"这通常不是错误。浮点数计算可能得到：",[99,103734,103737],{"className":103735,"code":103736,"language":6524,"meta":104},[6522],"1.0000000000000007\n",[106,103738,103736],{"__ignoreMap":104},[19,103740,103741,103742,103744],{},"只要接近 ",[106,103743,103578],{}," 就正常。",[51,103746,103747],{"id":103747},"方块没有掉下来",[19,103749,103750],{},"检查：",[765,103752,103753,103759,103765,103770],{},[30,103754,103755,103756],{},"方块 body 里是否有 ",[106,103757,103758],{},"\u003Cfreejoint\u002F>",[30,103760,103761,103762],{},"重力是否是 ",[106,103763,103764],{},"0 0 -9.81",[30,103766,103767,103768],{},"是否真的调用了 ",[106,103769,101860],{},[30,103771,103772,103773,103775,103776],{},"你看的是否是 ",[106,103774,103518],{},"，不是 ",[106,103777,103778],{},"initial qpos",[14,103780,103782],{"id":103781},"_8本章小结","8.本章小结",[19,103784,103785],{},"本章你已经完成了 MuJoCo 的最小闭环：",[99,103787,103790],{"className":103788,"code":103789,"language":6524,"meta":104},[6522],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[106,103791,103789],{"__ignoreMap":104},[19,103793,103794],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1467,103796,103797],{},"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":104,"searchDepth":119,"depth":119,"links":103799},[103800,103801,103802,103807,103811,103812,103813,103821],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":103803},[103804,103805,103806],{"id":102257,"depth":140,"text":102258},{"id":102351,"depth":140,"text":102352},{"id":102403,"depth":140,"text":102404},{"id":102427,"depth":119,"text":102428,"children":103808},[103809,103810],{"id":102747,"depth":140,"text":102747},{"id":102883,"depth":140,"text":102883},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":103814},[103815,103816,103817,103818,103820],{"id":103631,"depth":140,"text":103634},{"id":103654,"depth":140,"text":103655},{"id":103694,"depth":140,"text":103695},{"id":103724,"depth":140,"text":103819},"final time 不是严格等于 1.0",{"id":103747,"depth":140,"text":103747},{"id":103781,"depth":119,"text":103782},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101813,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103828,"title":103829,"body":103830,"description":104,"extension":1476,"meta":105486,"navigation":157,"path":105487,"seo":105488,"stem":105489,"__hash__":105490},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103831,"toc":105462},[103832,103835,103837,103840,103843,103860,103955,103958,103964,103966,103968,103992,103995,104009,104012,104053,104055,104068,104070,104073,104121,104133,104136,104139,104145,104158,104225,104228,104247,104250,104253,104259,104261,104270,104273,104277,104286,104368,104377,104381,104387,104401,104411,104413,104743,104746,104758,104760,104771,104773,104776,104794,104797,104800,104818,104829,104832,104847,104857,104859,104880,104897,104917,104923,104963,104979,104995,105001,105004,105028,105044,105049,105079,105096,105121,105124,105139,105148,105163,105172,105187,105194,105196,105206,105219,105226,105229,105268,105275,105277,105329,105331,105337,105340,105347,105354,105357,105359,105377,105380,105383,105417,105429,105431,105434,105456,105459],[10,103833,103829],{"id":103834},"_2xml-与-mjcf-物理建模基础",[14,103836,101822],{"id":101821},[19,103838,103839],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103841,103842],{},"本章结束后，你应该能看懂一个简单模型里：",[765,103844,103845,103848,103851,103854,103857],{},[30,103846,103847],{},"地面在哪里。",[30,103849,103850],{},"物体初始位置在哪里。",[30,103852,103853],{},"几何体是什么形状。",[30,103855,103856],{},"哪些 body 可以自由运动。",[30,103858,103859],{},"如何用名字在 Python 里找到 XML 中的对象。",[1677,103861,103862,103872],{},[1680,103863,103864],{},[1683,103865,103866,103869],{},[1686,103867,103868],{"align":24910},"标签",[1686,103870,103871],{"align":24910},"作用",[1723,103873,103874,103883,103893,103902,103912,103922,103935,103945],{},[1683,103875,103876,103880],{},[1728,103877,103878],{"align":24910},[106,103879,103712],{},[1728,103881,103882],{"align":24910},"根节点",[1683,103884,103885,103890],{},[1728,103886,103887],{"align":24910},[106,103888,103889],{},"\u003Coption>",[1728,103891,103892],{"align":24910},"仿真参数",[1683,103894,103895,103899],{},[1728,103896,103897],{"align":24910},[106,103898,103720],{},[1728,103900,103901],{"align":24910},"世界中的物体",[1683,103903,103904,103909],{},[1728,103905,103906],{"align":24910},[106,103907,103908],{},"\u003Cbody>",[1728,103910,103911],{"align":24910},"刚体",[1683,103913,103914,103919],{},[1728,103915,103916],{"align":24910},[106,103917,103918],{},"\u003Cgeom>",[1728,103920,103921],{"align":24910},"几何体、碰撞体、可视体",[1683,103923,103924,103932],{},[1728,103925,103926,26153,103929],{"align":24910},[106,103927,103928],{},"\u003Cjoint>",[106,103930,103931],{},"\u003Cfreejoint>",[1728,103933,103934],{"align":24910},"关节",[1683,103936,103937,103942],{},[1728,103938,103939],{"align":24910},[106,103940,103941],{},"\u003Csite>",[1728,103943,103944],{"align":24910},"标记点",[1683,103946,103947,103952],{},[1728,103948,103949],{"align":24910},[106,103950,103951],{},"\u003Cactuator>",[1728,103953,103954],{"align":24910},"控制器",[19,103956,103957],{},"初学时可以先记住：",[99,103959,103962],{"className":103960,"code":103961,"language":6524,"meta":104},[6522],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[106,103963,103961],{"__ignoreMap":104},[14,103965,101945],{"id":101944},[19,103967,101948],{},[99,103969,103971],{"className":24996,"code":103970,"language":24998,"meta":104,"style":104},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[106,103972,103973],{"__ignoreMap":104},[109,103974,103975,103977,103979,103981,103983,103985,103987,103989],{"class":111,"line":112},[109,103976,25751],{"class":211},[109,103978,27490],{"class":278},[109,103980,25008],{"class":278},[109,103982,27575],{"class":133},[109,103984,103676],{"class":278},[109,103986,101989],{"class":278},[109,103988,103681],{"class":278},[109,103990,103991],{"class":278}," glfw-devel\n",[19,103993,103994],{},"pip:",[99,103996,103997],{"className":24996,"code":102094,"language":24998,"meta":104,"style":104},[106,103998,103999],{"__ignoreMap":104},[109,104000,104001,104003,104005,104007],{"class":111,"line":112},[109,104002,25005],{"class":211},[109,104004,25008],{"class":278},[109,104006,102105],{"class":278},[109,104008,102108],{"class":278},[19,104010,104011],{},"conda:",[99,104013,104015],{"className":24996,"code":104014,"language":24998,"meta":104,"style":104},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[106,104016,104017,104034,104043],{"__ignoreMap":104},[109,104018,104019,104021,104023,104025,104028,104030,104032],{"class":111,"line":112},[109,104020,31505],{"class":211},[109,104022,30351],{"class":278},[109,104024,26290],{"class":133},[109,104026,104027],{"class":278}," mujoco-xml",[109,104029,102150],{"class":278},[109,104031,102153],{"class":133},[109,104033,102156],{"class":133},[109,104035,104036,104038,104040],{"class":111,"line":119},[109,104037,31505],{"class":211},[109,104039,102163],{"class":278},[109,104041,104042],{"class":278}," mujoco-xml\n",[109,104044,104045,104047,104049,104051],{"class":111,"line":140},[109,104046,25005],{"class":211},[109,104048,25008],{"class":278},[109,104050,102105],{"class":278},[109,104052,102108],{"class":278},[19,104054,102179],{},[765,104056,104057,104060,104065],{},[30,104058,104059],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[30,104061,104062,104063,29560],{},"本章使用基础标签，适用于 ",[106,104064,102202],{},[30,104066,104067],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104069,102220],{"id":102219},[19,104071,104072],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[99,104074,104076],{"className":54242,"code":104075,"language":54244,"meta":104,"style":104},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[106,104077,104078,104092,104100,104105,104113],{"__ignoreMap":104},[109,104079,104080,104082,104084,104086,104088,104090],{"class":111,"line":112},[109,104081,1320],{"class":126},[109,104083,102196],{"class":52475},[109,104085,102950],{"class":211},[109,104087,130],{"class":126},[109,104089,63854],{"class":278},[109,104091,52482],{"class":126},[109,104093,104094,104096,104098],{"class":111,"line":119},[109,104095,53319],{"class":126},[109,104097,103016],{"class":52475},[109,104099,52482],{"class":126},[109,104101,104102],{"class":111,"line":140},[109,104103,104104],{"class":126},"    ...\n",[109,104106,104107,104109,104111],{"class":111,"line":154},[109,104108,53592],{"class":126},[109,104110,103016],{"class":52475},[109,104112,52482],{"class":126},[109,104114,104115,104117,104119],{"class":111,"line":161},[109,104116,52960],{"class":126},[109,104118,102196],{"class":52475},[109,104120,52482],{"class":126},[19,104122,104123,104125,104126,104128,104129,104132],{},[106,104124,52975],{}," 表示刚体。",[106,104127,102295],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[106,104130,104131],{},"joint"," 表示刚体相对父刚体如何运动。",[51,104134,104135],{"id":104135},"层级结构非常重要",[19,104137,104138],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[99,104140,104143],{"className":104141,"code":104142,"language":6524,"meta":104},[6522],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[106,104144,104142],{"__ignoreMap":104},[19,104146,104147,102193,104150,104153,104154,104157],{},[106,104148,104149],{},"red_box_geom",[106,104151,104152],{},"box_center"," 都属于 ",[106,104155,104156],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[99,104159,104161],{"className":54242,"code":104160,"language":54244,"meta":104,"style":104},"\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",[106,104162,104163,104183,104197,104217],{"__ignoreMap":104},[109,104164,104165,104167,104169,104171,104173,104175,104177,104179,104181],{"class":111,"line":112},[109,104166,1320],{"class":126},[109,104168,52975],{"class":52475},[109,104170,16093],{"class":211},[109,104172,130],{"class":126},[109,104174,54666],{"class":278},[109,104176,102281],{"class":211},[109,104178,130],{"class":126},[109,104180,102286],{"class":278},[109,104182,52482],{"class":126},[109,104184,104185,104187,104189,104191,104193,104195],{"class":111,"line":119},[109,104186,53319],{"class":126},[109,104188,102795],{"class":52475},[109,104190,16093],{"class":211},[109,104192,130],{"class":126},[109,104194,103136],{"class":278},[109,104196,102319],{"class":126},[109,104198,104199,104201,104203,104205,104207,104209,104211,104213,104215],{"class":111,"line":140},[109,104200,53319],{"class":126},[109,104202,102295],{"class":52475},[109,104204,54999],{"class":211},[109,104206,130],{"class":126},[109,104208,54666],{"class":278},[109,104210,102311],{"class":211},[109,104212,130],{"class":126},[109,104214,102316],{"class":278},[109,104216,102319],{"class":126},[109,104218,104219,104221,104223],{"class":111,"line":154},[109,104220,52960],{"class":126},[109,104222,52975],{"class":52475},[109,104224,52482],{"class":126},[19,104226,104227],{},"含义:",[765,104229,104230,104236,104241,104244],{},[30,104231,104232,104233,104235],{},"创建名为 ",[106,104234,54889],{}," 的刚体",[30,104237,104238,104239],{},"初始位置在世界坐标 ",[106,104240,102344],{},[30,104242,104243],{},"它有一个自由关节",[30,104245,104246],{},"它有一个盒子几何体",[51,104248,104249],{"id":104249},"坐标怎么理解",[19,104251,104252],{},"MuJoCo 默认使用三维坐标：",[99,104254,104257],{"className":104255,"code":104256,"language":6524,"meta":104},[6522],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[106,104258,104256],{"__ignoreMap":104},[19,104260,15806],{},[99,104262,104264],{"className":54242,"code":104263,"language":54244,"meta":104,"style":104},"pos=\"0 0 1\"\n",[106,104265,104266],{"__ignoreMap":104},[109,104267,104268],{"class":111,"line":112},[109,104269,104263],{"class":126},[19,104271,104272],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[51,104274,104276],{"id":104275},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104278,104279,104280,83705,104283,104285],{},"不同 ",[106,104281,104282],{},"type",[106,104284,32671],{}," 含义不同：",[1677,104287,104288,104303],{},[1680,104289,104290],{},[1683,104291,104292,104296,104301],{},[1686,104293,104294],{"align":24910},[106,104295,104282],{},[1686,104297,104298,104300],{"align":24910},[106,104299,32671],{}," 示例",[1686,104302,101875],{"align":24910},[1723,104304,104305,104319,104334,104353],{},[1683,104306,104307,104311,104316],{},[1728,104308,104309],{"align":24910},[106,104310,54889],{},[1728,104312,104313],{"align":24910},[106,104314,104315],{},"size=\"0.1 0.2 0.3\"",[1728,104317,104318],{"align":24910},"x\u002Fy\u002Fz 半边长，不是完整长度",[1683,104320,104321,104326,104331],{},[1728,104322,104323],{"align":24910},[106,104324,104325],{},"sphere",[1728,104327,104328],{"align":24910},[106,104329,104330],{},"size=\"0.1\"",[1728,104332,104333],{"align":24910},"球半径",[1683,104335,104336,104341,104346],{},[1728,104337,104338],{"align":24910},[106,104339,104340],{},"capsule",[1728,104342,104343],{"align":24910},[106,104344,104345],{},"size=\"0.03\"",[1728,104347,104348,104349,104352],{"align":24910},"胶囊半径，长度常用 ",[106,104350,104351],{},"fromto"," 指定",[1683,104354,104355,104360,104365],{},[1728,104356,104357],{"align":24910},[106,104358,104359],{},"plane",[1728,104361,104362],{"align":24910},[106,104363,104364],{},"size=\"3 3 0.1\"",[1728,104366,104367],{"align":24910},"可视平面大小，通常当地面",[19,104369,104370,104371,104373,104374,104376],{},"最容易踩坑的是 box：",[106,104372,103199],{}," 表示边长大约是 ",[106,104375,33212],{},"，因为 MuJoCo 用的是半边长。",[51,104378,104380],{"id":104379},"site-是什么","site 是什么",[19,104382,104383,104386],{},[106,104384,104385],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[765,104388,104389,104392,104395,104398],{},[30,104390,104391],{},"标记机械臂末端。",[30,104393,104394],{},"标记目标位置。",[30,104396,104397],{},"放传感器或相机参考点。",[30,104399,104400],{},"在 Python 中读取某个关键点的世界坐标。",[19,104402,104403,104404,102193,104407,104410],{},"在后面的 Reacher 任务中，",[106,104405,104406],{},"tip",[106,104408,104409],{},"target"," 就会用 site 表示。",[14,104412,102428],{"id":102427},[99,104414,104416],{"className":31553,"code":104415,"language":31555,"meta":104,"style":104},"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",[106,104417,104418,104424,104434,104438,104442,104450,104455,104459,104463,104467,104472,104476,104481,104486,104491,104496,104500,104504,104508,104512,104516,104520,104532,104544,104552,104556,104571,104586,104590,104603,104618,104631,104644,104648,104664,104668,104672,104683,104695,104707,104719,104723,104727,104739],{"__ignoreMap":104},[109,104419,104420,104422],{"class":111,"line":112},[109,104421,31567],{"class":122},[109,104423,102476],{"class":126},[109,104425,104426,104428,104430,104432],{"class":111,"line":119},[109,104427,31567],{"class":122},[109,104429,32555],{"class":126},[109,104431,32558],{"class":122},[109,104433,32561],{"class":126},[109,104435,104436],{"class":111,"line":140},[109,104437,158],{"emptyLinePlaceholder":157},[109,104439,104440],{"class":111,"line":154},[109,104441,158],{"emptyLinePlaceholder":157},[109,104443,104444,104446,104448],{"class":111,"line":161},[109,104445,102489],{"class":133},[109,104447,14737],{"class":122},[109,104449,102494],{"class":278},[109,104451,104452],{"class":111,"line":167},[109,104453,104454],{"class":278},"\u003Cmujoco model=\"xml_basic\">\n",[109,104456,104457],{"class":111,"line":185},[109,104458,102504],{"class":278},[109,104460,104461],{"class":111,"line":201},[109,104462,158],{"emptyLinePlaceholder":157},[109,104464,104465],{"class":111,"line":206},[109,104466,102513],{"class":278},[109,104468,104469],{"class":111,"line":218},[109,104470,104471],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[109,104473,104474],{"class":111,"line":223},[109,104475,158],{"emptyLinePlaceholder":157},[109,104477,104478],{"class":111,"line":229},[109,104479,104480],{"class":278},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[109,104482,104483],{"class":111,"line":244},[109,104484,104485],{"class":278},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[109,104487,104488],{"class":111,"line":258},[109,104489,104490],{"class":278},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[109,104492,104493],{"class":111,"line":263},[109,104494,104495],{"class":278},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[109,104497,104498],{"class":111,"line":269},[109,104499,102542],{"class":278},[109,104501,104502],{"class":111,"line":304},[109,104503,102547],{"class":278},[109,104505,104506],{"class":111,"line":331},[109,104507,102552],{"class":278},[109,104509,104510],{"class":111,"line":336},[109,104511,96873],{"class":278},[109,104513,104514],{"class":111,"line":364},[109,104515,158],{"emptyLinePlaceholder":157},[109,104517,104518],{"class":111,"line":391},[109,104519,158],{"emptyLinePlaceholder":157},[109,104521,104522,104524,104526,104528,104530],{"class":111,"line":396},[109,104523,33122],{"class":122},[109,104525,212],{"class":211},[109,104527,102573],{"class":126},[109,104529,96861],{"class":133},[109,104531,5082],{"class":126},[109,104533,104534,104536,104538,104540,104542],{"class":111,"line":402},[109,104535,102582],{"class":126},[109,104537,130],{"class":122},[109,104539,102587],{"class":126},[109,104541,102489],{"class":133},[109,104543,1330],{"class":126},[109,104545,104546,104548,104550],{"class":111,"line":419},[109,104547,102596],{"class":126},[109,104549,130],{"class":122},[109,104551,102601],{"class":126},[109,104553,104554],{"class":111,"line":435},[109,104555,158],{"emptyLinePlaceholder":157},[109,104557,104558,104561,104563,104566,104569],{"class":111,"line":440},[109,104559,104560],{"class":126},"    box_body_id ",[109,104562,130],{"class":122},[109,104564,104565],{"class":126}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[109,104567,104568],{"class":278},"\"red_box\"",[109,104570,1330],{"class":126},[109,104572,104573,104576,104578,104581,104584],{"class":111,"line":467},[109,104574,104575],{"class":126},"    site_id ",[109,104577,130],{"class":122},[109,104579,104580],{"class":126}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[109,104582,104583],{"class":278},"\"box_center\"",[109,104585,1330],{"class":126},[109,104587,104588],{"class":111,"line":494},[109,104589,158],{"emptyLinePlaceholder":157},[109,104591,104592,104594,104597,104599,104601],{"class":111,"line":499},[109,104593,4446],{"class":122},[109,104595,104596],{"class":126}," box_body_id ",[109,104598,1320],{"class":122},[109,104600,734],{"class":133},[109,104602,5082],{"class":126},[109,104604,104605,104608,104611,104613,104616],{"class":111,"line":526},[109,104606,104607],{"class":122},"        raise",[109,104609,104610],{"class":133}," RuntimeError",[109,104612,714],{"class":126},[109,104614,104615],{"class":278},"\"body red_box not found\"",[109,104617,1330],{"class":126},[109,104619,104620,104622,104625,104627,104629],{"class":111,"line":552},[109,104621,4446],{"class":122},[109,104623,104624],{"class":126}," site_id ",[109,104626,1320],{"class":122},[109,104628,734],{"class":133},[109,104630,5082],{"class":126},[109,104632,104633,104635,104637,104639,104642],{"class":111,"line":557},[109,104634,104607],{"class":122},[109,104636,104610],{"class":133},[109,104638,714],{"class":126},[109,104640,104641],{"class":278},"\"site box_center not found\"",[109,104643,1330],{"class":126},[109,104645,104646],{"class":111,"line":584},[109,104647,158],{"emptyLinePlaceholder":157},[109,104649,104650,104652,104654,104656,104658,104660,104662],{"class":111,"line":611},[109,104651,1302],{"class":122},[109,104653,102676],{"class":126},[109,104655,27218],{"class":122},[109,104657,33618],{"class":133},[109,104659,714],{"class":126},[109,104661,3098],{"class":133},[109,104663,31961],{"class":126},[109,104665,104666],{"class":111,"line":616},[109,104667,102691],{"class":126},[109,104669,104670],{"class":111,"line":633},[109,104671,158],{"emptyLinePlaceholder":157},[109,104673,104674,104676,104678,104681],{"class":111,"line":649},[109,104675,32474],{"class":133},[109,104677,714],{"class":126},[109,104679,104680],{"class":278},"\"simulation time:\"",[109,104682,102653],{"class":126},[109,104684,104685,104687,104689,104692],{"class":111,"line":676},[109,104686,32474],{"class":133},[109,104688,714],{"class":126},[109,104690,104691],{"class":278},"\"box body position:\"",[109,104693,104694],{"class":126},", data.xpos[box_body_id].copy())\n",[109,104696,104697,104699,104701,104704],{"class":111,"line":703},[109,104698,32474],{"class":133},[109,104700,714],{"class":126},[109,104702,104703],{"class":278},"\"site position:\"",[109,104705,104706],{"class":126},", data.site_xpos[site_id].copy())\n",[109,104708,104709,104711,104713,104716],{"class":111,"line":708},[109,104710,32474],{"class":133},[109,104712,714],{"class":126},[109,104714,104715],{"class":278},"\"box qpos:\"",[109,104717,104718],{"class":126},", np.array(data.qpos))\n",[109,104720,104721],{"class":111,"line":723},[109,104722,158],{"emptyLinePlaceholder":157},[109,104724,104725],{"class":111,"line":728},[109,104726,158],{"emptyLinePlaceholder":157},[109,104728,104729,104731,104733,104735,104737],{"class":111,"line":739},[109,104730,2922],{"class":122},[109,104732,32395],{"class":133},[109,104734,102734],{"class":122},[109,104736,102737],{"class":278},[109,104738,5082],{"class":126},[109,104740,104741],{"class":111,"line":9352},[109,104742,102744],{"class":126},[19,104744,104745],{},"保存为：",[99,104747,104749],{"className":24996,"code":104748,"language":24998,"meta":104,"style":104},"touch ch2_xml_basic.py\n",[106,104750,104751],{"__ignoreMap":104},[109,104752,104753,104755],{"class":111,"line":112},[109,104754,102458],{"class":211},[109,104756,104757],{"class":278}," ch2_xml_basic.py\n",[19,104759,103476],{},[99,104761,104763],{"className":24996,"code":104762,"language":24998,"meta":104,"style":104},"python ch2_xml_basic.py\n",[106,104764,104765],{"__ignoreMap":104},[109,104766,104767,104769],{"class":111,"line":112},[109,104768,31555],{"class":211},[109,104770,104757],{"class":278},[51,104772,102747],{"id":102747},[19,104774,104775],{},"用名字查找 body：",[99,104777,104779],{"className":31553,"code":104778,"language":31555,"meta":104,"style":104},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[106,104780,104781],{"__ignoreMap":104},[109,104782,104783,104786,104788,104790,104792],{"class":111,"line":112},[109,104784,104785],{"class":126},"box_body_id ",[109,104787,130],{"class":122},[109,104789,104565],{"class":126},[109,104791,104568],{"class":278},[109,104793,1330],{"class":126},[19,104795,104796],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104798,104799],{},"用名字查找 site：",[99,104801,104803],{"className":31553,"code":104802,"language":31555,"meta":104,"style":104},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[106,104804,104805],{"__ignoreMap":104},[109,104806,104807,104810,104812,104814,104816],{"class":111,"line":112},[109,104808,104809],{"class":126},"site_id ",[109,104811,130],{"class":122},[109,104813,104580],{"class":126},[109,104815,104583],{"class":278},[109,104817,1330],{"class":126},[19,104819,104820,104821,104824,104825,104828],{},"注意第二个参数是对象类型。查 body 就用 ",[106,104822,104823],{},"mjOBJ_BODY","，查 site 就用 ",[106,104826,104827],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104830,104831],{},"读取世界坐标：",[99,104833,104835],{"className":31553,"code":104834,"language":31555,"meta":104,"style":104},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[106,104836,104837,104842],{"__ignoreMap":104},[109,104838,104839],{"class":111,"line":112},[109,104840,104841],{"class":126},"data.xpos[box_body_id]\n",[109,104843,104844],{"class":111,"line":119},[109,104845,104846],{"class":126},"data.site_xpos[site_id]\n",[19,104848,104849,104852,104853,104856],{},[106,104850,104851],{},"xpos"," 是 body 的世界坐标，",[106,104854,104855],{},"site_xpos"," 是 site 的世界坐标。",[51,104858,102883],{"id":102883},[99,104860,104862],{"className":31553,"code":104861,"language":31555,"meta":104,"style":104},"import mujoco\nimport numpy as np\n",[106,104863,104864,104870],{"__ignoreMap":104},[109,104865,104866,104868],{"class":111,"line":112},[109,104867,31567],{"class":122},[109,104869,102476],{"class":126},[109,104871,104872,104874,104876,104878],{"class":111,"line":119},[109,104873,31567],{"class":122},[109,104875,32555],{"class":126},[109,104877,32558],{"class":122},[109,104879,32561],{"class":126},[19,104881,104882,104883,104886,104887,104890,104891,1750,104894,29560],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[106,104884,104885],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[106,104888,104889],{},"as np"," 是习惯写法，后面就可以写 ",[106,104892,104893],{},"np.array(...)",[106,104895,104896],{},"np.round(...)",[99,104898,104899],{"className":31553,"code":102770,"language":31555,"meta":104,"style":104},[106,104900,104901,104909,104913],{"__ignoreMap":104},[109,104902,104903,104905,104907],{"class":111,"line":112},[109,104904,102489],{"class":133},[109,104906,14737],{"class":122},[109,104908,102494],{"class":278},[109,104910,104911],{"class":111,"line":119},[109,104912,102785],{"class":278},[109,104914,104915],{"class":111,"line":140},[109,104916,96873],{"class":278},[19,104918,104919,104920,29560],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[106,104921,104922],{},"mujoco.MjModel.from_xml_string(XML)",[99,104924,104926],{"className":54242,"code":104925,"language":54244,"meta":104,"style":104},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[106,104927,104928],{"__ignoreMap":104},[109,104929,104930,104932,104934,104936,104938,104940,104942,104944,104947,104949,104951,104954,104956,104958,104961],{"class":111,"line":112},[109,104931,1320],{"class":126},[109,104933,104385],{"class":52475},[109,104935,16093],{"class":211},[109,104937,130],{"class":126},[109,104939,104583],{"class":278},[109,104941,102281],{"class":211},[109,104943,130],{"class":126},[109,104945,104946],{"class":278},"\"0 0 0\"",[109,104948,102311],{"class":211},[109,104950,130],{"class":126},[109,104952,104953],{"class":278},"\"0.03\"",[109,104955,79942],{"class":211},[109,104957,130],{"class":126},[109,104959,104960],{"class":278},"\"0 1 0 1\"",[109,104962,102319],{"class":126},[19,104964,104965,104967,104968,104971,104972,104974,104975,104978],{},[106,104966,104385],{}," 是标记点。",[106,104969,104970],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[106,104973,104345],{}," 表示显示出来的小球大小。",[106,104976,104977],{},"rgba=\"0 1 0 1\""," 表示绿色。",[99,104980,104981],{"className":31553,"code":104778,"language":31555,"meta":104,"style":104},[106,104982,104983],{"__ignoreMap":104},[109,104984,104985,104987,104989,104991,104993],{"class":111,"line":112},[109,104986,104785],{"class":126},[109,104988,130],{"class":122},[109,104990,104565],{"class":126},[109,104992,104568],{"class":278},[109,104994,1330],{"class":126},[19,104996,104997,104998,105000],{},"这行的作用是：根据名字 ",[106,104999,104568],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105002,105003],{},"拆开看：",[765,105005,105006,105012,105017,105023],{},[30,105007,105008,105011],{},[106,105009,105010],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[30,105013,105014,105016],{},[106,105015,103260],{}," 是被查询的模型。",[30,105018,105019,105022],{},[106,105020,105021],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[30,105024,105025,105027],{},[106,105026,104568],{}," 是 XML 里写的名字。",[99,105029,105030],{"className":31553,"code":104802,"language":31555,"meta":104,"style":104},[106,105031,105032],{"__ignoreMap":104},[109,105033,105034,105036,105038,105040,105042],{"class":111,"line":112},[109,105035,104809],{"class":126},[109,105037,130],{"class":122},[109,105039,104580],{"class":126},[109,105041,104583],{"class":278},[109,105043,1330],{"class":126},[19,105045,105046,105047,29560],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[106,105048,104583],{},[99,105050,105052],{"className":31553,"code":105051,"language":31555,"meta":104,"style":104},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[106,105053,105054,105066],{"__ignoreMap":104},[109,105055,105056,105058,105060,105062,105064],{"class":111,"line":112},[109,105057,2922],{"class":122},[109,105059,104596],{"class":126},[109,105061,1320],{"class":122},[109,105063,734],{"class":133},[109,105065,5082],{"class":126},[109,105067,105068,105071,105073,105075,105077],{"class":111,"line":119},[109,105069,105070],{"class":122},"    raise",[109,105072,104610],{"class":133},[109,105074,714],{"class":126},[109,105076,104615],{"class":278},[109,105078,1330],{"class":126},[19,105080,105081,105083,105084,105087,105088,105091,105092,105095],{},[106,105082,2922],{}," 是条件判断。",[106,105085,105086],{},"mj_name2id"," 找不到对象时会返回 ",[106,105089,105090],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[106,105093,105094],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[99,105097,105099],{"className":31553,"code":105098,"language":31555,"meta":104,"style":104},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[106,105100,105101,105117],{"__ignoreMap":104},[109,105102,105103,105105,105107,105109,105111,105113,105115],{"class":111,"line":112},[109,105104,4372],{"class":122},[109,105106,102676],{"class":126},[109,105108,27218],{"class":122},[109,105110,33618],{"class":133},[109,105112,714],{"class":126},[109,105114,3098],{"class":133},[109,105116,31961],{"class":126},[109,105118,105119],{"class":111,"line":119},[109,105120,102874],{"class":126},[19,105122,105123],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[99,105125,105127],{"className":31553,"code":105126,"language":31555,"meta":104,"style":104},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[106,105128,105129],{"__ignoreMap":104},[109,105130,105131,105133,105135,105137],{"class":111,"line":112},[109,105132,31590],{"class":133},[109,105134,714],{"class":126},[109,105136,104691],{"class":278},[109,105138,104694],{"class":126},[19,105140,105141,105143,105144,105147],{},[106,105142,102254],{}," 保存所有 body 的世界坐标。",[106,105145,105146],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[99,105149,105151],{"className":31553,"code":105150,"language":31555,"meta":104,"style":104},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[106,105152,105153],{"__ignoreMap":104},[109,105154,105155,105157,105159,105161],{"class":111,"line":112},[109,105156,31590],{"class":133},[109,105158,714],{"class":126},[109,105160,104703],{"class":278},[109,105162,104706],{"class":126},[19,105164,105165,105168,105169,105171],{},[106,105166,105167],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[106,105170,104152],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[99,105173,105175],{"className":31553,"code":105174,"language":31555,"meta":104,"style":104},"print(\"box qpos:\", np.array(data.qpos))\n",[106,105176,105177],{"__ignoreMap":104},[109,105178,105179,105181,105183,105185],{"class":111,"line":112},[109,105180,31590],{"class":133},[109,105182,714],{"class":126},[109,105184,104715],{"class":278},[109,105186,104718],{"class":126},[19,105188,105189,105190,105193],{},"这里打印广义位置数组。",[106,105191,105192],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105195,103491],{"id":103490},[19,105197,105198,105199,105202,105203,29560],{},"程序会输出 ",[106,105200,105201],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[106,105204,105205],{},"qpos",[19,105207,105208,105210,105211,105214,105215,105218],{},[106,105209,105146],{}," 是 body 的世界坐标位置。",[106,105212,105213],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[106,105216,105217],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105220,83397,105221,83705,105223,105225],{},[106,105222,104152],{},[106,105224,104970],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105227,105228],{},"如果你把 site 改成：",[99,105230,105232],{"className":54242,"code":105231,"language":54244,"meta":104,"style":104},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[106,105233,105234],{"__ignoreMap":104},[109,105235,105236,105238,105240,105242,105244,105247,105249,105251,105254,105256,105258,105260,105262,105264,105266],{"class":111,"line":112},[109,105237,1320],{"class":126},[109,105239,104385],{"class":52475},[109,105241,16093],{"class":211},[109,105243,130],{"class":126},[109,105245,105246],{"class":278},"\"box_top\"",[109,105248,102281],{"class":211},[109,105250,130],{"class":126},[109,105252,105253],{"class":278},"\"0 0 0.15\"",[109,105255,102311],{"class":211},[109,105257,130],{"class":126},[109,105259,104953],{"class":278},[109,105261,79942],{"class":211},[109,105263,130],{"class":126},[109,105265,104960],{"class":278},[109,105267,102319],{"class":126},[19,105269,105270,105271,105274],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[106,105272,105273],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105276,103523],{"id":103522},[765,105278,105279,105288,105291,105298,105304,105315],{},[30,105280,103586,105281,105283,105284,103589,105286,29560],{},[106,105282,104156],{}," 的初始高度从 ",[106,105285,1755],{},[106,105287,1618],{},[30,105289,105290],{},"重新运行程序。",[30,105292,105293,105294,105297],{},"观察 ",[106,105295,105296],{},"box qpos"," 和最终位置是否变化。",[30,105299,105300,105301,105303],{},"故意把 ",[106,105302,104385],{}," 名称改错，确认程序能报错。",[30,105305,103586,105306,105308,105309,103589,105311,105314],{},[106,105307,102295],{}," 的颜色 ",[106,105310,103207],{},[106,105312,105313],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[30,105316,103586,105317,83705,105319,103589,105322,105325,105326,105328],{},[106,105318,104152],{},[106,105320,105321],{},"pos",[106,105323,105324],{},"0 0 0.2","，观察 ",[106,105327,105273],{}," 如何变化。",[14,105330,103628],{"id":103627},[51,105332,105334],{"id":105333},"xml-error-schema-violation",[106,105335,105336],{},"XML Error: Schema violation",[19,105338,105339],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[51,105341,105343,82465,105345],{"id":105342},"mj_name2id-返回-1",[106,105344,105086],{},[106,105346,105090],{},[19,105348,105349,105350,105353],{},"说明名字没有找到。检查 XML 中 ",[106,105351,105352],{},"name=\"...\"","，并确认对象类型正确。",[51,105355,105356],{"id":105356},"物体不下落",[19,105358,103698],{},[765,105360,105361,105366,105371],{},[30,105362,105363,105364],{},"body 是否有 ",[106,105365,102795],{},[30,105367,105368,105369],{},"gravity 是否为 ",[106,105370,103764],{},[30,105372,105373,105374,105376],{},"body 是否被固定在 ",[106,105375,103016],{}," 中",[51,105378,105379],{"id":105379},"坐标看起来不符合预期",[19,105381,105382],{},"先区分两种坐标：",[1677,105384,105385,105394],{},[1680,105386,105387],{},[1683,105388,105389,105392],{},[1686,105390,105391],{"align":24910},"坐标",[1686,105393,101875],{"align":24910},[1723,105395,105396,105406],{},[1683,105397,105398,105403],{},[1728,105399,105400,105401],{"align":24910},"XML 里的 ",[106,105402,105321],{},[1728,105404,105405],{"align":24910},"相对父 body 的局部坐标",[1683,105407,105408,105414],{},[1728,105409,105410,26153,105412],{"align":24910},[106,105411,102254],{},[106,105413,105167],{},[1728,105415,105416],{"align":24910},"仿真更新后的世界坐标",[19,105418,105419,105420,105422,105423,83714,105426,105428],{},"如果你修改了 ",[106,105421,102245],{},"，但还没调用 ",[106,105424,105425],{},"mj_forward",[106,105427,102390],{},"，世界坐标可能还没有更新。",[14,105430,103782],{"id":103781},[19,105432,105433],{},"MJCF 建模先掌握四件事：",[765,105435,105436,105441,105446,105451],{},[30,105437,105438,105440],{},[106,105439,52975],{}," 表示刚体层级。",[30,105442,105443,105445],{},[106,105444,102295],{}," 表示形状、碰撞和质量。",[30,105447,105448,105450],{},[106,105449,104131],{}," 决定 body 能不能动、怎么动。",[30,105452,105453,105455],{},[106,105454,104385],{}," 用来标记关键点，方便 Python 读取位置。",[19,105457,105458],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1467,105460,105461],{},"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":104,"searchDepth":119,"depth":119,"links":105463},[105464,105465,105466,105472,105476,105477,105478,105485],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":105467},[105468,105469,105470,105471],{"id":104135,"depth":140,"text":104135},{"id":104249,"depth":140,"text":104249},{"id":104275,"depth":140,"text":104276},{"id":104379,"depth":140,"text":104380},{"id":102427,"depth":119,"text":102428,"children":105473},[105474,105475],{"id":102747,"depth":140,"text":102747},{"id":102883,"depth":140,"text":102883},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":105479},[105480,105481,105483,105484],{"id":105333,"depth":140,"text":105336},{"id":105342,"depth":140,"text":105482},"mj_name2id 返回 -1",{"id":105356,"depth":140,"text":105356},{"id":105379,"depth":140,"text":105379},{"id":103781,"depth":119,"text":103782},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103829,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105492,"title":105493,"body":105494,"description":104,"extension":1476,"meta":106989,"navigation":157,"path":106990,"seo":106991,"stem":106992,"__hash__":106993},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105495,"toc":106961},[105496,105499,105501,105504,105507,105545,105548,105554,105557,105559,105561,105588,105590,105604,105606,105647,105649,105673,105675,105678,105687,105696,105699,105708,105716,105725,105728,105738,105741,105793,105800,105806,105814,105862,105865,105884,105887,105895,105899,105908,105941,105943,106291,106293,106305,106307,106318,106320,106323,106344,106350,106353,106378,106388,106391,106399,106402,106405,106426,106437,106439,106459,106462,106483,106492,106511,106517,106542,106545,106559,106566,106590,106593,106601,106610,106626,106638,106646,106655,106657,106660,106684,106689,106692,106714,106716,106755,106757,106764,106766,106774,106777,106780,106792,106833,106840,106851,106858,106861,106910,106913,106916,106922,106924,106929,106955,106958],[10,105497,105493],{"id":105498},"_3python-控制接口读取状态与推进仿真",[14,105500,101822],{"id":101821},[19,105502,105503],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105505,105506],{},"你将学习:",[765,105508,105509,105514,105519,105523,105528,105539],{},[30,105510,105511],{},[106,105512,105513],{},"MjModel.from_xml_string",[30,105515,105516],{},[106,105517,105518],{},"MjData(model)",[30,105520,105521],{},[106,105522,102390],{},[30,105524,105525],{},[106,105526,105527],{},"mj_resetData",[30,105529,105530,105531,1750,105533,1750,105536],{},"读取 ",[106,105532,105205],{},[106,105534,105535],{},"qvel",[106,105537,105538],{},"ctrl",[30,105540,105541,105542],{},"使用 ",[106,105543,105544],{},"model.opt.timestep",[19,105546,105547],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[99,105549,105552],{"className":105550,"code":105551,"language":6524,"meta":104},[6522],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[106,105553,105551],{"__ignoreMap":104},[19,105555,105556],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105558,101945],{"id":101944},[19,105560,101948],{},[99,105562,105564],{"className":24996,"code":105563,"language":24998,"meta":104,"style":104},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[106,105565,105566],{"__ignoreMap":104},[109,105567,105568,105570,105572,105574,105576,105579,105581,105583,105585],{"class":111,"line":112},[109,105569,25751],{"class":211},[109,105571,27490],{"class":278},[109,105573,25008],{"class":278},[109,105575,27575],{"class":133},[109,105577,105578],{"class":278}," python3",[109,105580,101973],{"class":278},[109,105582,103676],{"class":278},[109,105584,101989],{"class":278},[109,105586,105587],{"class":278}," glfw\n",[19,105589,103994],{},[99,105591,105592],{"className":24996,"code":102094,"language":24998,"meta":104,"style":104},[106,105593,105594],{"__ignoreMap":104},[109,105595,105596,105598,105600,105602],{"class":111,"line":112},[109,105597,25005],{"class":211},[109,105599,25008],{"class":278},[109,105601,102105],{"class":278},[109,105603,102108],{"class":278},[19,105605,104011],{},[99,105607,105609],{"className":24996,"code":105608,"language":24998,"meta":104,"style":104},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[106,105610,105611,105628,105637],{"__ignoreMap":104},[109,105612,105613,105615,105617,105619,105622,105624,105626],{"class":111,"line":112},[109,105614,31505],{"class":211},[109,105616,30351],{"class":278},[109,105618,26290],{"class":133},[109,105620,105621],{"class":278}," mujoco-python-api",[109,105623,102150],{"class":278},[109,105625,102153],{"class":133},[109,105627,102156],{"class":133},[109,105629,105630,105632,105634],{"class":111,"line":119},[109,105631,31505],{"class":211},[109,105633,102163],{"class":278},[109,105635,105636],{"class":278}," mujoco-python-api\n",[109,105638,105639,105641,105643,105645],{"class":111,"line":140},[109,105640,25005],{"class":211},[109,105642,25008],{"class":278},[109,105644,102105],{"class":278},[109,105646,102108],{"class":278},[19,105648,102179],{},[765,105650,105651,105658,105667],{},[30,105652,105653,102193,105655,105657],{},[106,105654,101850],{},[106,105656,101855],{}," 是官方 Python bindings 的类名。",[30,105659,105660,105661,105664,105665,29560],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[106,105662,105663],{},"mjModel"," 在 Python 中是 ",[106,105666,101884],{},[30,105668,105669,105670,29560],{},"不要使用 ",[106,105671,105672],{},"sim = mujoco_py.MjSim(...)",[14,105674,102220],{"id":102219},[19,105676,105677],{},"仿真推进核心代码:",[99,105679,105681],{"className":31553,"code":105680,"language":31555,"meta":104,"style":104},"mujoco.mj_step(model, data)\n",[106,105682,105683],{"__ignoreMap":104},[109,105684,105685],{"class":111,"line":112},[109,105686,105680],{"class":126},[19,105688,105689,105690,1750,105692,1750,105694,29560],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[106,105691,102245],{},[106,105693,102248],{},[106,105695,102242],{},[19,105697,105698],{},"重置仿真:",[99,105700,105702],{"className":31553,"code":105701,"language":31555,"meta":104,"style":104},"mujoco.mj_resetData(model, data)\n",[106,105703,105704],{"__ignoreMap":104},[109,105705,105706],{"class":111,"line":112},[109,105707,105701],{"class":126},[19,105709,105710,105711,83714,105713,105715],{},"如果手动修改了 ",[106,105712,102245],{},[106,105714,102248],{},"，通常应调用:",[99,105717,105719],{"className":31553,"code":105718,"language":31555,"meta":104,"style":104},"mujoco.mj_forward(model, data)\n",[106,105720,105721],{"__ignoreMap":104},[109,105722,105723],{"class":111,"line":112},[109,105724,105718],{"class":126},[19,105726,105727],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[51,105729,105731,1750,105733,1750,105735,105737],{"id":105730},"qposqvelctrl-是什么",[106,105732,105205],{},[106,105734,105535],{},[106,105736,105538],{}," 是什么",[19,105739,105740],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1677,105742,105743,105755],{},[1680,105744,105745],{},[1683,105746,105747,105750,105752],{},[1686,105748,105749],{"align":24910},"字段",[1686,105751,101875],{"align":24910},[1686,105753,105754],{"align":24910},"谁来修改",[1723,105756,105757,105769,105781],{},[1683,105758,105759,105763,105766],{},[1728,105760,105761],{"align":24910},[106,105762,102245],{},[1728,105764,105765],{"align":24910},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1728,105767,105768],{"align":24910},"MuJoCo 更新，也可以手动设置初始状态",[1683,105770,105771,105775,105778],{},[1728,105772,105773],{"align":24910},[106,105774,102248],{},[1728,105776,105777],{"align":24910},"广义速度，例如小车速度、关节角速度",[1728,105779,105780],{"align":24910},"MuJoCo 更新，也可以手动清零",[1683,105782,105783,105787,105790],{},[1728,105784,105785],{"align":24910},[106,105786,102251],{},[1728,105788,105789],{"align":24910},"actuator 的控制输入",[1728,105791,105792],{"align":24910},"主要由你的控制代码写入",[19,105794,10343,105795,102193,105797,105799],{},[106,105796,105205],{},[106,105798,105535],{}," 不一定同维。自由刚体就是典型例子：",[99,105801,105804],{"className":105802,"code":105803,"language":6524,"meta":104},[6522],"freejoint: qpos 7 维，qvel 6 维\n",[106,105805,105803],{"__ignoreMap":104},[51,105807,105809,102193,105811,105813],{"id":105808},"mj_step-和-mj_forward-的区别",[106,105810,102390],{},[106,105812,105425],{}," 的区别",[1677,105815,105816,105829],{},[1680,105817,105818],{},[1683,105819,105820,105823,105826],{},[1686,105821,105822],{"align":24910},"函数",[1686,105824,105825],{"align":24910},"是否推进时间",[1686,105827,105828],{"align":24910},"什么时候用",[1723,105830,105831,105844],{},[1683,105832,105833,105838,105841],{},[1728,105834,105835],{"align":24910},[106,105836,105837],{},"mj_step(model, data)",[1728,105839,105840],{"align":24910},"是",[1728,105842,105843],{"align":24910},"正常仿真循环，每调用一次前进一步",[1683,105845,105846,105851,105854],{},[1728,105847,105848],{"align":24910},[106,105849,105850],{},"mj_forward(model, data)",[1728,105852,105853],{"align":24910},"否",[1728,105855,105856,105857,1750,105859,105861],{"align":24910},"手动改了 ",[106,105858,105205],{},[106,105860,105535],{}," 后，刷新派生量",[19,105863,105864],{},"例如你写：",[99,105866,105868],{"className":31553,"code":105867,"language":31555,"meta":104,"style":104},"data.qpos[2] = 2.0\n",[106,105869,105870],{"__ignoreMap":104},[109,105871,105872,105875,105877,105879,105881],{"class":111,"line":112},[109,105873,105874],{"class":126},"data.qpos[",[109,105876,1618],{"class":133},[109,105878,5780],{"class":126},[109,105880,130],{"class":122},[109,105882,105883],{"class":133}," 2.0\n",[19,105885,105886],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[99,105888,105889],{"className":31553,"code":105718,"language":31555,"meta":104,"style":104},[106,105890,105891],{"__ignoreMap":104},[109,105892,105893],{"class":111,"line":112},[109,105894,105718],{"class":126},[51,105896,105898],{"id":105897},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105900,105901,105904,105905,105907],{},[106,105902,105903],{},"mujoco.mj_resetData(model, data)"," 会把 ",[106,105906,34576],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[99,105909,105911],{"className":31553,"code":105910,"language":31555,"meta":104,"style":104},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[106,105912,105913,105917,105927,105937],{"__ignoreMap":104},[109,105914,105915],{"class":111,"line":112},[109,105916,105701],{"class":126},[109,105918,105919,105922,105924],{"class":111,"line":119},[109,105920,105921],{"class":126},"data.qpos[:] ",[109,105923,130],{"class":122},[109,105925,105926],{"class":126}," random_qpos\n",[109,105928,105929,105932,105934],{"class":111,"line":140},[109,105930,105931],{"class":126},"data.qvel[:] ",[109,105933,130],{"class":122},[109,105935,105936],{"class":133}," 0.0\n",[109,105938,105939],{"class":111,"line":154},[109,105940,105718],{"class":126},[14,105942,102428],{"id":102427},[99,105944,105946],{"className":31553,"code":105945,"language":31555,"meta":104,"style":104},"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",[106,105947,105948,105954,105964,105968,105972,105980,105985,105989,105993,105997,106002,106006,106011,106016,106021,106025,106029,106033,106037,106041,106045,106064,106071,106083,106094,106110,106126,106130,106134,106146,106158,106166,106170,106181,106185,106201,106205,106209,106218,106222,106227,106236,106240,106253,106258,106267,106271,106275,106287],{"__ignoreMap":104},[109,105949,105950,105952],{"class":111,"line":112},[109,105951,31567],{"class":122},[109,105953,102476],{"class":126},[109,105955,105956,105958,105960,105962],{"class":111,"line":119},[109,105957,31567],{"class":122},[109,105959,32555],{"class":126},[109,105961,32558],{"class":122},[109,105963,32561],{"class":126},[109,105965,105966],{"class":111,"line":140},[109,105967,158],{"emptyLinePlaceholder":157},[109,105969,105970],{"class":111,"line":154},[109,105971,158],{"emptyLinePlaceholder":157},[109,105973,105974,105976,105978],{"class":111,"line":161},[109,105975,102489],{"class":133},[109,105977,14737],{"class":122},[109,105979,102494],{"class":278},[109,105981,105982],{"class":111,"line":167},[109,105983,105984],{"class":278},"\u003Cmujoco model=\"state_api\">\n",[109,105986,105987],{"class":111,"line":185},[109,105988,102504],{"class":278},[109,105990,105991],{"class":111,"line":201},[109,105992,158],{"emptyLinePlaceholder":157},[109,105994,105995],{"class":111,"line":206},[109,105996,102513],{"class":278},[109,105998,105999],{"class":111,"line":218},[109,106000,106001],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[109,106003,106004],{"class":111,"line":223},[109,106005,158],{"emptyLinePlaceholder":157},[109,106007,106008],{"class":111,"line":229},[109,106009,106010],{"class":278},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[109,106012,106013],{"class":111,"line":244},[109,106014,106015],{"class":278},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[109,106017,106018],{"class":111,"line":258},[109,106019,106020],{"class":278},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[109,106022,106023],{"class":111,"line":263},[109,106024,102542],{"class":278},[109,106026,106027],{"class":111,"line":269},[109,106028,102547],{"class":278},[109,106030,106031],{"class":111,"line":304},[109,106032,102552],{"class":278},[109,106034,106035],{"class":111,"line":331},[109,106036,96873],{"class":278},[109,106038,106039],{"class":111,"line":336},[109,106040,158],{"emptyLinePlaceholder":157},[109,106042,106043],{"class":111,"line":364},[109,106044,158],{"emptyLinePlaceholder":157},[109,106046,106047,106049,106052,106055,106057,106060,106062],{"class":111,"line":391},[109,106048,33122],{"class":122},[109,106050,106051],{"class":211}," print_state",[109,106053,106054],{"class":126},"(prefix: ",[109,106056,2695],{"class":133},[109,106058,106059],{"class":126},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[109,106061,96861],{"class":133},[109,106063,5082],{"class":126},[109,106065,106066,106068],{"class":111,"line":396},[109,106067,32474],{"class":133},[109,106069,106070],{"class":126},"(prefix)\n",[109,106072,106073,106075,106077,106080],{"class":111,"line":402},[109,106074,32474],{"class":133},[109,106076,714],{"class":126},[109,106078,106079],{"class":278},"\"  timestep:\"",[109,106081,106082],{"class":126},", model.opt.timestep)\n",[109,106084,106085,106087,106089,106092],{"class":111,"line":419},[109,106086,32474],{"class":133},[109,106088,714],{"class":126},[109,106090,106091],{"class":278},"\"  time:\"",[109,106093,102653],{"class":126},[109,106095,106096,106098,106100,106103,106106,106108],{"class":111,"line":435},[109,106097,32474],{"class":133},[109,106099,714],{"class":126},[109,106101,106102],{"class":278},"\"  qpos:\"",[109,106104,106105],{"class":126},", np.round(data.qpos.copy(), ",[109,106107,1831],{"class":133},[109,106109,31672],{"class":126},[109,106111,106112,106114,106116,106119,106122,106124],{"class":111,"line":440},[109,106113,32474],{"class":133},[109,106115,714],{"class":126},[109,106117,106118],{"class":278},"\"  qvel:\"",[109,106120,106121],{"class":126},", np.round(data.qvel.copy(), ",[109,106123,1831],{"class":133},[109,106125,31672],{"class":126},[109,106127,106128],{"class":111,"line":467},[109,106129,158],{"emptyLinePlaceholder":157},[109,106131,106132],{"class":111,"line":494},[109,106133,158],{"emptyLinePlaceholder":157},[109,106135,106136,106138,106140,106142,106144],{"class":111,"line":499},[109,106137,33122],{"class":122},[109,106139,212],{"class":211},[109,106141,102573],{"class":126},[109,106143,96861],{"class":133},[109,106145,5082],{"class":126},[109,106147,106148,106150,106152,106154,106156],{"class":111,"line":526},[109,106149,102582],{"class":126},[109,106151,130],{"class":122},[109,106153,102587],{"class":126},[109,106155,102489],{"class":133},[109,106157,1330],{"class":126},[109,106159,106160,106162,106164],{"class":111,"line":552},[109,106161,102596],{"class":126},[109,106163,130],{"class":122},[109,106165,102601],{"class":126},[109,106167,106168],{"class":111,"line":557},[109,106169,158],{"emptyLinePlaceholder":157},[109,106171,106172,106175,106178],{"class":111,"line":584},[109,106173,106174],{"class":126},"    print_state(",[109,106176,106177],{"class":278},"\"initial\"",[109,106179,106180],{"class":126},", model, data)\n",[109,106182,106183],{"class":111,"line":611},[109,106184,158],{"emptyLinePlaceholder":157},[109,106186,106187,106189,106191,106193,106195,106197,106199],{"class":111,"line":616},[109,106188,1302],{"class":122},[109,106190,102676],{"class":126},[109,106192,27218],{"class":122},[109,106194,33618],{"class":133},[109,106196,714],{"class":126},[109,106198,2188],{"class":133},[109,106200,31961],{"class":126},[109,106202,106203],{"class":111,"line":633},[109,106204,102691],{"class":126},[109,106206,106207],{"class":111,"line":649},[109,106208,158],{"emptyLinePlaceholder":157},[109,106210,106211,106213,106216],{"class":111,"line":676},[109,106212,106174],{"class":126},[109,106214,106215],{"class":278},"\"after 50 steps\"",[109,106217,106180],{"class":126},[109,106219,106220],{"class":111,"line":703},[109,106221,158],{"emptyLinePlaceholder":157},[109,106223,106224],{"class":111,"line":708},[109,106225,106226],{"class":126},"    mujoco.mj_resetData(model, data)\n",[109,106228,106229,106231,106234],{"class":111,"line":723},[109,106230,106174],{"class":126},[109,106232,106233],{"class":278},"\"after reset\"",[109,106235,106180],{"class":126},[109,106237,106238],{"class":111,"line":728},[109,106239,158],{"emptyLinePlaceholder":157},[109,106241,106242,106245,106247,106249,106251],{"class":111,"line":739},[109,106243,106244],{"class":126},"    data.qpos[",[109,106246,1618],{"class":133},[109,106248,5780],{"class":126},[109,106250,130],{"class":122},[109,106252,105883],{"class":133},[109,106254,106255],{"class":111,"line":9352},[109,106256,106257],{"class":126},"    mujoco.mj_forward(model, data)\n",[109,106259,106260,106262,106265],{"class":111,"line":9364},[109,106261,106174],{"class":126},[109,106263,106264],{"class":278},"\"after manual qpos edit\"",[109,106266,106180],{"class":126},[109,106268,106269],{"class":111,"line":9376},[109,106270,158],{"emptyLinePlaceholder":157},[109,106272,106273],{"class":111,"line":11034},[109,106274,158],{"emptyLinePlaceholder":157},[109,106276,106277,106279,106281,106283,106285],{"class":111,"line":11059},[109,106278,2922],{"class":122},[109,106280,32395],{"class":133},[109,106282,102734],{"class":122},[109,106284,102737],{"class":278},[109,106286,5082],{"class":126},[109,106288,106289],{"class":111,"line":11082},[109,106290,102744],{"class":126},[19,106292,104745],{},[99,106294,106296],{"className":24996,"code":106295,"language":24998,"meta":104,"style":104},"touch ch3_python_state.py\n",[106,106297,106298],{"__ignoreMap":104},[109,106299,106300,106302],{"class":111,"line":112},[109,106301,102458],{"class":211},[109,106303,106304],{"class":278}," ch3_python_state.py\n",[19,106306,103476],{},[99,106308,106310],{"className":24996,"code":106309,"language":24998,"meta":104,"style":104},"python ch3_python_state.py\n",[106,106311,106312],{"__ignoreMap":104},[109,106313,106314,106316],{"class":111,"line":112},[109,106315,31555],{"class":211},[109,106317,106304],{"class":278},[51,106319,102747],{"id":102747},[19,106321,106322],{},"打印状态的函数：",[99,106324,106326],{"className":31553,"code":106325,"language":31555,"meta":104,"style":104},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[106,106327,106328],{"__ignoreMap":104},[109,106329,106330,106332,106334,106336,106338,106340,106342],{"class":111,"line":112},[109,106331,33122],{"class":122},[109,106333,106051],{"class":211},[109,106335,106054],{"class":126},[109,106337,2695],{"class":133},[109,106339,106059],{"class":126},[109,106341,96861],{"class":133},[109,106343,5082],{"class":126},[19,106345,106346,106347,106349],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[106,106348,34576],{}," 里发生了什么。",[19,106351,106352],{},"推进 50 步：",[99,106354,106356],{"className":31553,"code":106355,"language":31555,"meta":104,"style":104},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[106,106357,106358,106374],{"__ignoreMap":104},[109,106359,106360,106362,106364,106366,106368,106370,106372],{"class":111,"line":112},[109,106361,4372],{"class":122},[109,106363,102676],{"class":126},[109,106365,27218],{"class":122},[109,106367,33618],{"class":133},[109,106369,714],{"class":126},[109,106371,2188],{"class":133},[109,106373,31961],{"class":126},[109,106375,106376],{"class":111,"line":119},[109,106377,102874],{"class":126},[19,106379,106380,106381,106384,106385,106387],{},"由于 ",[106,106382,106383],{},"timestep=0.01","，所以 50 步后时间约为 ",[106,106386,36504],{}," 秒。",[19,106389,106390],{},"重置：",[99,106392,106393],{"className":31553,"code":105701,"language":31555,"meta":104,"style":104},[106,106394,106395],{"__ignoreMap":104},[109,106396,106397],{"class":111,"line":112},[109,106398,105701],{"class":126},[19,106400,106401],{},"这会把时间、位置、速度恢复到初始状态。",[19,106403,106404],{},"手动改高度：",[99,106406,106408],{"className":31553,"code":106407,"language":31555,"meta":104,"style":104},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[106,106409,106410,106422],{"__ignoreMap":104},[109,106411,106412,106414,106416,106418,106420],{"class":111,"line":112},[109,106413,105874],{"class":126},[109,106415,1618],{"class":133},[109,106417,5780],{"class":126},[109,106419,130],{"class":122},[109,106421,105883],{"class":133},[109,106423,106424],{"class":111,"line":119},[109,106425,105718],{"class":126},[19,106427,106428,106429,106432,106433,106436],{},"这个例子里 ",[106,106430,106431],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[106,106434,106435],{},"2.0"," 表示把小球放到更高的位置。",[51,106438,102883],{"id":102883},[99,106440,106441],{"className":31553,"code":106325,"language":31555,"meta":104,"style":104},[106,106442,106443],{"__ignoreMap":104},[109,106444,106445,106447,106449,106451,106453,106455,106457],{"class":111,"line":112},[109,106446,33122],{"class":122},[109,106448,106051],{"class":211},[109,106450,106054],{"class":126},[109,106452,2695],{"class":133},[109,106454,106059],{"class":126},[109,106456,96861],{"class":133},[109,106458,5082],{"class":126},[19,106460,106461],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[765,106463,106464,106473,106478],{},[30,106465,106466,106469,106470,106472],{},[106,106467,106468],{},"prefix","：一段文字，比如 ",[106,106471,106177],{},"，用来说明现在打印的是哪个阶段。",[30,106474,106475,106477],{},[106,106476,103260],{},"：MuJoCo 模型。",[30,106479,106480,106482],{},[106,106481,34576],{},"：MuJoCo 当前状态。",[19,106484,106485,1750,106488,106491],{},[106,106486,106487],{},"prefix: str",[106,106489,106490],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[99,106493,106495],{"className":31553,"code":106494,"language":31555,"meta":104,"style":104},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[106,106496,106497],{"__ignoreMap":104},[109,106498,106499,106501,106503,106505,106507,106509],{"class":111,"line":112},[109,106500,31590],{"class":133},[109,106502,714],{"class":126},[109,106504,106102],{"class":278},[109,106506,106105],{"class":126},[109,106508,1831],{"class":133},[109,106510,31672],{"class":126},[19,106512,106513,106516],{},[106,106514,106515],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[99,106518,106520],{"className":31553,"code":106519,"language":31555,"meta":104,"style":104},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[106,106521,106522,106534],{"__ignoreMap":104},[109,106523,106524,106526,106528,106530,106532],{"class":111,"line":112},[109,106525,102809],{"class":126},[109,106527,130],{"class":122},[109,106529,102587],{"class":126},[109,106531,102489],{"class":133},[109,106533,1330],{"class":126},[109,106535,106536,106538,106540],{"class":111,"line":119},[109,106537,102833],{"class":126},[109,106539,130],{"class":122},[109,106541,102601],{"class":126},[19,106543,106544],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[99,106546,106548],{"className":31553,"code":106547,"language":31555,"meta":104,"style":104},"print_state(\"initial\", model, data)\n",[106,106549,106550],{"__ignoreMap":104},[109,106551,106552,106555,106557],{"class":111,"line":112},[109,106553,106554],{"class":126},"print_state(",[109,106556,106177],{"class":278},[109,106558,106180],{"class":126},[19,106560,106561,106562,106565],{},"调用刚才定义的 ",[106,106563,106564],{},"print_state"," 函数，打印初始状态。",[99,106567,106568],{"className":31553,"code":106355,"language":31555,"meta":104,"style":104},[106,106569,106570,106586],{"__ignoreMap":104},[109,106571,106572,106574,106576,106578,106580,106582,106584],{"class":111,"line":112},[109,106573,4372],{"class":122},[109,106575,102676],{"class":126},[109,106577,27218],{"class":122},[109,106579,33618],{"class":133},[109,106581,714],{"class":126},[109,106583,2188],{"class":133},[109,106585,31961],{"class":126},[109,106587,106588],{"class":111,"line":119},[109,106589,102874],{"class":126},[19,106591,106592],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[99,106594,106595],{"className":31553,"code":105701,"language":31555,"meta":104,"style":104},[106,106596,106597],{"__ignoreMap":104},[109,106598,106599],{"class":111,"line":112},[109,106600,105701],{"class":126},[19,106602,106603,106604,106606,106607,106609],{},"重置 ",[106,106605,34576],{},"。注意它不会重新创建 ",[106,106608,103260],{},"，因为模型结构没有变，只是状态回到初始值。",[99,106611,106612],{"className":31553,"code":105867,"language":31555,"meta":104,"style":104},[106,106613,106614],{"__ignoreMap":104},[109,106615,106616,106618,106620,106622,106624],{"class":111,"line":112},[109,106617,105874],{"class":126},[109,106619,1618],{"class":133},[109,106621,5780],{"class":126},[109,106623,130],{"class":122},[109,106625,105883],{"class":133},[19,106627,106628,106629,1750,106632,1750,106635,106637],{},"这行是“手动改状态”。在 freejoint 中，",[106,106630,106631],{},"qpos[0]",[106,106633,106634],{},"qpos[1]",[106,106636,106431],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[99,106639,106640],{"className":31553,"code":105718,"language":31555,"meta":104,"style":104},[106,106641,106642],{"__ignoreMap":104},[109,106643,106644],{"class":111,"line":112},[109,106645,105718],{"class":126},[19,106647,106648,106649,106651,106652,106654],{},"手动改完 ",[106,106650,105205],{}," 后，调用 ",[106,106653,105425],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106656,103491],{"id":103490},[19,106658,106659],{},"你会看到:",[765,106661,106662,106667,106672,106675],{},[30,106663,106664,106665],{},"初始时间为 ",[106,106666,1314],{},[30,106668,106669,106670],{},"50 步后时间约为 ",[106,106671,36504],{},[30,106673,106674],{},"reset 后状态恢复",[30,106676,106677,106678,106681,106682],{},"手动修改 ",[106,106679,106680],{},"data.qpos[2]"," 后，小球高度变为 ",[106,106683,106435],{},[19,106685,106686,106688],{},[106,106687,106431],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106690,106691],{},"输出里可以重点看三件事：",[765,106693,106694,106702,106707],{},[30,106695,106696,106698,106699,106701],{},[106,106697,3744],{}," 是否随着 ",[106,106700,102390],{}," 增加。",[30,106703,106704,106706],{},[106,106705,105205],{}," 的 z 坐标是否因为下落而变化。",[30,106708,106709,106711,106712,29560],{},[106,106710,105527],{}," 后时间是否回到 ",[106,106713,1314],{},[14,106715,103523],{"id":103522},[765,106717,106718,106724,106730,106736,106739,106748],{},[30,106719,106720,106721,29560],{},"修改 timestep 为 ",[106,106722,106723],{},"0.005",[30,106725,106726,106727,29560],{},"重新运行，检查 50 步后时间是否约为 ",[106,106728,106729],{},"0.25",[30,106731,106732,106733,29560],{},"修改重力为 ",[106,106734,106735],{},"0 0 -1.0",[30,106737,106738],{},"观察小球下降速度是否变慢。",[30,106740,103586,106741,103589,106744,106747],{},[106,106742,106743],{},"data.qpos[2] = 2.0",[106,106745,106746],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[30,106749,106750,106751,106754],{},"注释掉 ",[106,106752,106753],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106756,103628],{"id":103627},[51,106758,106760,106761,106763],{"id":106759},"修改-dataqpos-后位置没有更新","修改 ",[106,106762,102245],{}," 后位置没有更新",[19,106765,103637],{},[99,106767,106768],{"className":31553,"code":105718,"language":31555,"meta":104,"style":104},[106,106769,106770],{"__ignoreMap":104},[109,106771,106772],{"class":111,"line":112},[109,106773,105718],{"class":126},[51,106775,106776],{"id":106776},"数组维度看不懂",[19,106778,106779],{},"打印模型维度:",[99,106781,106783],{"className":31553,"code":106782,"language":31555,"meta":104,"style":104},"print(model.nq, model.nv, model.nu)\n",[106,106784,106785],{"__ignoreMap":104},[109,106786,106787,106789],{"class":111,"line":112},[109,106788,31590],{"class":133},[109,106790,106791],{"class":126},"(model.nq, model.nv, model.nu)\n",[1677,106793,106794,106802],{},[1680,106795,106796],{},[1683,106797,106798,106800],{},[1686,106799,105749],{"align":24910},[1686,106801,101875],{"align":24910},[1723,106803,106804,106814,106824],{},[1683,106805,106806,106811],{},[1728,106807,106808],{"align":24910},[106,106809,106810],{},"nq",[1728,106812,106813],{"align":24910},"位置变量数量",[1683,106815,106816,106821],{},[1728,106817,106818],{"align":24910},[106,106819,106820],{},"nv",[1728,106822,106823],{"align":24910},"速度变量数量",[1683,106825,106826,106830],{},[1728,106827,106828],{"align":24910},[106,106829,103337],{},[1728,106831,106832],{"align":24910},"控制输入数量",[51,106834,106836,106837,106839],{"id":106835},"误以为-qpos-一定等于关节数","误以为 ",[106,106838,105205],{}," 一定等于关节数",[19,106841,106842,106843,83705,106845,106847,106848,106850],{},"不是。例如 ",[106,106844,102795],{},[106,106846,105205],{}," 是 7 维，但 ",[106,106849,105535],{}," 是 6 维。",[51,106852,106854,106855,106857],{"id":106853},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[106,106856,105205],{}," 的第几位",[19,106859,106860],{},"初学时可以先打印：",[99,106862,106864],{"className":31553,"code":106863,"language":31555,"meta":104,"style":104},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[106,106865,106866,106876,106886,106898],{"__ignoreMap":104},[109,106867,106868,106870,106872,106874],{"class":111,"line":112},[109,106869,31590],{"class":133},[109,106871,714],{"class":126},[109,106873,102614],{"class":278},[109,106875,102617],{"class":126},[109,106877,106878,106880,106882,106884],{"class":111,"line":119},[109,106879,31590],{"class":133},[109,106881,714],{"class":126},[109,106883,102626],{"class":278},[109,106885,102629],{"class":126},[109,106887,106888,106890,106892,106895],{"class":111,"line":140},[109,106889,31590],{"class":133},[109,106891,714],{"class":126},[109,106893,106894],{"class":278},"\"qpos:\"",[109,106896,106897],{"class":126},", data.qpos)\n",[109,106899,106900,106902,106904,106907],{"class":111,"line":154},[109,106901,31590],{"class":133},[109,106903,714],{"class":126},[109,106905,106906],{"class":278},"\"qvel:\"",[109,106908,106909],{"class":126},", data.qvel)\n",[19,106911,106912],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[51,106914,106915],{"id":106915},"仿真结果每次都一样",[19,106917,106918,106919,106921],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[106,106920,105205],{},"、目标点或控制输入。",[14,106923,103782],{"id":103781},[19,106925,106926,106927,25793],{},"Python 控制 MuJoCo 的核心就是读写 ",[106,106928,34576],{},[765,106930,106931,106939,106944,106949],{},[30,106932,106933,106934,102193,106936,106938],{},"用 ",[106,106935,102245],{},[106,106937,102248],{}," 读取状态。",[30,106940,106933,106941,106943],{},[106,106942,102251],{}," 写入控制。",[30,106945,106933,106946,106948],{},[106,106947,102390],{}," 推进时间。",[30,106950,106951,106952,106954],{},"手动改状态后用 ",[106,106953,105425],{}," 刷新派生量。",[19,106956,106957],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1467,106959,106960],{},"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":104,"searchDepth":119,"depth":119,"links":106962},[106963,106964,106965,106972,106976,106977,106978,106988],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":106966},[106967,106969,106971],{"id":105730,"depth":140,"text":106968},"qpos、qvel、ctrl 是什么",{"id":105808,"depth":140,"text":106970},"mj_step 和 mj_forward 的区别",{"id":105897,"depth":140,"text":105898},{"id":102427,"depth":119,"text":102428,"children":106973},[106974,106975],{"id":102747,"depth":140,"text":102747},{"id":102883,"depth":140,"text":102883},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":106979},[106980,106982,106983,106985,106987],{"id":106759,"depth":140,"text":106981},"修改 data.qpos 后位置没有更新",{"id":106776,"depth":140,"text":106776},{"id":106835,"depth":140,"text":106984},"误以为 qpos 一定等于关节数",{"id":106853,"depth":140,"text":106986},"不知道某个元素在 qpos 的第几位",{"id":106915,"depth":140,"text":106915},{"id":103781,"depth":119,"text":103782},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105493,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106995,"title":106996,"body":106997,"description":104,"extension":1476,"meta":108687,"navigation":157,"path":108688,"seo":108689,"stem":108690,"__hash__":108691},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106998,"toc":108663},[106999,107002,107004,107007,107009,107034,107037,107056,107059,107061,107063,107087,107089,107103,107105,107146,107148,107172,107174,107177,107211,107213,107226,107229,107297,107306,107310,107313,107347,107353,107356,107360,107399,107402,107422,107426,107469,107471,107500,107503,107509,107512,107514,107908,107910,107922,107924,107935,107937,107940,107969,107977,107980,108015,108018,108020,108028,108031,108033,108044,108054,108074,108077,108113,108125,108173,108192,108234,108247,108275,108280,108301,108311,108329,108332,108366,108369,108389,108392,108411,108417,108419,108422,108428,108434,108444,108447,108453,108462,108464,108510,108512,108518,108524,108527,108530,108550,108553,108559,108565,108567,108590,108593,108596,108605,108608,108646,108648,108651,108657,108660],[10,107000,106996],{"id":107001},"_4关节actuator-与力控制",[14,107003,101822],{"id":101821},[19,107005,107006],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107008,105506],{},[765,107010,107011,107017,107022,107026,107031],{},[30,107012,107013,107016],{},[106,107014,107015],{},"hinge"," 关节",[30,107018,107019],{},[106,107020,107021],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[30,107023,107024],{},[106,107025,102251],{},[30,107027,107028],{},[106,107029,107030],{},"ctrlrange",[30,107032,107033],{},"读取关节角和角速度",[19,107035,107036],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[99,107038,107040],{"className":31553,"code":107039,"language":31555,"meta":104,"style":104},"data.ctrl[0] = ...\n",[106,107041,107042],{"__ignoreMap":104},[109,107043,107044,107047,107049,107051,107053],{"class":111,"line":112},[109,107045,107046],{"class":126},"data.ctrl[",[109,107048,1314],{"class":133},[109,107050,5780],{"class":126},[109,107052,130],{"class":122},[109,107054,107055],{"class":133}," ...\n",[19,107057,107058],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107060,101945],{"id":101944},[19,107062,101948],{},[99,107064,107065],{"className":24996,"code":105563,"language":24998,"meta":104,"style":104},[106,107066,107067],{"__ignoreMap":104},[109,107068,107069,107071,107073,107075,107077,107079,107081,107083,107085],{"class":111,"line":112},[109,107070,25751],{"class":211},[109,107072,27490],{"class":278},[109,107074,25008],{"class":278},[109,107076,27575],{"class":133},[109,107078,105578],{"class":278},[109,107080,101973],{"class":278},[109,107082,103676],{"class":278},[109,107084,101989],{"class":278},[109,107086,105587],{"class":278},[19,107088,103994],{},[99,107090,107091],{"className":24996,"code":102094,"language":24998,"meta":104,"style":104},[106,107092,107093],{"__ignoreMap":104},[109,107094,107095,107097,107099,107101],{"class":111,"line":112},[109,107096,25005],{"class":211},[109,107098,25008],{"class":278},[109,107100,102105],{"class":278},[109,107102,102108],{"class":278},[19,107104,104011],{},[99,107106,107108],{"className":24996,"code":107107,"language":24998,"meta":104,"style":104},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[106,107109,107110,107127,107136],{"__ignoreMap":104},[109,107111,107112,107114,107116,107118,107121,107123,107125],{"class":111,"line":112},[109,107113,31505],{"class":211},[109,107115,30351],{"class":278},[109,107117,26290],{"class":133},[109,107119,107120],{"class":278}," mujoco-control",[109,107122,102150],{"class":278},[109,107124,102153],{"class":133},[109,107126,102156],{"class":133},[109,107128,107129,107131,107133],{"class":111,"line":119},[109,107130,31505],{"class":211},[109,107132,102163],{"class":278},[109,107134,107135],{"class":278}," mujoco-control\n",[109,107137,107138,107140,107142,107144],{"class":111,"line":140},[109,107139,25005],{"class":211},[109,107141,25008],{"class":278},[109,107143,102105],{"class":278},[109,107145,102108],{"class":278},[19,107147,102179],{},[765,107149,107150,107156,107163,107169],{},[30,107151,107152,107155],{},[106,107153,107154],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[30,107157,107158,107160,107161,29560],{},[106,107159,102251],{}," 长度等于 ",[106,107162,103333],{},[30,107164,83397,107165,107168],{},[106,107166,107167],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[30,107170,107171],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107173,102220],{"id":102219},[19,107175,107176],{},"关节决定 body 如何运动:",[99,107178,107180],{"className":54242,"code":107179,"language":54244,"meta":104,"style":104},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[106,107181,107182],{"__ignoreMap":104},[109,107183,107184,107186,107188,107190,107192,107195,107197,107199,107201,107204,107206,107209],{"class":111,"line":112},[109,107185,1320],{"class":126},[109,107187,104131],{"class":52475},[109,107189,16093],{"class":211},[109,107191,130],{"class":126},[109,107193,107194],{"class":278},"\"hinge\"",[109,107196,54999],{"class":211},[109,107198,130],{"class":126},[109,107200,107194],{"class":278},[109,107202,107203],{"class":211}," axis",[109,107205,130],{"class":126},[109,107207,107208],{"class":278},"\"0 1 0\"",[109,107210,102319],{"class":126},[19,107212,104227],{},[765,107214,107215,107220,107223],{},[30,107216,107217,107218],{},"名字是 ",[106,107219,107015],{},[30,107221,107222],{},"类型是旋转关节",[30,107224,107225],{},"绕 y 轴旋转",[19,107227,107228],{},"actuator 决定如何施加控制:",[99,107230,107232],{"className":54242,"code":107231,"language":54244,"meta":104,"style":104},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[106,107233,107234,107243,107289],{"__ignoreMap":104},[109,107235,107236,107238,107241],{"class":111,"line":112},[109,107237,1320],{"class":126},[109,107239,107240],{"class":52475},"actuator",[109,107242,52482],{"class":126},[109,107244,107245,107247,107250,107252,107254,107257,107260,107262,107264,107267,107269,107271,107274,107276,107279,107282,107284,107287],{"class":111,"line":119},[109,107246,53319],{"class":126},[109,107248,107249],{"class":52475},"motor",[109,107251,16093],{"class":211},[109,107253,130],{"class":126},[109,107255,107256],{"class":278},"\"hinge_motor\"",[109,107258,107259],{"class":211}," joint",[109,107261,130],{"class":126},[109,107263,107194],{"class":278},[109,107265,107266],{"class":211}," gear",[109,107268,130],{"class":126},[109,107270,5021],{"class":278},[109,107272,107273],{"class":211}," ctrlrange",[109,107275,130],{"class":126},[109,107277,107278],{"class":278},"\"-2 2\"",[109,107280,107281],{"class":211}," ctrllimited",[109,107283,130],{"class":126},[109,107285,107286],{"class":278},"\"true\"",[109,107288,102319],{"class":126},[109,107290,107291,107293,107295],{"class":111,"line":140},[109,107292,52960],{"class":126},[109,107294,107240],{"class":52475},[109,107296,52482],{"class":126},[19,107298,107299,107302,107303,29560],{},[106,107300,107301],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[106,107304,107305],{},"[-2, 2]",[51,107307,107309],{"id":107308},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107311,107312],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1677,107314,107315,107325],{},[1680,107316,107317],{},[1683,107318,107319,107321,107323],{},[1686,107320,26928],{"align":24910},[1686,107322,103871],{"align":24910},[1686,107324,101909],{"align":24910},[1723,107326,107327,107337],{},[1683,107328,107329,107331,107334],{},[1728,107330,104131],{"align":24910},[1728,107332,107333],{"align":24910},"定义能怎么动",[1728,107335,107336],{"align":24910},"门轴允许门旋转",[1683,107338,107339,107341,107344],{},[1728,107340,107240],{"align":24910},[1728,107342,107343],{"align":24910},"定义怎么施力或控制",[1728,107345,107346],{"align":24910},"人推门、马达带动门",[19,107348,107349,107350,107352],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[106,107351,102251],{}," 主动控制它。",[19,107354,107355],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[51,107357,107359],{"id":107358},"hinge-joint","hinge joint",[99,107361,107363],{"className":54242,"code":107362,"language":54244,"meta":104,"style":104},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[106,107364,107365],{"__ignoreMap":104},[109,107366,107367,107369,107371,107373,107375,107377,107379,107381,107383,107385,107387,107389,107392,107394,107397],{"class":111,"line":112},[109,107368,1320],{"class":126},[109,107370,104131],{"class":52475},[109,107372,16093],{"class":211},[109,107374,130],{"class":126},[109,107376,107194],{"class":278},[109,107378,54999],{"class":211},[109,107380,130],{"class":126},[109,107382,107194],{"class":278},[109,107384,107203],{"class":211},[109,107386,130],{"class":126},[109,107388,107208],{"class":278},[109,107390,107391],{"class":211}," damping",[109,107393,130],{"class":126},[109,107395,107396],{"class":278},"\"0.1\"",[109,107398,102319],{"class":126},[19,107400,107401],{},"含义：",[765,107403,107404,107410,107416],{},[30,107405,107406,107409],{},[106,107407,107408],{},"type=\"hinge\"","：只能绕一个轴旋转。",[30,107411,107412,107415],{},[106,107413,107414],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[30,107417,107418,107421],{},[106,107419,107420],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[51,107423,107425],{"id":107424},"motor-actuator","motor actuator",[99,107427,107429],{"className":54242,"code":107428,"language":54244,"meta":104,"style":104},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[106,107430,107431],{"__ignoreMap":104},[109,107432,107433,107435,107437,107439,107441,107443,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465,107467],{"class":111,"line":112},[109,107434,1320],{"class":126},[109,107436,107249],{"class":52475},[109,107438,16093],{"class":211},[109,107440,130],{"class":126},[109,107442,107256],{"class":278},[109,107444,107259],{"class":211},[109,107446,130],{"class":126},[109,107448,107194],{"class":278},[109,107450,107266],{"class":211},[109,107452,130],{"class":126},[109,107454,5021],{"class":278},[109,107456,107273],{"class":211},[109,107458,130],{"class":126},[109,107460,107278],{"class":278},[109,107462,107281],{"class":211},[109,107464,130],{"class":126},[109,107466,107286],{"class":278},[109,107468,102319],{"class":126},[19,107470,107401],{},[765,107472,107473,107482,107488,107494],{},[30,107474,107475,107478,107479,107481],{},[106,107476,107477],{},"joint=\"hinge\"","：这个电机作用在名为 ",[106,107480,107015],{}," 的关节上。",[30,107483,107484,107487],{},[106,107485,107486],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[30,107489,107490,107493],{},[106,107491,107492],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[30,107495,107496,107499],{},[106,107497,107498],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107501,107502],{},"简单理解：",[99,107504,107507],{"className":107505,"code":107506,"language":6524,"meta":104},[6522],"实际施加效果 ≈ data.ctrl[0] * gear\n",[106,107508,107506],{"__ignoreMap":104},[19,107510,107511],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107513,102428],{"id":102427},[99,107515,107517],{"className":31553,"code":107516,"language":31555,"meta":104,"style":104},"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",[106,107518,107519,107526,107530,107536,107546,107550,107554,107562,107567,107572,107576,107580,107585,107590,107594,107599,107604,107609,107614,107618,107622,107626,107631,107636,107641,107645,107649,107653,107657,107669,107681,107689,107693,107703,107713,107723,107727,107740,107753,107757,107774,107788,107823,107827,107831,107842,107857,107872,107884,107888,107892,107904],{"__ignoreMap":104},[109,107520,107521,107523],{"class":111,"line":112},[109,107522,31567],{"class":122},[109,107524,107525],{"class":126}," math\n",[109,107527,107528],{"class":111,"line":119},[109,107529,158],{"emptyLinePlaceholder":157},[109,107531,107532,107534],{"class":111,"line":140},[109,107533,31567],{"class":122},[109,107535,102476],{"class":126},[109,107537,107538,107540,107542,107544],{"class":111,"line":154},[109,107539,31567],{"class":122},[109,107541,32555],{"class":126},[109,107543,32558],{"class":122},[109,107545,32561],{"class":126},[109,107547,107548],{"class":111,"line":161},[109,107549,158],{"emptyLinePlaceholder":157},[109,107551,107552],{"class":111,"line":167},[109,107553,158],{"emptyLinePlaceholder":157},[109,107555,107556,107558,107560],{"class":111,"line":185},[109,107557,102489],{"class":133},[109,107559,14737],{"class":122},[109,107561,102494],{"class":278},[109,107563,107564],{"class":111,"line":201},[109,107565,107566],{"class":278},"\u003Cmujoco model=\"one_link_motor\">\n",[109,107568,107569],{"class":111,"line":206},[109,107570,107571],{"class":278},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[109,107573,107574],{"class":111,"line":218},[109,107575,158],{"emptyLinePlaceholder":157},[109,107577,107578],{"class":111,"line":223},[109,107579,102513],{"class":278},[109,107581,107582],{"class":111,"line":229},[109,107583,107584],{"class":278},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[109,107586,107587],{"class":111,"line":244},[109,107588,107589],{"class":278},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[109,107591,107592],{"class":111,"line":258},[109,107593,158],{"emptyLinePlaceholder":157},[109,107595,107596],{"class":111,"line":263},[109,107597,107598],{"class":278},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[109,107600,107601],{"class":111,"line":269},[109,107602,107603],{"class":278},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[109,107605,107606],{"class":111,"line":304},[109,107607,107608],{"class":278},"        \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",[109,107610,107611],{"class":111,"line":331},[109,107612,107613],{"class":278},"      \u003C\u002Fbody>\n",[109,107615,107616],{"class":111,"line":336},[109,107617,102542],{"class":278},[109,107619,107620],{"class":111,"line":364},[109,107621,102547],{"class":278},[109,107623,107624],{"class":111,"line":391},[109,107625,158],{"emptyLinePlaceholder":157},[109,107627,107628],{"class":111,"line":396},[109,107629,107630],{"class":278},"  \u003Cactuator>\n",[109,107632,107633],{"class":111,"line":402},[109,107634,107635],{"class":278},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[109,107637,107638],{"class":111,"line":419},[109,107639,107640],{"class":278},"  \u003C\u002Factuator>\n",[109,107642,107643],{"class":111,"line":435},[109,107644,102552],{"class":278},[109,107646,107647],{"class":111,"line":440},[109,107648,96873],{"class":278},[109,107650,107651],{"class":111,"line":467},[109,107652,158],{"emptyLinePlaceholder":157},[109,107654,107655],{"class":111,"line":494},[109,107656,158],{"emptyLinePlaceholder":157},[109,107658,107659,107661,107663,107665,107667],{"class":111,"line":499},[109,107660,33122],{"class":122},[109,107662,212],{"class":211},[109,107664,102573],{"class":126},[109,107666,96861],{"class":133},[109,107668,5082],{"class":126},[109,107670,107671,107673,107675,107677,107679],{"class":111,"line":526},[109,107672,102582],{"class":126},[109,107674,130],{"class":122},[109,107676,102587],{"class":126},[109,107678,102489],{"class":133},[109,107680,1330],{"class":126},[109,107682,107683,107685,107687],{"class":111,"line":552},[109,107684,102596],{"class":126},[109,107686,130],{"class":122},[109,107688,102601],{"class":126},[109,107690,107691],{"class":111,"line":557},[109,107692,158],{"emptyLinePlaceholder":157},[109,107694,107695,107697,107699,107701],{"class":111,"line":584},[109,107696,32474],{"class":133},[109,107698,714],{"class":126},[109,107700,102614],{"class":278},[109,107702,102617],{"class":126},[109,107704,107705,107707,107709,107711],{"class":111,"line":611},[109,107706,32474],{"class":133},[109,107708,714],{"class":126},[109,107710,102626],{"class":278},[109,107712,102629],{"class":126},[109,107714,107715,107717,107719,107721],{"class":111,"line":616},[109,107716,32474],{"class":133},[109,107718,714],{"class":126},[109,107720,102638],{"class":278},[109,107722,102641],{"class":126},[109,107724,107725],{"class":111,"line":633},[109,107726,158],{"emptyLinePlaceholder":157},[109,107728,107729,107731,107734,107736,107738],{"class":111,"line":649},[109,107730,4446],{"class":122},[109,107732,107733],{"class":126}," model.nu ",[109,107735,22121],{"class":122},[109,107737,26293],{"class":133},[109,107739,5082],{"class":126},[109,107741,107742,107744,107746,107748,107751],{"class":111,"line":676},[109,107743,104607],{"class":122},[109,107745,104610],{"class":133},[109,107747,714],{"class":126},[109,107749,107750],{"class":278},"\"expected exactly one actuator\"",[109,107752,1330],{"class":126},[109,107754,107755],{"class":111,"line":703},[109,107756,158],{"emptyLinePlaceholder":157},[109,107758,107759,107761,107763,107765,107767,107769,107772],{"class":111,"line":708},[109,107760,1302],{"class":122},[109,107762,32791],{"class":126},[109,107764,27218],{"class":122},[109,107766,33618],{"class":133},[109,107768,714],{"class":126},[109,107770,107771],{"class":133},"2000",[109,107773,31961],{"class":126},[109,107775,107776,107779,107781,107783,107785],{"class":111,"line":723},[109,107777,107778],{"class":126},"        t ",[109,107780,130],{"class":122},[109,107782,32791],{"class":126},[109,107784,1988],{"class":122},[109,107786,107787],{"class":126}," model.opt.timestep\n",[109,107789,107790,107793,107795,107797,107799,107802,107804,107807,107809,107811,107814,107816,107818,107820],{"class":111,"line":728},[109,107791,107792],{"class":126},"        data.ctrl[",[109,107794,1314],{"class":133},[109,107796,5780],{"class":126},[109,107798,130],{"class":122},[109,107800,107801],{"class":133}," 1.5",[109,107803,797],{"class":122},[109,107805,107806],{"class":126}," math.sin(",[109,107808,106435],{"class":133},[109,107810,797],{"class":122},[109,107812,107813],{"class":126}," math.pi ",[109,107815,1988],{"class":122},[109,107817,63042],{"class":133},[109,107819,797],{"class":122},[109,107821,107822],{"class":126}," t)\n",[109,107824,107825],{"class":111,"line":739},[109,107826,102691],{"class":126},[109,107828,107829],{"class":111,"line":9352},[109,107830,158],{"emptyLinePlaceholder":157},[109,107832,107833,107835,107837,107840],{"class":111,"line":9364},[109,107834,32474],{"class":133},[109,107836,714],{"class":126},[109,107838,107839],{"class":278},"\"time:\"",[109,107841,102653],{"class":126},[109,107843,107844,107846,107848,107851,107853,107855],{"class":111,"line":9376},[109,107845,32474],{"class":133},[109,107847,714],{"class":126},[109,107849,107850],{"class":278},"\"joint qpos:\"",[109,107852,106105],{"class":126},[109,107854,1831],{"class":133},[109,107856,31672],{"class":126},[109,107858,107859,107861,107863,107866,107868,107870],{"class":111,"line":11034},[109,107860,32474],{"class":133},[109,107862,714],{"class":126},[109,107864,107865],{"class":278},"\"joint qvel:\"",[109,107867,106121],{"class":126},[109,107869,1831],{"class":133},[109,107871,31672],{"class":126},[109,107873,107874,107876,107878,107881],{"class":111,"line":11059},[109,107875,32474],{"class":133},[109,107877,714],{"class":126},[109,107879,107880],{"class":278},"\"last ctrl:\"",[109,107882,107883],{"class":126},", data.ctrl.copy())\n",[109,107885,107886],{"class":111,"line":11082},[109,107887,158],{"emptyLinePlaceholder":157},[109,107889,107890],{"class":111,"line":11106},[109,107891,158],{"emptyLinePlaceholder":157},[109,107893,107894,107896,107898,107900,107902],{"class":111,"line":11111},[109,107895,2922],{"class":122},[109,107897,32395],{"class":133},[109,107899,102734],{"class":122},[109,107901,102737],{"class":278},[109,107903,5082],{"class":126},[109,107905,107906],{"class":111,"line":11116},[109,107907,102744],{"class":126},[19,107909,104745],{},[99,107911,107913],{"className":24996,"code":107912,"language":24998,"meta":104,"style":104},"touch ch4_joint_motor.py\n",[106,107914,107915],{"__ignoreMap":104},[109,107916,107917,107919],{"class":111,"line":112},[109,107918,102458],{"class":211},[109,107920,107921],{"class":278}," ch4_joint_motor.py\n",[19,107923,103476],{},[99,107925,107927],{"className":24996,"code":107926,"language":24998,"meta":104,"style":104},"python ch4_joint_motor.py\n",[106,107928,107929],{"__ignoreMap":104},[109,107930,107931,107933],{"class":111,"line":112},[109,107932,31555],{"class":211},[109,107934,107921],{"class":278},[51,107936,102747],{"id":102747},[19,107938,107939],{},"检查 actuator 数量：",[99,107941,107943],{"className":31553,"code":107942,"language":31555,"meta":104,"style":104},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[106,107944,107945,107957],{"__ignoreMap":104},[109,107946,107947,107949,107951,107953,107955],{"class":111,"line":112},[109,107948,2922],{"class":122},[109,107950,107733],{"class":126},[109,107952,22121],{"class":122},[109,107954,26293],{"class":133},[109,107956,5082],{"class":126},[109,107958,107959,107961,107963,107965,107967],{"class":111,"line":119},[109,107960,105070],{"class":122},[109,107962,104610],{"class":133},[109,107964,714],{"class":126},[109,107966,107750],{"class":278},[109,107968,1330],{"class":126},[19,107970,107971,107973,107974,107976],{},[106,107972,103333],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[106,107975,102251],{}," 长度应该是 1。",[19,107978,107979],{},"产生正弦控制信号：",[99,107981,107983],{"className":31553,"code":107982,"language":31555,"meta":104,"style":104},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[106,107984,107985],{"__ignoreMap":104},[109,107986,107987,107989,107991,107993,107995,107997,107999,108001,108003,108005,108007,108009,108011,108013],{"class":111,"line":112},[109,107988,107046],{"class":126},[109,107990,1314],{"class":133},[109,107992,5780],{"class":126},[109,107994,130],{"class":122},[109,107996,107801],{"class":133},[109,107998,797],{"class":122},[109,108000,107806],{"class":126},[109,108002,106435],{"class":133},[109,108004,797],{"class":122},[109,108006,107813],{"class":126},[109,108008,1988],{"class":122},[109,108010,63042],{"class":133},[109,108012,797],{"class":122},[109,108014,107822],{"class":126},[19,108016,108017],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108019,102848],{},[99,108021,108022],{"className":31553,"code":105680,"language":31555,"meta":104,"style":104},[106,108023,108024],{"__ignoreMap":104},[109,108025,108026],{"class":111,"line":112},[109,108027,105680],{"class":126},[19,108029,108030],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[51,108032,102883],{"id":102883},[99,108034,108036],{"className":31553,"code":108035,"language":31555,"meta":104,"style":104},"import math\n",[106,108037,108038],{"__ignoreMap":104},[109,108039,108040,108042],{"class":111,"line":112},[109,108041,31567],{"class":122},[109,108043,107525],{"class":126},[19,108045,108046,108047,102193,108050,108053],{},"导入 Python 标准库里的数学模块。后面要用 ",[106,108048,108049],{},"math.sin",[106,108051,108052],{},"math.pi"," 生成周期变化的控制信号。",[99,108055,108056],{"className":31553,"code":104861,"language":31555,"meta":104,"style":104},[106,108057,108058,108064],{"__ignoreMap":104},[109,108059,108060,108062],{"class":111,"line":112},[109,108061,31567],{"class":122},[109,108063,102476],{"class":126},[109,108065,108066,108068,108070,108072],{"class":111,"line":119},[109,108067,31567],{"class":122},[109,108069,32555],{"class":126},[109,108071,32558],{"class":122},[109,108073,32561],{"class":126},[19,108075,108076],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[99,108078,108079],{"className":54242,"code":107362,"language":54244,"meta":104,"style":104},[106,108080,108081],{"__ignoreMap":104},[109,108082,108083,108085,108087,108089,108091,108093,108095,108097,108099,108101,108103,108105,108107,108109,108111],{"class":111,"line":112},[109,108084,1320],{"class":126},[109,108086,104131],{"class":52475},[109,108088,16093],{"class":211},[109,108090,130],{"class":126},[109,108092,107194],{"class":278},[109,108094,54999],{"class":211},[109,108096,130],{"class":126},[109,108098,107194],{"class":278},[109,108100,107203],{"class":211},[109,108102,130],{"class":126},[109,108104,107208],{"class":278},[109,108106,107391],{"class":211},[109,108108,130],{"class":126},[109,108110,107396],{"class":278},[109,108112,102319],{"class":126},[19,108114,108115,108116,108118,108119,108121,108122,108124],{},"这行定义关节。",[106,108117,107015],{}," 表示旋转关节。",[106,108120,107414],{}," 表示绕 y 轴旋转。",[106,108123,107420],{}," 表示有一点阻尼，运动不会完全无损耗。",[99,108126,108128],{"className":54242,"code":108127,"language":54244,"meta":104,"style":104},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[106,108129,108130],{"__ignoreMap":104},[109,108131,108132,108134,108136,108138,108140,108143,108145,108147,108150,108153,108155,108158,108160,108162,108164,108166,108168,108171],{"class":111,"line":112},[109,108133,1320],{"class":126},[109,108135,102295],{"class":52475},[109,108137,16093],{"class":211},[109,108139,130],{"class":126},[109,108141,108142],{"class":278},"\"link_geom\"",[109,108144,54999],{"class":211},[109,108146,130],{"class":126},[109,108148,108149],{"class":278},"\"capsule\"",[109,108151,108152],{"class":211}," fromto",[109,108154,130],{"class":126},[109,108156,108157],{"class":278},"\"0 0 0 0 0 0.5\"",[109,108159,102311],{"class":211},[109,108161,130],{"class":126},[109,108163,104953],{"class":278},[109,108165,103176],{"class":211},[109,108167,130],{"class":126},[109,108169,108170],{"class":278},"\"0.5\"",[109,108172,102319],{"class":126},[19,108174,108175,108176,108178,108179,108181,108182,108185,108186,29560,108189,108191],{},"这行定义摆杆的形状。",[106,108177,104340],{}," 是胶囊体，适合表示杆子。",[106,108180,104351],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[106,108183,108184],{},"(0,0,0)"," 延伸到 ",[106,108187,108188],{},"(0,0,0.5)",[106,108190,104345],{}," 是半径。",[99,108193,108194],{"className":54242,"code":107428,"language":54244,"meta":104,"style":104},[106,108195,108196],{"__ignoreMap":104},[109,108197,108198,108200,108202,108204,108206,108208,108210,108212,108214,108216,108218,108220,108222,108224,108226,108228,108230,108232],{"class":111,"line":112},[109,108199,1320],{"class":126},[109,108201,107249],{"class":52475},[109,108203,16093],{"class":211},[109,108205,130],{"class":126},[109,108207,107256],{"class":278},[109,108209,107259],{"class":211},[109,108211,130],{"class":126},[109,108213,107194],{"class":278},[109,108215,107266],{"class":211},[109,108217,130],{"class":126},[109,108219,5021],{"class":278},[109,108221,107273],{"class":211},[109,108223,130],{"class":126},[109,108225,107278],{"class":278},[109,108227,107281],{"class":211},[109,108229,130],{"class":126},[109,108231,107286],{"class":278},[109,108233,102319],{"class":126},[19,108235,108236,108237,108239,108240,108243,108244,108246],{},"这行定义电机。它作用在 ",[106,108238,107015],{}," 关节上。",[106,108241,108242],{},"gear"," 可以理解成放大倍数。",[106,108245,107030],{}," 限制控制输入范围。",[99,108248,108249],{"className":31553,"code":107942,"language":31555,"meta":104,"style":104},[106,108250,108251,108263],{"__ignoreMap":104},[109,108252,108253,108255,108257,108259,108261],{"class":111,"line":112},[109,108254,2922],{"class":122},[109,108256,107733],{"class":126},[109,108258,22121],{"class":122},[109,108260,26293],{"class":133},[109,108262,5082],{"class":126},[109,108264,108265,108267,108269,108271,108273],{"class":111,"line":119},[109,108266,105070],{"class":122},[109,108268,104610],{"class":133},[109,108270,714],{"class":126},[109,108272,107750],{"class":278},[109,108274,1330],{"class":126},[19,108276,108277,108279],{},[106,108278,103333],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[99,108281,108283],{"className":31553,"code":108282,"language":31555,"meta":104,"style":104},"for step in range(2000):\n",[106,108284,108285],{"__ignoreMap":104},[109,108286,108287,108289,108291,108293,108295,108297,108299],{"class":111,"line":112},[109,108288,4372],{"class":122},[109,108290,32791],{"class":126},[109,108292,27218],{"class":122},[109,108294,33618],{"class":133},[109,108296,714],{"class":126},[109,108298,107771],{"class":133},[109,108300,31961],{"class":126},[19,108302,108303,108304,108306,108307,108310],{},"循环 2000 步。这里没有用 ",[106,108305,2522],{},"，而是用 ",[106,108308,108309],{},"step","，因为后面要用当前步数计算时间。",[99,108312,108314],{"className":31553,"code":108313,"language":31555,"meta":104,"style":104},"t = step * model.opt.timestep\n",[106,108315,108316],{"__ignoreMap":104},[109,108317,108318,108321,108323,108325,108327],{"class":111,"line":112},[109,108319,108320],{"class":126},"t ",[109,108322,130],{"class":122},[109,108324,32791],{"class":126},[109,108326,1988],{"class":122},[109,108328,107787],{"class":126},[19,108330,108331],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[99,108333,108334],{"className":31553,"code":107982,"language":31555,"meta":104,"style":104},[106,108335,108336],{"__ignoreMap":104},[109,108337,108338,108340,108342,108344,108346,108348,108350,108352,108354,108356,108358,108360,108362,108364],{"class":111,"line":112},[109,108339,107046],{"class":126},[109,108341,1314],{"class":133},[109,108343,5780],{"class":126},[109,108345,130],{"class":122},[109,108347,107801],{"class":133},[109,108349,797],{"class":122},[109,108351,107806],{"class":126},[109,108353,106435],{"class":133},[109,108355,797],{"class":122},[109,108357,107813],{"class":126},[109,108359,1988],{"class":122},[109,108361,63042],{"class":133},[109,108363,797],{"class":122},[109,108365,107822],{"class":126},[19,108367,108368],{},"这行给电机输入一个正弦波。拆开看：",[765,108370,108371,108377,108383],{},[30,108372,108373,108376],{},[106,108374,108375],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[30,108378,108379,108382],{},[106,108380,108381],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[30,108384,108385,108388],{},[106,108386,108387],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108390,108391],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[99,108393,108395],{"className":31553,"code":108394,"language":31555,"meta":104,"style":104},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[106,108396,108397],{"__ignoreMap":104},[109,108398,108399,108401,108403,108405,108407,108409],{"class":111,"line":112},[109,108400,31590],{"class":133},[109,108402,714],{"class":126},[109,108404,107850],{"class":278},[109,108406,106105],{"class":126},[109,108408,1831],{"class":133},[109,108410,31672],{"class":126},[19,108412,108413,108414,108416],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[106,108415,102245],{}," 只有一个数。",[14,108418,103491],{"id":103490},[19,108420,108421],{},"输出类似:",[99,108423,108426],{"className":108424,"code":108425,"language":6524,"meta":104},[6522],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[106,108427,108425],{"__ignoreMap":104},[19,108429,108430,108431,108433],{},"这里 ",[106,108432,107301],{}," 是电机输入。",[19,108435,108436,108439,108440,108443],{},[106,108437,108438],{},"joint qpos"," 是关节角度，单位通常是弧度。",[106,108441,108442],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108445,108446],{},"角度单位提示：",[99,108448,108451],{"className":108449,"code":108450,"language":6524,"meta":104},[6522],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[106,108452,108450],{"__ignoreMap":104},[19,108454,108455,108456,108458,108459,108461],{},"如果你看到 ",[106,108457,105205],{}," 是 ",[106,108460,36504],{},"，大约就是 28.6 度。",[14,108463,103523],{"id":103522},[765,108465,108466,108473,108476,108483,108486,108494,108502],{},[30,108467,103586,108468,103589,108470,29560],{},[106,108469,107486],{},[106,108471,108472],{},"gear=\"5\"",[30,108474,108475],{},"重新运行，观察关节运动是否更剧烈。",[30,108477,103586,108478,103589,108480,29560],{},[106,108479,107030],{},[106,108481,108482],{},"-0.2 0.2",[30,108484,108485],{},"重新运行，观察控制能力是否变弱。",[30,108487,108488,108489,108491,108492,29560],{},"去掉 actuator，确认 ",[106,108490,103333],{}," 变成 ",[106,108493,1314],{},[30,108495,103586,108496,103589,108498,108501],{},[106,108497,107420],{},[106,108499,108500],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[30,108503,103586,108504,103589,108506,108509],{},[106,108505,107414],{},[106,108507,108508],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108511,103628],{"id":103627},[51,108513,108515],{"id":108514},"indexerror-index-0-is-out-of-bounds",[106,108516,108517],{},"IndexError: index 0 is out of bounds",[19,108519,108520,108521,108523],{},"原因是 ",[106,108522,107167],{},"，没有 actuator。",[51,108525,108526],{"id":108526},"关节几乎不动",[19,108528,108529],{},"可能原因:",[765,108531,108532,108537,108541,108547],{},[30,108533,108534,108536],{},[106,108535,108242],{}," 太小",[30,108538,108539,108536],{},[106,108540,107030],{},[30,108542,108543,108546],{},[106,108544,108545],{},"damping"," 太大",[30,108548,108549],{},"重力方向导致运动不明显",[51,108551,108552],{"id":108552},"模型编译失败",[19,108554,108555,108556,108558],{},"检查 actuator 引用的 ",[106,108557,107477],{}," 是否存在，joint 名称是否拼写一致。",[51,108560,108562,108564],{"id":108561},"datactrl0-写了但没有效果",[106,108563,107301],{}," 写了但没有效果",[19,108566,103750],{},[765,108568,108569,108574,108577,108582,108587],{},[30,108570,108571,108573],{},[106,108572,103333],{}," 是否大于 0。",[30,108575,108576],{},"motor 是否引用了正确 joint。",[30,108578,108579,108581],{},[106,108580,108242],{}," 是否太小。",[30,108583,108584,108586],{},[106,108585,107030],{}," 是否把输入限制得太小。",[30,108588,108589],{},"body 是否真的有可动 joint。",[51,108591,108592],{"id":108592},"控制输入超过范围会怎样",[19,108594,108595],{},"如果设置了：",[99,108597,108599],{"className":54242,"code":108598,"language":54244,"meta":104,"style":104},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[106,108600,108601],{"__ignoreMap":104},[109,108602,108603],{"class":111,"line":112},[109,108604,108598],{"class":126},[19,108606,108607],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[99,108609,108611],{"className":31553,"code":108610,"language":31555,"meta":104,"style":104},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[106,108612,108613,108633],{"__ignoreMap":104},[109,108614,108615,108618,108620,108623,108625,108627,108629,108631],{"class":111,"line":112},[109,108616,108617],{"class":126},"action ",[109,108619,130],{"class":122},[109,108621,108622],{"class":126}," np.clip(action, ",[109,108624,2064],{"class":122},[109,108626,106435],{"class":133},[109,108628,13608],{"class":126},[109,108630,106435],{"class":133},[109,108632,1330],{"class":126},[109,108634,108635,108637,108639,108641,108643],{"class":111,"line":119},[109,108636,107046],{"class":126},[109,108638,1314],{"class":133},[109,108640,5780],{"class":126},[109,108642,130],{"class":122},[109,108644,108645],{"class":126}," action\n",[14,108647,103782],{"id":103781},[19,108649,108650],{},"这一章建立了控制任务的基本形式：",[99,108652,108655],{"className":108653,"code":108654,"language":6524,"meta":104},[6522],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[106,108656,108654],{"__ignoreMap":104},[19,108658,108659],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1467,108661,108662],{},"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":104,"searchDepth":119,"depth":119,"links":108664},[108665,108666,108667,108672,108676,108677,108678,108686],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":108668},[108669,108670,108671],{"id":107308,"depth":140,"text":107309},{"id":107358,"depth":140,"text":107359},{"id":107424,"depth":140,"text":107425},{"id":102427,"depth":119,"text":102428,"children":108673},[108674,108675],{"id":102747,"depth":140,"text":102747},{"id":102883,"depth":140,"text":102883},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":108679},[108680,108681,108682,108683,108685],{"id":108514,"depth":140,"text":108517},{"id":108526,"depth":140,"text":108526},{"id":108552,"depth":140,"text":108552},{"id":108561,"depth":140,"text":108684},"data.ctrl[0] 写了但没有效果",{"id":108592,"depth":140,"text":108592},{"id":103781,"depth":119,"text":103782},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106996,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108693,"title":108694,"body":108695,"description":104,"extension":1476,"meta":110604,"navigation":157,"path":110605,"seo":110606,"stem":110607,"__hash__":110608},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108696,"toc":110580},[108697,108700,108702,108705,108713,108716,108733,108736,108761,108764,108810,108812,108814,108869,108871,108890,108892,108935,108938,108955,108958,108974,108984,108991,108993,108996,108999,109033,109036,109084,109088,109091,109105,109114,109118,109121,109146,109149,109153,109166,109169,109175,109178,109193,109195,109198,109458,109460,109472,109475,109787,109789,109801,109803,109806,109821,109826,109829,109851,109854,109857,109891,109894,109898,109909,109912,109929,109932,109946,109953,109973,109980,109994,109997,110009,110024,110044,110047,110069,110072,110076,110091,110102,110117,110120,110150,110166,110195,110203,110227,110230,110248,110258,110270,110277,110286,110292,110301,110304,110306,110315,110318,110333,110335,110338,110349,110352,110363,110366,110384,110386,110403,110406,110434,110436,110440,110443,110473,110479,110482,110486,110494,110497,110499,110520,110523,110526,110542,110545,110561,110563,110566,110577],[10,108698,108694],{"id":108699},"_5viewer-可视化与-renderer-离屏渲染",[14,108701,101822],{"id":101821},[19,108703,108704],{},"本章掌握两类可视化方式:",[765,108706,108707,108710],{},[30,108708,108709],{},"交互式 viewer: 适合人工观察仿真",[30,108711,108712],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108714,108715],{},"使用官方接口:",[99,108717,108719],{"className":31553,"code":108718,"language":31555,"meta":104,"style":104},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[106,108720,108721,108728],{"__ignoreMap":104},[109,108722,108723,108725],{"class":111,"line":112},[109,108724,31567],{"class":122},[109,108726,108727],{"class":126}," mujoco.viewer\n",[109,108729,108730],{"class":111,"line":119},[109,108731,108732],{"class":126},"mujoco.viewer.launch_passive(model, data)\n",[19,108734,108735],{},"以及:",[99,108737,108739],{"className":31553,"code":108738,"language":31555,"meta":104,"style":104},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[106,108740,108741,108751],{"__ignoreMap":104},[109,108742,108743,108746,108748],{"class":111,"line":112},[109,108744,108745],{"class":126},"renderer ",[109,108747,130],{"class":122},[109,108749,108750],{"class":126}," mujoco.Renderer(model)\n",[109,108752,108753,108756,108758],{"class":111,"line":119},[109,108754,108755],{"class":126},"image ",[109,108757,130],{"class":122},[109,108759,108760],{"class":126}," renderer.render()\n",[19,108762,108763],{},"新手建议先理解二者区别：",[1677,108765,108766,108782],{},[1680,108767,108768],{},[1683,108769,108770,108773,108776,108779],{},[1686,108771,108772],{"align":24910},"工具",[1686,108774,108775],{"align":24910},"用途",[1686,108777,108778],{"align":24910},"是否打开窗口",[1686,108780,108781],{"align":24910},"常见场景",[1723,108783,108784,108797],{},[1683,108785,108786,108789,108792,108794],{},[1728,108787,108788],{"align":24910},"Viewer",[1728,108790,108791],{"align":24910},"人眼实时观察仿真",[1728,108793,105840],{"align":24910},[1728,108795,108796],{"align":24910},"调试模型、看控制效果",[1683,108798,108799,108802,108805,108807],{},[1728,108800,108801],{"align":24910},"Renderer",[1728,108803,108804],{"align":24910},"生成图像数组",[1728,108806,105853],{"align":24910},[1728,108808,108809],{"align":24910},"保存图片、训练视觉策略、服务器批量采集",[14,108811,101945],{"id":101944},[19,108813,101948],{},[99,108815,108817],{"className":24996,"code":108816,"language":24998,"meta":104,"style":104},"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",[106,108818,108819,108831,108841,108849,108857],{"__ignoreMap":104},[109,108820,108821,108823,108825,108827,108829],{"class":111,"line":112},[109,108822,25751],{"class":211},[109,108824,27490],{"class":278},[109,108826,25008],{"class":278},[109,108828,27575],{"class":133},[109,108830,25853],{"class":133},[109,108832,108833,108835,108837,108839],{"class":111,"line":119},[109,108834,101983],{"class":278},[109,108836,101986],{"class":278},[109,108838,101989],{"class":278},[109,108840,25853],{"class":133},[109,108842,108843,108845,108847],{"class":111,"line":140},[109,108844,101996],{"class":278},[109,108846,101999],{"class":278},[109,108848,25853],{"class":133},[109,108850,108851,108853,108855],{"class":111,"line":154},[109,108852,102006],{"class":278},[109,108854,102009],{"class":278},[109,108856,25853],{"class":133},[109,108858,108859,108861,108863,108865,108867],{"class":111,"line":161},[109,108860,102016],{"class":278},[109,108862,102019],{"class":278},[109,108864,102022],{"class":278},[109,108866,102025],{"class":278},[109,108868,103691],{"class":278},[19,108870,103994],{},[99,108872,108874],{"className":24996,"code":108873,"language":24998,"meta":104,"style":104},"pip install \"mujoco>=2.3\" numpy pillow\n",[106,108875,108876],{"__ignoreMap":104},[109,108877,108878,108880,108882,108884,108887],{"class":111,"line":112},[109,108879,25005],{"class":211},[109,108881,25008],{"class":278},[109,108883,102105],{"class":278},[109,108885,108886],{"class":278}," numpy",[109,108888,108889],{"class":278}," pillow\n",[19,108891,104011],{},[99,108893,108895],{"className":24996,"code":108894,"language":24998,"meta":104,"style":104},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[106,108896,108897,108914,108923],{"__ignoreMap":104},[109,108898,108899,108901,108903,108905,108908,108910,108912],{"class":111,"line":112},[109,108900,31505],{"class":211},[109,108902,30351],{"class":278},[109,108904,26290],{"class":133},[109,108906,108907],{"class":278}," mujoco-render",[109,108909,102150],{"class":278},[109,108911,102153],{"class":133},[109,108913,102156],{"class":133},[109,108915,108916,108918,108920],{"class":111,"line":119},[109,108917,31505],{"class":211},[109,108919,102163],{"class":278},[109,108921,108922],{"class":278}," mujoco-render\n",[109,108924,108925,108927,108929,108931,108933],{"class":111,"line":140},[109,108926,25005],{"class":211},[109,108928,25008],{"class":278},[109,108930,102105],{"class":278},[109,108932,108886],{"class":278},[109,108934,108889],{"class":278},[19,108936,108937],{},"离屏渲染后端:",[99,108939,108941],{"className":24996,"code":108940,"language":24998,"meta":104,"style":104},"export MUJOCO_GL=egl\n",[106,108942,108943],{"__ignoreMap":104},[109,108944,108945,108947,108950,108952],{"class":111,"line":112},[109,108946,26217],{"class":122},[109,108948,108949],{"class":126}," MUJOCO_GL",[109,108951,130],{"class":122},[109,108953,108954],{"class":126},"egl\n",[19,108956,108957],{},"或:",[99,108959,108961],{"className":24996,"code":108960,"language":24998,"meta":104,"style":104},"export MUJOCO_GL=osmesa\n",[106,108962,108963],{"__ignoreMap":104},[109,108964,108965,108967,108969,108971],{"class":111,"line":112},[109,108966,26217],{"class":122},[109,108968,108949],{"class":126},[109,108970,130],{"class":122},[109,108972,108973],{"class":126},"osmesa\n",[19,108975,108976,108977,108980,108981,29560],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[106,108978,108979],{},"egl"," 失败，再尝试 ",[106,108982,108983],{},"osmesa",[19,108985,108986,108987,108990],{},"如果你在本机桌面环境运行，通常先不要设置 ",[106,108988,108989],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108992,102220],{"id":102219},[19,108994,108995],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108997,108998],{},"典型 viewer 流程:",[99,109000,109002],{"className":31553,"code":109001,"language":31555,"meta":104,"style":104},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[106,109003,109004,109017,109024,109028],{"__ignoreMap":104},[109,109005,109006,109009,109012,109014],{"class":111,"line":112},[109,109007,109008],{"class":122},"with",[109,109010,109011],{"class":126}," mujoco.viewer.launch_passive(model, data) ",[109,109013,32558],{"class":122},[109,109015,109016],{"class":126}," viewer:\n",[109,109018,109019,109021],{"class":111,"line":119},[109,109020,3612],{"class":122},[109,109022,109023],{"class":126}," viewer.is_running():\n",[109,109025,109026],{"class":111,"line":140},[109,109027,102691],{"class":126},[109,109029,109030],{"class":111,"line":154},[109,109031,109032],{"class":126},"        viewer.sync()\n",[19,109034,109035],{},"典型 renderer 流程:",[99,109037,109039],{"className":31553,"code":109038,"language":31555,"meta":104,"style":104},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[106,109040,109041,109067,109071,109076],{"__ignoreMap":104},[109,109042,109043,109045,109047,109050,109052,109054,109056,109058,109060,109062,109065],{"class":111,"line":112},[109,109044,108745],{"class":126},[109,109046,130],{"class":122},[109,109048,109049],{"class":126}," mujoco.Renderer(model, ",[109,109051,26156],{"class":6553},[109,109053,130],{"class":122},[109,109055,43517],{"class":133},[109,109057,13608],{"class":126},[109,109059,26152],{"class":6553},[109,109061,130],{"class":122},[109,109063,109064],{"class":133},"640",[109,109066,1330],{"class":126},[109,109068,109069],{"class":111,"line":119},[109,109070,105680],{"class":126},[109,109072,109073],{"class":111,"line":140},[109,109074,109075],{"class":126},"renderer.update_scene(data)\n",[109,109077,109078,109080,109082],{"class":111,"line":154},[109,109079,108755],{"class":126},[109,109081,130],{"class":122},[109,109083,108760],{"class":126},[51,109085,109087],{"id":109086},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109089,109090],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[99,109092,109094],{"className":31553,"code":109093,"language":31555,"meta":104,"style":104},"mujoco.mj_step(model, data)\nviewer.sync()\n",[106,109095,109096,109100],{"__ignoreMap":104},[109,109097,109098],{"class":111,"line":112},[109,109099,105680],{"class":126},[109,109101,109102],{"class":111,"line":119},[109,109103,109104],{"class":126},"viewer.sync()\n",[19,109106,109107,109109,109110,109113],{},[106,109108,102390],{}," 负责算物理，",[106,109111,109112],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[51,109115,109117],{"id":109116},"为什么要-sleep","为什么要 sleep",[19,109119,109120],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[99,109122,109124],{"className":31553,"code":109123,"language":31555,"meta":104,"style":104},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[106,109125,109126],{"__ignoreMap":104},[109,109127,109128,109131,109133,109136,109138,109141,109143],{"class":111,"line":112},[109,109129,109130],{"class":126},"sleep_time ",[109,109132,130],{"class":122},[109,109134,109135],{"class":126}," model.opt.timestep ",[109,109137,2064],{"class":122},[109,109139,109140],{"class":126}," (time.time() ",[109,109142,2064],{"class":122},[109,109144,109145],{"class":126}," step_start)\n",[19,109147,109148],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[51,109150,109152],{"id":109151},"renderer-输出是什么","renderer 输出是什么",[99,109154,109156],{"className":31553,"code":109155,"language":31555,"meta":104,"style":104},"image = renderer.render()\n",[106,109157,109158],{"__ignoreMap":104},[109,109159,109160,109162,109164],{"class":111,"line":112},[109,109161,108755],{"class":126},[109,109163,130],{"class":122},[109,109165,108760],{"class":126},[19,109167,109168],{},"得到的是 NumPy 数组，形状通常是：",[99,109170,109173],{"className":109171,"code":109172,"language":6524,"meta":104},[6522],"(height, width, 3)\n",[106,109174,109172],{"__ignoreMap":104},[19,109176,109177],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[99,109179,109181],{"className":31553,"code":109180,"language":31555,"meta":104,"style":104},"Image.fromarray(image).save(\"render_output.png\")\n",[106,109182,109183],{"__ignoreMap":104},[109,109184,109185,109188,109191],{"class":111,"line":112},[109,109186,109187],{"class":126},"Image.fromarray(image).save(",[109,109189,109190],{"class":278},"\"render_output.png\"",[109,109192,1330],{"class":126},[14,109194,102428],{"id":102427},[19,109196,109197],{},"交互式 Viewer:",[99,109199,109201],{"className":31553,"code":109200,"language":31555,"meta":104,"style":104},"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",[106,109202,109203,109209,109213,109219,109225,109229,109233,109241,109246,109250,109254,109258,109263,109268,109272,109276,109280,109285,109289,109293,109297,109301,109305,109309,109321,109333,109341,109345,109355,109375,109385,109390,109395,109399,109416,109429,109434,109438,109442,109454],{"__ignoreMap":104},[109,109204,109205,109207],{"class":111,"line":112},[109,109206,31567],{"class":122},[109,109208,33004],{"class":126},[109,109210,109211],{"class":111,"line":119},[109,109212,158],{"emptyLinePlaceholder":157},[109,109214,109215,109217],{"class":111,"line":140},[109,109216,31567],{"class":122},[109,109218,102476],{"class":126},[109,109220,109221,109223],{"class":111,"line":154},[109,109222,31567],{"class":122},[109,109224,108727],{"class":126},[109,109226,109227],{"class":111,"line":161},[109,109228,158],{"emptyLinePlaceholder":157},[109,109230,109231],{"class":111,"line":167},[109,109232,158],{"emptyLinePlaceholder":157},[109,109234,109235,109237,109239],{"class":111,"line":185},[109,109236,102489],{"class":133},[109,109238,14737],{"class":122},[109,109240,102494],{"class":278},[109,109242,109243],{"class":111,"line":201},[109,109244,109245],{"class":278},"\u003Cmujoco model=\"viewer_demo\">\n",[109,109247,109248],{"class":111,"line":206},[109,109249,102504],{"class":278},[109,109251,109252],{"class":111,"line":218},[109,109253,158],{"emptyLinePlaceholder":157},[109,109255,109256],{"class":111,"line":223},[109,109257,102513],{"class":278},[109,109259,109260],{"class":111,"line":229},[109,109261,109262],{"class":278},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[109,109264,109265],{"class":111,"line":244},[109,109266,109267],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[109,109269,109270],{"class":111,"line":258},[109,109271,158],{"emptyLinePlaceholder":157},[109,109273,109274],{"class":111,"line":263},[109,109275,102527],{"class":278},[109,109277,109278],{"class":111,"line":269},[109,109279,102532],{"class":278},[109,109281,109282],{"class":111,"line":304},[109,109283,109284],{"class":278},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[109,109286,109287],{"class":111,"line":331},[109,109288,102542],{"class":278},[109,109290,109291],{"class":111,"line":336},[109,109292,102547],{"class":278},[109,109294,109295],{"class":111,"line":364},[109,109296,102552],{"class":278},[109,109298,109299],{"class":111,"line":391},[109,109300,96873],{"class":278},[109,109302,109303],{"class":111,"line":396},[109,109304,158],{"emptyLinePlaceholder":157},[109,109306,109307],{"class":111,"line":402},[109,109308,158],{"emptyLinePlaceholder":157},[109,109310,109311,109313,109315,109317,109319],{"class":111,"line":419},[109,109312,33122],{"class":122},[109,109314,212],{"class":211},[109,109316,102573],{"class":126},[109,109318,96861],{"class":133},[109,109320,5082],{"class":126},[109,109322,109323,109325,109327,109329,109331],{"class":111,"line":435},[109,109324,102582],{"class":126},[109,109326,130],{"class":122},[109,109328,102587],{"class":126},[109,109330,102489],{"class":133},[109,109332,1330],{"class":126},[109,109334,109335,109337,109339],{"class":111,"line":440},[109,109336,102596],{"class":126},[109,109338,130],{"class":122},[109,109340,102601],{"class":126},[109,109342,109343],{"class":111,"line":467},[109,109344,158],{"emptyLinePlaceholder":157},[109,109346,109347,109349,109351,109353],{"class":111,"line":494},[109,109348,35353],{"class":122},[109,109350,109011],{"class":126},[109,109352,32558],{"class":122},[109,109354,109016],{"class":126},[109,109356,109357,109360,109363,109365,109368,109370,109373],{"class":111,"line":499},[109,109358,109359],{"class":122},"        while",[109,109361,109362],{"class":126}," viewer.is_running() ",[109,109364,31637],{"class":122},[109,109366,109367],{"class":126}," data.time ",[109,109369,1320],{"class":122},[109,109371,109372],{"class":133}," 5.0",[109,109374,5082],{"class":126},[109,109376,109377,109380,109382],{"class":111,"line":526},[109,109378,109379],{"class":126},"            step_start ",[109,109381,130],{"class":122},[109,109383,109384],{"class":126}," time.time()\n",[109,109386,109387],{"class":111,"line":552},[109,109388,109389],{"class":126},"            mujoco.mj_step(model, data)\n",[109,109391,109392],{"class":111,"line":557},[109,109393,109394],{"class":126},"            viewer.sync()\n",[109,109396,109397],{"class":111,"line":584},[109,109398,158],{"emptyLinePlaceholder":157},[109,109400,109401,109404,109406,109408,109410,109412,109414],{"class":111,"line":611},[109,109402,109403],{"class":126},"            sleep_time ",[109,109405,130],{"class":122},[109,109407,109135],{"class":126},[109,109409,2064],{"class":122},[109,109411,109140],{"class":126},[109,109413,2064],{"class":122},[109,109415,109145],{"class":126},[109,109417,109418,109420,109423,109425,109427],{"class":111,"line":616},[109,109419,5979],{"class":122},[109,109421,109422],{"class":126}," sleep_time ",[109,109424,2490],{"class":122},[109,109426,734],{"class":133},[109,109428,5082],{"class":126},[109,109430,109431],{"class":111,"line":633},[109,109432,109433],{"class":126},"                time.sleep(sleep_time)\n",[109,109435,109436],{"class":111,"line":649},[109,109437,158],{"emptyLinePlaceholder":157},[109,109439,109440],{"class":111,"line":676},[109,109441,158],{"emptyLinePlaceholder":157},[109,109443,109444,109446,109448,109450,109452],{"class":111,"line":703},[109,109445,2922],{"class":122},[109,109447,32395],{"class":133},[109,109449,102734],{"class":122},[109,109451,102737],{"class":278},[109,109453,5082],{"class":126},[109,109455,109456],{"class":111,"line":708},[109,109457,102744],{"class":126},[19,109459,104745],{},[99,109461,109463],{"className":24996,"code":109462,"language":24998,"meta":104,"style":104},"touch ch5_viewer.py\n",[106,109464,109465],{"__ignoreMap":104},[109,109466,109467,109469],{"class":111,"line":112},[109,109468,102458],{"class":211},[109,109470,109471],{"class":278}," ch5_viewer.py\n",[19,109473,109474],{},"离屏 Renderer 保存图片:",[99,109476,109478],{"className":31553,"code":109477,"language":31555,"meta":104,"style":104},"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",[106,109479,109480,109492,109496,109502,109512,109516,109520,109528,109533,109537,109541,109545,109549,109554,109558,109562,109566,109570,109574,109578,109582,109586,109590,109594,109598,109610,109622,109630,109655,109659,109675,109679,109683,109698,109707,109711,109725,109730,109735,109739,109751,109763,109767,109771,109783],{"__ignoreMap":104},[109,109481,109482,109484,109487,109489],{"class":111,"line":112},[109,109483,31912],{"class":122},[109,109485,109486],{"class":126}," pathlib ",[109,109488,31567],{"class":122},[109,109490,109491],{"class":126}," Path\n",[109,109493,109494],{"class":111,"line":119},[109,109495,158],{"emptyLinePlaceholder":157},[109,109497,109498,109500],{"class":111,"line":140},[109,109499,31567],{"class":122},[109,109501,102476],{"class":126},[109,109503,109504,109506,109508,109510],{"class":111,"line":154},[109,109505,31912],{"class":122},[109,109507,48438],{"class":133},[109,109509,48441],{"class":122},[109,109511,48444],{"class":126},[109,109513,109514],{"class":111,"line":161},[109,109515,158],{"emptyLinePlaceholder":157},[109,109517,109518],{"class":111,"line":167},[109,109519,158],{"emptyLinePlaceholder":157},[109,109521,109522,109524,109526],{"class":111,"line":185},[109,109523,102489],{"class":133},[109,109525,14737],{"class":122},[109,109527,102494],{"class":278},[109,109529,109530],{"class":111,"line":201},[109,109531,109532],{"class":278},"\u003Cmujoco model=\"renderer_demo\">\n",[109,109534,109535],{"class":111,"line":206},[109,109536,102504],{"class":278},[109,109538,109539],{"class":111,"line":218},[109,109540,158],{"emptyLinePlaceholder":157},[109,109542,109543],{"class":111,"line":223},[109,109544,102513],{"class":278},[109,109546,109547],{"class":111,"line":229},[109,109548,109262],{"class":278},[109,109550,109551],{"class":111,"line":244},[109,109552,109553],{"class":278},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[109,109555,109556],{"class":111,"line":258},[109,109557,109267],{"class":278},[109,109559,109560],{"class":111,"line":263},[109,109561,158],{"emptyLinePlaceholder":157},[109,109563,109564],{"class":111,"line":269},[109,109565,102527],{"class":278},[109,109567,109568],{"class":111,"line":304},[109,109569,102532],{"class":278},[109,109571,109572],{"class":111,"line":331},[109,109573,109284],{"class":278},[109,109575,109576],{"class":111,"line":336},[109,109577,102542],{"class":278},[109,109579,109580],{"class":111,"line":364},[109,109581,102547],{"class":278},[109,109583,109584],{"class":111,"line":391},[109,109585,102552],{"class":278},[109,109587,109588],{"class":111,"line":396},[109,109589,96873],{"class":278},[109,109591,109592],{"class":111,"line":402},[109,109593,158],{"emptyLinePlaceholder":157},[109,109595,109596],{"class":111,"line":419},[109,109597,158],{"emptyLinePlaceholder":157},[109,109599,109600,109602,109604,109606,109608],{"class":111,"line":435},[109,109601,33122],{"class":122},[109,109603,212],{"class":211},[109,109605,102573],{"class":126},[109,109607,96861],{"class":133},[109,109609,5082],{"class":126},[109,109611,109612,109614,109616,109618,109620],{"class":111,"line":440},[109,109613,102582],{"class":126},[109,109615,130],{"class":122},[109,109617,102587],{"class":126},[109,109619,102489],{"class":133},[109,109621,1330],{"class":126},[109,109623,109624,109626,109628],{"class":111,"line":467},[109,109625,102596],{"class":126},[109,109627,130],{"class":122},[109,109629,102601],{"class":126},[109,109631,109632,109635,109637,109639,109641,109643,109645,109647,109649,109651,109653],{"class":111,"line":494},[109,109633,109634],{"class":126},"    renderer ",[109,109636,130],{"class":122},[109,109638,109049],{"class":126},[109,109640,26156],{"class":6553},[109,109642,130],{"class":122},[109,109644,43517],{"class":133},[109,109646,13608],{"class":126},[109,109648,26152],{"class":6553},[109,109650,130],{"class":122},[109,109652,109064],{"class":133},[109,109654,1330],{"class":126},[109,109656,109657],{"class":111,"line":499},[109,109658,158],{"emptyLinePlaceholder":157},[109,109660,109661,109663,109665,109667,109669,109671,109673],{"class":111,"line":526},[109,109662,1302],{"class":122},[109,109664,102676],{"class":126},[109,109666,27218],{"class":122},[109,109668,33618],{"class":133},[109,109670,714],{"class":126},[109,109672,1351],{"class":133},[109,109674,31961],{"class":126},[109,109676,109677],{"class":111,"line":552},[109,109678,102691],{"class":126},[109,109680,109681],{"class":111,"line":557},[109,109682,158],{"emptyLinePlaceholder":157},[109,109684,109685,109688,109691,109693,109696],{"class":111,"line":584},[109,109686,109687],{"class":126},"    renderer.update_scene(data, ",[109,109689,109690],{"class":6553},"camera",[109,109692,130],{"class":122},[109,109694,109695],{"class":278},"\"fixed_camera\"",[109,109697,1330],{"class":126},[109,109699,109700,109703,109705],{"class":111,"line":611},[109,109701,109702],{"class":126},"    image ",[109,109704,130],{"class":122},[109,109706,108760],{"class":126},[109,109708,109709],{"class":111,"line":616},[109,109710,158],{"emptyLinePlaceholder":157},[109,109712,109713,109716,109718,109721,109723],{"class":111,"line":633},[109,109714,109715],{"class":126},"    output_path ",[109,109717,130],{"class":122},[109,109719,109720],{"class":126}," Path(",[109,109722,109190],{"class":278},[109,109724,1330],{"class":126},[109,109726,109727],{"class":111,"line":649},[109,109728,109729],{"class":126},"    Image.fromarray(image).save(output_path)\n",[109,109731,109732],{"class":111,"line":676},[109,109733,109734],{"class":126},"    renderer.close()\n",[109,109736,109737],{"class":111,"line":703},[109,109738,158],{"emptyLinePlaceholder":157},[109,109740,109741,109743,109745,109748],{"class":111,"line":708},[109,109742,32474],{"class":133},[109,109744,714],{"class":126},[109,109746,109747],{"class":278},"\"saved:\"",[109,109749,109750],{"class":126},", output_path.resolve())\n",[109,109752,109753,109755,109757,109760],{"class":111,"line":723},[109,109754,32474],{"class":133},[109,109756,714],{"class":126},[109,109758,109759],{"class":278},"\"image shape:\"",[109,109761,109762],{"class":126},", image.shape)\n",[109,109764,109765],{"class":111,"line":728},[109,109766,158],{"emptyLinePlaceholder":157},[109,109768,109769],{"class":111,"line":739},[109,109770,158],{"emptyLinePlaceholder":157},[109,109772,109773,109775,109777,109779,109781],{"class":111,"line":9352},[109,109774,2922],{"class":122},[109,109776,32395],{"class":133},[109,109778,102734],{"class":122},[109,109780,102737],{"class":278},[109,109782,5082],{"class":126},[109,109784,109785],{"class":111,"line":9364},[109,109786,102744],{"class":126},[19,109788,104745],{},[99,109790,109792],{"className":24996,"code":109791,"language":24998,"meta":104,"style":104},"touch ch5_renderer.py\n",[106,109793,109794],{"__ignoreMap":104},[109,109795,109796,109798],{"class":111,"line":112},[109,109797,102458],{"class":211},[109,109799,109800],{"class":278}," ch5_renderer.py\n",[51,109802,102747],{"id":102747},[19,109804,109805],{},"viewer 上下文：",[99,109807,109809],{"className":31553,"code":109808,"language":31555,"meta":104,"style":104},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[106,109810,109811],{"__ignoreMap":104},[109,109812,109813,109815,109817,109819],{"class":111,"line":112},[109,109814,109008],{"class":122},[109,109816,109011],{"class":126},[109,109818,32558],{"class":122},[109,109820,109016],{"class":126},[19,109822,109823,109825],{},[106,109824,109008],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109827,109828],{},"窗口循环：",[99,109830,109832],{"className":31553,"code":109831,"language":31555,"meta":104,"style":104},"while viewer.is_running() and data.time \u003C 5.0:\n",[106,109833,109834],{"__ignoreMap":104},[109,109835,109836,109839,109841,109843,109845,109847,109849],{"class":111,"line":112},[109,109837,109838],{"class":122},"while",[109,109840,109362],{"class":126},[109,109842,31637],{"class":122},[109,109844,109367],{"class":126},[109,109846,1320],{"class":122},[109,109848,109372],{"class":133},[109,109850,5082],{"class":126},[19,109852,109853],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109855,109856],{},"固定相机：",[99,109858,109860],{"className":54242,"code":109859,"language":54244,"meta":104,"style":104},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[106,109861,109862],{"__ignoreMap":104},[109,109863,109864,109866,109868,109870,109872,109874,109876,109878,109881,109884,109886,109889],{"class":111,"line":112},[109,109865,1320],{"class":126},[109,109867,109690],{"class":52475},[109,109869,16093],{"class":211},[109,109871,130],{"class":126},[109,109873,109695],{"class":278},[109,109875,102281],{"class":211},[109,109877,130],{"class":126},[109,109879,109880],{"class":278},"\"1.5 -2.0 1.2\"",[109,109882,109883],{"class":211}," xyaxes",[109,109885,130],{"class":126},[109,109887,109888],{"class":278},"\"1 0.75 0 0 0 1\"",[109,109890,102319],{"class":126},[19,109892,109893],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[51,109895,109897],{"id":109896},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[99,109899,109901],{"className":31553,"code":109900,"language":31555,"meta":104,"style":104},"import time\n",[106,109902,109903],{"__ignoreMap":104},[109,109904,109905,109907],{"class":111,"line":112},[109,109906,31567],{"class":122},[109,109908,33004],{"class":126},[19,109910,109911],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[99,109913,109915],{"className":31553,"code":109914,"language":31555,"meta":104,"style":104},"import mujoco\nimport mujoco.viewer\n",[106,109916,109917,109923],{"__ignoreMap":104},[109,109918,109919,109921],{"class":111,"line":112},[109,109920,31567],{"class":122},[109,109922,102476],{"class":126},[109,109924,109925,109927],{"class":111,"line":119},[109,109926,31567],{"class":122},[109,109928,108727],{"class":126},[19,109930,109931],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[99,109933,109934],{"className":31553,"code":109808,"language":31555,"meta":104,"style":104},[106,109935,109936],{"__ignoreMap":104},[109,109937,109938,109940,109942,109944],{"class":111,"line":112},[109,109939,109008],{"class":122},[109,109941,109011],{"class":126},[109,109943,32558],{"class":122},[109,109945,109016],{"class":126},[19,109947,109948,109949,109952],{},"打开一个 viewer 窗口。",[106,109950,109951],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[99,109954,109955],{"className":31553,"code":109831,"language":31555,"meta":104,"style":104},[106,109956,109957],{"__ignoreMap":104},[109,109958,109959,109961,109963,109965,109967,109969,109971],{"class":111,"line":112},[109,109960,109838],{"class":122},[109,109962,109362],{"class":126},[109,109964,31637],{"class":122},[109,109966,109367],{"class":126},[109,109968,1320],{"class":122},[109,109970,109372],{"class":133},[109,109972,5082],{"class":126},[19,109974,109975,109976,109979],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[106,109977,109978],{},"viewer.is_running()"," 会变成 false，循环结束。",[99,109981,109983],{"className":31553,"code":109982,"language":31555,"meta":104,"style":104},"step_start = time.time()\n",[106,109984,109985],{"__ignoreMap":104},[109,109986,109987,109990,109992],{"class":111,"line":112},[109,109988,109989],{"class":126},"step_start ",[109,109991,130],{"class":122},[109,109993,109384],{"class":126},[19,109995,109996],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[99,109998,109999],{"className":31553,"code":109093,"language":31555,"meta":104,"style":104},[106,110000,110001,110005],{"__ignoreMap":104},[109,110002,110003],{"class":111,"line":112},[109,110004,105680],{"class":126},[109,110006,110007],{"class":111,"line":119},[109,110008,109104],{"class":126},[19,110010,110011,110013,110014,110016,110017,110019,110020,110023],{},[106,110012,102390],{}," 推进物理仿真。",[106,110015,109112],{}," 把最新的 ",[106,110018,34576],{}," 同步到窗口里显示。没有 ",[106,110021,110022],{},"sync()","，窗口可能看不到最新状态。",[99,110025,110026],{"className":31553,"code":109123,"language":31555,"meta":104,"style":104},[106,110027,110028],{"__ignoreMap":104},[109,110029,110030,110032,110034,110036,110038,110040,110042],{"class":111,"line":112},[109,110031,109130],{"class":126},[109,110033,130],{"class":122},[109,110035,109135],{"class":126},[109,110037,2064],{"class":122},[109,110039,109140],{"class":126},[109,110041,2064],{"class":122},[109,110043,109145],{"class":126},[19,110045,110046],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[99,110048,110050],{"className":31553,"code":110049,"language":31555,"meta":104,"style":104},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[106,110051,110052,110064],{"__ignoreMap":104},[109,110053,110054,110056,110058,110060,110062],{"class":111,"line":112},[109,110055,2922],{"class":122},[109,110057,109422],{"class":126},[109,110059,2490],{"class":122},[109,110061,734],{"class":133},[109,110063,5082],{"class":126},[109,110065,110066],{"class":111,"line":119},[109,110067,110068],{"class":126},"    time.sleep(sleep_time)\n",[19,110070,110071],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[51,110073,110075],{"id":110074},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[99,110077,110079],{"className":31553,"code":110078,"language":31555,"meta":104,"style":104},"from pathlib import Path\n",[106,110080,110081],{"__ignoreMap":104},[109,110082,110083,110085,110087,110089],{"class":111,"line":112},[109,110084,31912],{"class":122},[109,110086,109486],{"class":126},[109,110088,31567],{"class":122},[109,110090,109491],{"class":126},[19,110092,110093,110094,110097,110098,110101],{},"导入 ",[106,110095,110096],{},"Path","，用来处理文件路径。相比直接写字符串，",[106,110099,110100],{},"Path(\"render_output.png\")"," 更清晰。",[99,110103,110105],{"className":31553,"code":110104,"language":31555,"meta":104,"style":104},"from PIL import Image\n",[106,110106,110107],{"__ignoreMap":104},[109,110108,110109,110111,110113,110115],{"class":111,"line":112},[109,110110,31912],{"class":122},[109,110112,48438],{"class":133},[109,110114,48441],{"class":122},[109,110116,48444],{"class":126},[19,110118,110119],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[99,110121,110122],{"className":54242,"code":109859,"language":54244,"meta":104,"style":104},[106,110123,110124],{"__ignoreMap":104},[109,110125,110126,110128,110130,110132,110134,110136,110138,110140,110142,110144,110146,110148],{"class":111,"line":112},[109,110127,1320],{"class":126},[109,110129,109690],{"class":52475},[109,110131,16093],{"class":211},[109,110133,130],{"class":126},[109,110135,109695],{"class":278},[109,110137,102281],{"class":211},[109,110139,130],{"class":126},[109,110141,109880],{"class":278},[109,110143,109883],{"class":211},[109,110145,130],{"class":126},[109,110147,109888],{"class":278},[109,110149,102319],{"class":126},[19,110151,110152,110153,110155,110156,110158,110159,110162,110163,110165],{},"定义一个相机。",[106,110154,80985],{}," 是相机名字。",[106,110157,105321],{}," 是相机在世界里的位置。",[106,110160,110161],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[106,110164,105321],{}," 来调视角。",[99,110167,110169],{"className":31553,"code":110168,"language":31555,"meta":104,"style":104},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[106,110170,110171],{"__ignoreMap":104},[109,110172,110173,110175,110177,110179,110181,110183,110185,110187,110189,110191,110193],{"class":111,"line":112},[109,110174,108745],{"class":126},[109,110176,130],{"class":122},[109,110178,109049],{"class":126},[109,110180,26156],{"class":6553},[109,110182,130],{"class":122},[109,110184,43517],{"class":133},[109,110186,13608],{"class":126},[109,110188,26152],{"class":6553},[109,110190,130],{"class":122},[109,110192,109064],{"class":133},[109,110194,1330],{"class":126},[19,110196,110197,110198,102193,110200,110202],{},"创建离屏渲染器。",[106,110199,26156],{},[106,110201,26152],{}," 决定输出图片大小。",[99,110204,110205],{"className":31553,"code":102851,"language":31555,"meta":104,"style":104},[106,110206,110207,110223],{"__ignoreMap":104},[109,110208,110209,110211,110213,110215,110217,110219,110221],{"class":111,"line":112},[109,110210,4372],{"class":122},[109,110212,102676],{"class":126},[109,110214,27218],{"class":122},[109,110216,33618],{"class":133},[109,110218,714],{"class":126},[109,110220,1351],{"class":133},[109,110222,31961],{"class":126},[109,110224,110225],{"class":111,"line":119},[109,110226,102874],{"class":126},[19,110228,110229],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[99,110231,110233],{"className":31553,"code":110232,"language":31555,"meta":104,"style":104},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[106,110234,110235],{"__ignoreMap":104},[109,110236,110237,110240,110242,110244,110246],{"class":111,"line":112},[109,110238,110239],{"class":126},"renderer.update_scene(data, ",[109,110241,109690],{"class":6553},[109,110243,130],{"class":122},[109,110245,109695],{"class":278},[109,110247,1330],{"class":126},[19,110249,110250,110251,110253,110254,110257],{},"告诉 renderer：用当前 ",[106,110252,34576],{}," 的状态更新画面，并使用名为 ",[106,110255,110256],{},"fixed_camera"," 的相机视角。",[99,110259,110260],{"className":31553,"code":109155,"language":31555,"meta":104,"style":104},[106,110261,110262],{"__ignoreMap":104},[109,110263,110264,110266,110268],{"class":111,"line":112},[109,110265,108755],{"class":126},[109,110267,130],{"class":122},[109,110269,108760],{"class":126},[19,110271,110272,110273,110276],{},"真正渲染出图像。",[106,110274,110275],{},"image"," 是一个 NumPy 数组，不是文件。",[99,110278,110280],{"className":31553,"code":110279,"language":31555,"meta":104,"style":104},"Image.fromarray(image).save(output_path)\n",[106,110281,110282],{"__ignoreMap":104},[109,110283,110284],{"class":111,"line":112},[109,110285,110279],{"class":126},[19,110287,110288,110289,29560],{},"把数组转换成图片，并保存到 ",[106,110290,110291],{},"render_output.png",[99,110293,110295],{"className":31553,"code":110294,"language":31555,"meta":104,"style":104},"renderer.close()\n",[106,110296,110297],{"__ignoreMap":104},[109,110298,110299],{"class":111,"line":112},[109,110300,110294],{"class":126},[19,110302,110303],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110305,103491],{"id":103490},[19,110307,110308,110309,110311,110312,29560],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[106,110310,110291],{},"，并输出图像数组形状，例如 ",[106,110313,110314],{},"(480, 640, 3)",[19,110316,110317],{},"如果图片里看不到方块，先检查：",[765,110319,110320,110323,110326],{},[30,110321,110322],{},"方块是否掉到相机视野外。",[30,110324,110325],{},"camera 位置是否合理。",[30,110327,110328,110329,110332],{},"是否在 ",[106,110330,110331],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110334,103523],{"id":103522},[19,110336,110337],{},"运行 viewer:",[99,110339,110341],{"className":24996,"code":110340,"language":24998,"meta":104,"style":104},"python ch5_viewer.py\n",[106,110342,110343],{"__ignoreMap":104},[109,110344,110345,110347],{"class":111,"line":112},[109,110346,31555],{"class":211},[109,110348,109471],{"class":278},[19,110350,110351],{},"运行 renderer:",[99,110353,110355],{"className":24996,"code":110354,"language":24998,"meta":104,"style":104},"python ch5_renderer.py\n",[106,110356,110357],{"__ignoreMap":104},[109,110358,110359,110361],{"class":111,"line":112},[109,110360,31555],{"class":211},[109,110362,109800],{"class":278},[19,110364,110365],{},"如果在服务器上运行:",[99,110367,110369],{"className":24996,"code":110368,"language":24998,"meta":104,"style":104},"MUJOCO_GL=egl python ch5_renderer.py\n",[106,110370,110371],{"__ignoreMap":104},[109,110372,110373,110375,110377,110379,110382],{"class":111,"line":112},[109,110374,108989],{"class":126},[109,110376,130],{"class":122},[109,110378,108979],{"class":278},[109,110380,110381],{"class":211}," python",[109,110383,109800],{"class":278},[19,110385,108957],{},[99,110387,110389],{"className":24996,"code":110388,"language":24998,"meta":104,"style":104},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[106,110390,110391],{"__ignoreMap":104},[109,110392,110393,110395,110397,110399,110401],{"class":111,"line":112},[109,110394,108989],{"class":126},[109,110396,130],{"class":122},[109,110398,108983],{"class":278},[109,110400,110381],{"class":211},[109,110402,109800],{"class":278},[19,110404,110405],{},"再做几个练习：",[765,110407,110408,110415,110418,110424],{},[30,110409,110410,110411,110414],{},"把 renderer 分辨率改成 ",[106,110412,110413],{},"height=240, width=320","，观察输出 shape。",[30,110416,110417],{},"把方块颜色改成蓝色，重新保存图片。",[30,110419,110420,110421,110423],{},"把相机 ",[106,110422,105321],{}," 改远一点，观察画面中物体是否变小。",[30,110425,110426,110427,103589,110430,110433],{},"把 viewer 示例中的 ",[106,110428,110429],{},"data.time \u003C 5.0",[106,110431,110432],{},"data.time \u003C 20.0","，观察更长时间。",[14,110435,103628],{"id":103627},[51,110437,110439],{"id":110438},"viewer-窗口打不开","viewer 窗口打不开",[19,110441,110442],{},"安装:",[99,110444,110446],{"className":24996,"code":110445,"language":24998,"meta":104,"style":104},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[106,110447,110448],{"__ignoreMap":104},[109,110449,110450,110452,110454,110456,110458,110460,110462,110464,110466,110468,110470],{"class":111,"line":112},[109,110451,25751],{"class":211},[109,110453,27490],{"class":278},[109,110455,25008],{"class":278},[109,110457,27575],{"class":133},[109,110459,103681],{"class":278},[109,110461,102009],{"class":278},[109,110463,103686],{"class":278},[109,110465,102022],{"class":278},[109,110467,102028],{"class":278},[109,110469,102019],{"class":278},[109,110471,110472],{"class":278}," libXinerama\n",[51,110474,110476],{"id":110475},"glfwerror",[106,110477,110478],{},"GLFWError",[19,110480,110481],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[51,110483,110485],{"id":110484},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110487,110488,110489,83714,110491,110493],{},"尝试 ",[106,110490,102212],{},[106,110492,102215],{},"。可能存在版本差异。",[51,110495,110496],{"id":110496},"保存图片是黑的",[19,110498,103750],{},[765,110500,110501,110504,110507,110517],{},[30,110502,110503],{},"XML 里是否有 light。",[30,110505,110506],{},"相机是否对着模型。",[30,110508,110509,110510,110513,110514,29560],{},"是否先 ",[106,110511,110512],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[106,110515,110516],{},"renderer.render()",[30,110518,110519],{},"物体是否已经掉出视野。",[51,110521,110522],{"id":110522},"远程服务器没有显示器",[19,110524,110525],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[99,110527,110528],{"className":24996,"code":110368,"language":24998,"meta":104,"style":104},[106,110529,110530],{"__ignoreMap":104},[109,110531,110532,110534,110536,110538,110540],{"class":111,"line":112},[109,110533,108989],{"class":126},[109,110535,130],{"class":122},[109,110537,108979],{"class":278},[109,110539,110381],{"class":211},[109,110541,109800],{"class":278},[19,110543,110544],{},"如果 EGL 不可用，再尝试：",[99,110546,110547],{"className":24996,"code":110388,"language":24998,"meta":104,"style":104},[106,110548,110549],{"__ignoreMap":104},[109,110550,110551,110553,110555,110557,110559],{"class":111,"line":112},[109,110552,108989],{"class":126},[109,110554,130],{"class":122},[109,110556,108983],{"class":278},[109,110558,110381],{"class":211},[109,110560,109800],{"class":278},[14,110562,103782],{"id":103781},[19,110564,110565],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[765,110567,110568,110571,110574],{},[30,110569,110570],{},"先用 viewer 看模型和控制是否正常。",[30,110572,110573],{},"再用 renderer 保存图片或构造视觉观测。",[30,110575,110576],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1467,110578,110579],{},"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":104,"searchDepth":119,"depth":119,"links":110581},[110582,110583,110584,110589,110594,110595,110596,110603],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":110585},[110586,110587,110588],{"id":109086,"depth":140,"text":109087},{"id":109116,"depth":140,"text":109117},{"id":109151,"depth":140,"text":109152},{"id":102427,"depth":119,"text":102428,"children":110590},[110591,110592,110593],{"id":102747,"depth":140,"text":102747},{"id":109896,"depth":140,"text":109897},{"id":110074,"depth":140,"text":110075},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":110597},[110598,110599,110600,110601,110602],{"id":110438,"depth":140,"text":110439},{"id":110475,"depth":140,"text":110478},{"id":110484,"depth":140,"text":110485},{"id":110496,"depth":140,"text":110496},{"id":110522,"depth":140,"text":110522},{"id":103781,"depth":119,"text":103782},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108694,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110610,"title":110611,"body":110612,"description":104,"extension":1476,"meta":112523,"navigation":157,"path":112524,"seo":112525,"stem":112526,"__hash__":112527},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110613,"toc":112499},[110614,110617,110619,110622,110624,110643,110646,110652,110655,110657,110659,110683,110685,110699,110701,110742,110744,110755,110757,110760,110766,110769,110803,110806,110838,110841,110873,110877,110880,110920,110923,110929,110932,110938,110942,110945,110951,110954,110958,110961,111001,111003,111016,111019,111021,111603,111605,111617,111620,111631,111633,111636,111655,111667,111670,111691,111694,111697,111740,111743,111746,111766,111773,111775,111793,111808,111811,111817,111820,111826,111843,111850,111881,111892,111926,111937,111954,111963,111971,111976,111990,111993,112014,112020,112034,112039,112069,112079,112104,112112,112135,112138,112154,112157,112165,112171,112193,112206,112227,112236,112275,112286,112288,112291,112297,112300,112303,112309,112312,112332,112335,112337,112376,112378,112381,112389,112392,112395,112422,112425,112435,112441,112444,112450,112452,112458,112462,112465,112467,112470,112494,112497],[10,110615,110611],{"id":110616},"_6控制任务cartpole",[14,110618,101822],{"id":101821},[19,110620,110621],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110623,105506],{},[765,110625,110626,110629,110631,110634,110637,110640],{},[30,110627,110628],{},"slide joint",[30,110630,107359],{},[30,110632,110633],{},"cart force actuator",[30,110635,110636],{},"状态观测",[30,110638,110639],{},"简单控制循环",[30,110641,110642],{},"reward 设计雏形",[19,110644,110645],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[99,110647,110650],{"className":110648,"code":110649,"language":6524,"meta":104},[6522],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[106,110651,110649],{"__ignoreMap":104},[19,110653,110654],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110656,101945],{"id":101944},[19,110658,101948],{},[99,110660,110661],{"className":24996,"code":105563,"language":24998,"meta":104,"style":104},[106,110662,110663],{"__ignoreMap":104},[109,110664,110665,110667,110669,110671,110673,110675,110677,110679,110681],{"class":111,"line":112},[109,110666,25751],{"class":211},[109,110668,27490],{"class":278},[109,110670,25008],{"class":278},[109,110672,27575],{"class":133},[109,110674,105578],{"class":278},[109,110676,101973],{"class":278},[109,110678,103676],{"class":278},[109,110680,101989],{"class":278},[109,110682,105587],{"class":278},[19,110684,103994],{},[99,110686,110687],{"className":24996,"code":102094,"language":24998,"meta":104,"style":104},[106,110688,110689],{"__ignoreMap":104},[109,110690,110691,110693,110695,110697],{"class":111,"line":112},[109,110692,25005],{"class":211},[109,110694,25008],{"class":278},[109,110696,102105],{"class":278},[109,110698,102108],{"class":278},[19,110700,104011],{},[99,110702,110704],{"className":24996,"code":110703,"language":24998,"meta":104,"style":104},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[106,110705,110706,110723,110732],{"__ignoreMap":104},[109,110707,110708,110710,110712,110714,110717,110719,110721],{"class":111,"line":112},[109,110709,31505],{"class":211},[109,110711,30351],{"class":278},[109,110713,26290],{"class":133},[109,110715,110716],{"class":278}," mujoco-cartpole",[109,110718,102150],{"class":278},[109,110720,102153],{"class":133},[109,110722,102156],{"class":133},[109,110724,110725,110727,110729],{"class":111,"line":119},[109,110726,31505],{"class":211},[109,110728,102163],{"class":278},[109,110730,110731],{"class":278}," mujoco-cartpole\n",[109,110733,110734,110736,110738,110740],{"class":111,"line":140},[109,110735,25005],{"class":211},[109,110737,25008],{"class":278},[109,110739,102105],{"class":278},[109,110741,102108],{"class":278},[19,110743,102179],{},[765,110745,110746,110749,110752],{},[30,110747,110748],{},"本章不依赖 Gymnasium。",[30,110750,110751],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[30,110753,110754],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110756,102220],{"id":102219},[19,110758,110759],{},"Cartpole 的模型结构:",[99,110761,110764],{"className":110762,"code":110763,"language":6524,"meta":104},[6522],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[106,110765,110763],{"__ignoreMap":104},[19,110767,110768],{},"小车通过 slide joint 左右移动:",[99,110770,110772],{"className":54242,"code":110771,"language":54244,"meta":104,"style":104},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[106,110773,110774],{"__ignoreMap":104},[109,110775,110776,110778,110780,110782,110784,110787,110789,110791,110794,110796,110798,110801],{"class":111,"line":112},[109,110777,1320],{"class":126},[109,110779,104131],{"class":52475},[109,110781,16093],{"class":211},[109,110783,130],{"class":126},[109,110785,110786],{"class":278},"\"cart_x\"",[109,110788,54999],{"class":211},[109,110790,130],{"class":126},[109,110792,110793],{"class":278},"\"slide\"",[109,110795,107203],{"class":211},[109,110797,130],{"class":126},[109,110799,110800],{"class":278},"\"1 0 0\"",[109,110802,102319],{"class":126},[19,110804,110805],{},"杆子通过 hinge joint 旋转:",[99,110807,110809],{"className":54242,"code":110808,"language":54244,"meta":104,"style":104},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[106,110810,110811],{"__ignoreMap":104},[109,110812,110813,110815,110817,110819,110821,110824,110826,110828,110830,110832,110834,110836],{"class":111,"line":112},[109,110814,1320],{"class":126},[109,110816,104131],{"class":52475},[109,110818,16093],{"class":211},[109,110820,130],{"class":126},[109,110822,110823],{"class":278},"\"pole_hinge\"",[109,110825,54999],{"class":211},[109,110827,130],{"class":126},[109,110829,107194],{"class":278},[109,110831,107203],{"class":211},[109,110833,130],{"class":126},[109,110835,107208],{"class":278},[109,110837,102319],{"class":126},[19,110839,110840],{},"控制力作用在小车 slide joint 上:",[99,110842,110844],{"className":54242,"code":110843,"language":54244,"meta":104,"style":104},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[106,110845,110846],{"__ignoreMap":104},[109,110847,110848,110850,110852,110854,110856,110859,110861,110863,110865,110867,110869,110871],{"class":111,"line":112},[109,110849,1320],{"class":126},[109,110851,107249],{"class":52475},[109,110853,16093],{"class":211},[109,110855,130],{"class":126},[109,110857,110858],{"class":278},"\"cart_motor\"",[109,110860,107259],{"class":211},[109,110862,130],{"class":126},[109,110864,110786],{"class":278},[109,110866,107266],{"class":211},[109,110868,130],{"class":126},[109,110870,55491],{"class":278},[109,110872,102319],{"class":126},[51,110874,110876],{"id":110875},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110878,110879],{},"这个简化模型有两个关节：",[1677,110881,110882,110893],{},[1680,110883,110884],{},[1683,110885,110886,110888,110890],{},[1686,110887,103934],{"align":24910},[1686,110889,24911],{"align":24910},[1686,110891,110892],{"align":24910},"对应状态",[1723,110894,110895,110908],{},[1683,110896,110897,110902,110905],{},[1728,110898,110899],{"align":24910},[106,110900,110901],{},"cart_x",[1728,110903,110904],{"align":24910},"slide",[1728,110906,110907],{"align":24910},"小车 x 位置",[1683,110909,110910,110915,110917],{},[1728,110911,110912],{"align":24910},[106,110913,110914],{},"pole_hinge",[1728,110916,107015],{"align":24910},[1728,110918,110919],{"align":24910},"杆子角度",[19,110921,110922],{},"所以：",[99,110924,110927],{"className":110925,"code":110926,"language":6524,"meta":104},[6522],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[106,110928,110926],{"__ignoreMap":104},[19,110930,110931],{},"把它们拼起来就是观测：",[99,110933,110936],{"className":110934,"code":110935,"language":6524,"meta":104},[6522],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[106,110937,110935],{"__ignoreMap":104},[51,110939,110941],{"id":110940},"action-是什么","action 是什么",[19,110943,110944],{},"本章只有一个 actuator：",[99,110946,110949],{"className":110947,"code":110948,"language":6524,"meta":104},[6522],"data.ctrl[0] = action\n",[106,110950,110948],{"__ignoreMap":104},[19,110952,110953],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[51,110955,110957],{"id":110956},"reward-是什么","reward 是什么",[19,110959,110960],{},"奖励函数：",[99,110962,110964],{"className":31553,"code":110963,"language":31555,"meta":104,"style":104},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[106,110965,110966],{"__ignoreMap":104},[109,110967,110968,110970,110973,110975,110977,110979,110982,110984,110987,110989,110991,110993,110996,110998],{"class":111,"line":112},[109,110969,18219],{"class":122},[109,110971,110972],{"class":133}," float",[109,110974,714],{"class":126},[109,110976,103578],{"class":133},[109,110978,53446],{"class":122},[109,110980,110981],{"class":133}," 0.1",[109,110983,797],{"class":122},[109,110985,110986],{"class":126}," cart_x ",[109,110988,1988],{"class":122},[109,110990,110986],{"class":126},[109,110992,2064],{"class":122},[109,110994,110995],{"class":126}," pole_angle ",[109,110997,1988],{"class":122},[109,110999,111000],{"class":126}," pole_angle)\n",[19,111002,107401],{},[765,111004,111005,111010,111013],{},[30,111006,111007,111008,29560],{},"基础奖励是 ",[106,111009,103578],{},[30,111011,111012],{},"小车离中心越远，扣分越多。",[30,111014,111015],{},"杆子角度越大，扣分越多。",[19,111017,111018],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111020,102428],{"id":102427},[99,111022,111024],{"className":31553,"code":111023,"language":31555,"meta":104,"style":104},"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",[106,111025,111026,111032,111042,111046,111050,111058,111063,111067,111071,111075,111080,111084,111089,111094,111099,111103,111108,111113,111118,111122,111126,111130,111134,111138,111143,111147,111151,111155,111159,111163,111173,111180,111184,111188,111202,111216,111229,111259,111263,111267,111279,111291,111299,111303,111316,111320,111324,111333,111337,111353,111363,111376,111389,111393,111416,111434,111438,111450,111454,111458,111468,111478,111482,111498,111539,111543,111563,111579,111583,111587,111599],{"__ignoreMap":104},[109,111027,111028,111030],{"class":111,"line":112},[109,111029,31567],{"class":122},[109,111031,102476],{"class":126},[109,111033,111034,111036,111038,111040],{"class":111,"line":119},[109,111035,31567],{"class":122},[109,111037,32555],{"class":126},[109,111039,32558],{"class":122},[109,111041,32561],{"class":126},[109,111043,111044],{"class":111,"line":140},[109,111045,158],{"emptyLinePlaceholder":157},[109,111047,111048],{"class":111,"line":154},[109,111049,158],{"emptyLinePlaceholder":157},[109,111051,111052,111054,111056],{"class":111,"line":161},[109,111053,102489],{"class":133},[109,111055,14737],{"class":122},[109,111057,102494],{"class":278},[109,111059,111060],{"class":111,"line":167},[109,111061,111062],{"class":278},"\u003Cmujoco model=\"cartpole\">\n",[109,111064,111065],{"class":111,"line":185},[109,111066,102504],{"class":278},[109,111068,111069],{"class":111,"line":201},[109,111070,158],{"emptyLinePlaceholder":157},[109,111072,111073],{"class":111,"line":206},[109,111074,102513],{"class":278},[109,111076,111077],{"class":111,"line":218},[109,111078,111079],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[109,111081,111082],{"class":111,"line":223},[109,111083,158],{"emptyLinePlaceholder":157},[109,111085,111086],{"class":111,"line":229},[109,111087,111088],{"class":278},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[109,111090,111091],{"class":111,"line":244},[109,111092,111093],{"class":278},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[109,111095,111096],{"class":111,"line":258},[109,111097,111098],{"class":278},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[109,111100,111101],{"class":111,"line":263},[109,111102,158],{"emptyLinePlaceholder":157},[109,111104,111105],{"class":111,"line":269},[109,111106,111107],{"class":278},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[109,111109,111110],{"class":111,"line":304},[109,111111,111112],{"class":278},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[109,111114,111115],{"class":111,"line":331},[109,111116,111117],{"class":278},"        \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",[109,111119,111120],{"class":111,"line":336},[109,111121,107613],{"class":278},[109,111123,111124],{"class":111,"line":364},[109,111125,102542],{"class":278},[109,111127,111128],{"class":111,"line":391},[109,111129,102547],{"class":278},[109,111131,111132],{"class":111,"line":396},[109,111133,158],{"emptyLinePlaceholder":157},[109,111135,111136],{"class":111,"line":402},[109,111137,107630],{"class":278},[109,111139,111140],{"class":111,"line":419},[109,111141,111142],{"class":278},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[109,111144,111145],{"class":111,"line":435},[109,111146,107640],{"class":278},[109,111148,111149],{"class":111,"line":440},[109,111150,102552],{"class":278},[109,111152,111153],{"class":111,"line":467},[109,111154,96873],{"class":278},[109,111156,111157],{"class":111,"line":494},[109,111158,158],{"emptyLinePlaceholder":157},[109,111160,111161],{"class":111,"line":499},[109,111162,158],{"emptyLinePlaceholder":157},[109,111164,111165,111167,111170],{"class":111,"line":526},[109,111166,33122],{"class":122},[109,111168,111169],{"class":211}," get_observation",[109,111171,111172],{"class":126},"(data: mujoco.MjData) -> np.ndarray:\n",[109,111174,111175,111177],{"class":111,"line":552},[109,111176,731],{"class":122},[109,111178,111179],{"class":126}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[109,111181,111182],{"class":111,"line":557},[109,111183,158],{"emptyLinePlaceholder":157},[109,111185,111186],{"class":111,"line":584},[109,111187,158],{"emptyLinePlaceholder":157},[109,111189,111190,111192,111195,111198,111200],{"class":111,"line":611},[109,111191,33122],{"class":122},[109,111193,111194],{"class":211}," compute_reward",[109,111196,111197],{"class":126},"(obs: np.ndarray) -> ",[109,111199,1584],{"class":133},[109,111201,5082],{"class":126},[109,111203,111204,111207,111209,111212,111214],{"class":111,"line":616},[109,111205,111206],{"class":126},"    cart_x ",[109,111208,130],{"class":122},[109,111210,111211],{"class":126}," obs[",[109,111213,1314],{"class":133},[109,111215,34421],{"class":126},[109,111217,111218,111221,111223,111225,111227],{"class":111,"line":633},[109,111219,111220],{"class":126},"    pole_angle ",[109,111222,130],{"class":122},[109,111224,111211],{"class":126},[109,111226,1755],{"class":133},[109,111228,34421],{"class":126},[109,111230,111231,111233,111235,111237,111239,111241,111243,111245,111247,111249,111251,111253,111255,111257],{"class":111,"line":649},[109,111232,731],{"class":122},[109,111234,110972],{"class":133},[109,111236,714],{"class":126},[109,111238,103578],{"class":133},[109,111240,53446],{"class":122},[109,111242,110981],{"class":133},[109,111244,797],{"class":122},[109,111246,110986],{"class":126},[109,111248,1988],{"class":122},[109,111250,110986],{"class":126},[109,111252,2064],{"class":122},[109,111254,110995],{"class":126},[109,111256,1988],{"class":122},[109,111258,111000],{"class":126},[109,111260,111261],{"class":111,"line":676},[109,111262,158],{"emptyLinePlaceholder":157},[109,111264,111265],{"class":111,"line":703},[109,111266,158],{"emptyLinePlaceholder":157},[109,111268,111269,111271,111273,111275,111277],{"class":111,"line":708},[109,111270,33122],{"class":122},[109,111272,212],{"class":211},[109,111274,102573],{"class":126},[109,111276,96861],{"class":133},[109,111278,5082],{"class":126},[109,111280,111281,111283,111285,111287,111289],{"class":111,"line":723},[109,111282,102582],{"class":126},[109,111284,130],{"class":122},[109,111286,102587],{"class":126},[109,111288,102489],{"class":133},[109,111290,1330],{"class":126},[109,111292,111293,111295,111297],{"class":111,"line":728},[109,111294,102596],{"class":126},[109,111296,130],{"class":122},[109,111298,102601],{"class":126},[109,111300,111301],{"class":111,"line":739},[109,111302,158],{"emptyLinePlaceholder":157},[109,111304,111305,111307,111309,111311,111313],{"class":111,"line":9352},[109,111306,106244],{"class":126},[109,111308,1755],{"class":133},[109,111310,5780],{"class":126},[109,111312,130],{"class":122},[109,111314,111315],{"class":133}," 0.1\n",[109,111317,111318],{"class":111,"line":9364},[109,111319,106257],{"class":126},[109,111321,111322],{"class":111,"line":9376},[109,111323,158],{"emptyLinePlaceholder":157},[109,111325,111326,111329,111331],{"class":111,"line":11034},[109,111327,111328],{"class":126},"    total_reward ",[109,111330,130],{"class":122},[109,111332,105936],{"class":133},[109,111334,111335],{"class":111,"line":11059},[109,111336,158],{"emptyLinePlaceholder":157},[109,111338,111339,111341,111343,111345,111347,111349,111351],{"class":111,"line":11082},[109,111340,1302],{"class":122},[109,111342,32791],{"class":126},[109,111344,27218],{"class":122},[109,111346,33618],{"class":133},[109,111348,714],{"class":126},[109,111350,7740],{"class":133},[109,111352,31961],{"class":126},[109,111354,111355,111358,111360],{"class":111,"line":11106},[109,111356,111357],{"class":126},"        obs ",[109,111359,130],{"class":122},[109,111361,111362],{"class":126}," get_observation(data)\n",[109,111364,111365,111368,111370,111372,111374],{"class":111,"line":11111},[109,111366,111367],{"class":126},"        pole_angle ",[109,111369,130],{"class":122},[109,111371,111211],{"class":126},[109,111373,1755],{"class":133},[109,111375,34421],{"class":126},[109,111377,111378,111381,111383,111385,111387],{"class":111,"line":11116},[109,111379,111380],{"class":126},"        pole_angular_velocity ",[109,111382,130],{"class":122},[109,111384,111211],{"class":126},[109,111386,1612],{"class":133},[109,111388,34421],{"class":126},[109,111390,111391],{"class":111,"line":11121},[109,111392,158],{"emptyLinePlaceholder":157},[109,111394,111395,111398,111400,111403,111405,111407,111409,111411,111413],{"class":111,"line":11130},[109,111396,111397],{"class":126},"        action ",[109,111399,130],{"class":122},[109,111401,111402],{"class":133}," 2.0",[109,111404,797],{"class":122},[109,111406,110995],{"class":126},[109,111408,1348],{"class":122},[109,111410,63042],{"class":133},[109,111412,797],{"class":122},[109,111414,111415],{"class":126}," pole_angular_velocity\n",[109,111417,111418,111420,111422,111424,111426,111428,111430,111432],{"class":111,"line":11135},[109,111419,111397],{"class":126},[109,111421,130],{"class":122},[109,111423,108622],{"class":126},[109,111425,2064],{"class":122},[109,111427,103578],{"class":133},[109,111429,13608],{"class":126},[109,111431,103578],{"class":133},[109,111433,1330],{"class":126},[109,111435,111436],{"class":111,"line":11141},[109,111437,158],{"emptyLinePlaceholder":157},[109,111439,111440,111442,111444,111446,111448],{"class":111,"line":11162},[109,111441,107792],{"class":126},[109,111443,1314],{"class":133},[109,111445,5780],{"class":126},[109,111447,130],{"class":122},[109,111449,108645],{"class":126},[109,111451,111452],{"class":111,"line":11168},[109,111453,102691],{"class":126},[109,111455,111456],{"class":111,"line":11182},[109,111457,158],{"emptyLinePlaceholder":157},[109,111459,111460,111463,111465],{"class":111,"line":11188},[109,111461,111462],{"class":126},"        reward ",[109,111464,130],{"class":122},[109,111466,111467],{"class":126}," compute_reward(get_observation(data))\n",[109,111469,111470,111473,111475],{"class":111,"line":11215},[109,111471,111472],{"class":126},"        total_reward ",[109,111474,10795],{"class":122},[109,111476,111477],{"class":126}," reward\n",[109,111479,111480],{"class":111,"line":11224},[109,111481,158],{"emptyLinePlaceholder":157},[109,111483,111484,111486,111488,111490,111492,111494,111496],{"class":111,"line":11230},[109,111485,3852],{"class":122},[109,111487,32791],{"class":126},[109,111489,1865],{"class":122},[109,111491,7085],{"class":133},[109,111493,102734],{"class":122},[109,111495,734],{"class":133},[109,111497,5082],{"class":126},[109,111499,111500,111502,111504,111507,111510,111513,111516,111518,111521,111524,111526,111528,111530,111532,111535,111537],{"class":111,"line":11238},[109,111501,35825],{"class":133},[109,111503,714],{"class":126},[109,111505,111506],{"class":278},"\"step:\"",[109,111508,111509],{"class":126},", step, ",[109,111511,111512],{"class":278},"\"obs:\"",[109,111514,111515],{"class":126},", np.round(obs, ",[109,111517,1612],{"class":133},[109,111519,111520],{"class":126},"), ",[109,111522,111523],{"class":278},"\"action:\"",[109,111525,13608],{"class":126},[109,111527,33193],{"class":133},[109,111529,714],{"class":126},[109,111531,1584],{"class":133},[109,111533,111534],{"class":126},"(action), ",[109,111536,1612],{"class":133},[109,111538,31672],{"class":126},[109,111540,111541],{"class":111,"line":11243},[109,111542,158],{"emptyLinePlaceholder":157},[109,111544,111545,111547,111549,111552,111554,111556,111559,111561],{"class":111,"line":17777},[109,111546,32474],{"class":133},[109,111548,714],{"class":126},[109,111550,111551],{"class":278},"\"total_reward:\"",[109,111553,13608],{"class":126},[109,111555,33193],{"class":133},[109,111557,111558],{"class":126},"(total_reward, ",[109,111560,1612],{"class":133},[109,111562,31672],{"class":126},[109,111564,111565,111567,111569,111572,111575,111577],{"class":111,"line":17783},[109,111566,32474],{"class":133},[109,111568,714],{"class":126},[109,111570,111571],{"class":278},"\"final obs:\"",[109,111573,111574],{"class":126},", np.round(get_observation(data), ",[109,111576,1612],{"class":133},[109,111578,31672],{"class":126},[109,111580,111581],{"class":111,"line":17806},[109,111582,158],{"emptyLinePlaceholder":157},[109,111584,111585],{"class":111,"line":17812},[109,111586,158],{"emptyLinePlaceholder":157},[109,111588,111589,111591,111593,111595,111597],{"class":111,"line":17835},[109,111590,2922],{"class":122},[109,111592,32395],{"class":133},[109,111594,102734],{"class":122},[109,111596,102737],{"class":278},[109,111598,5082],{"class":126},[109,111600,111601],{"class":111,"line":17849},[109,111602,102744],{"class":126},[19,111604,104745],{},[99,111606,111608],{"className":24996,"code":111607,"language":24998,"meta":104,"style":104},"touch ch6_cartpole.py\n",[106,111609,111610],{"__ignoreMap":104},[109,111611,111612,111614],{"class":111,"line":112},[109,111613,102458],{"class":211},[109,111615,111616],{"class":278}," ch6_cartpole.py\n",[19,111618,111619],{},"运行：",[99,111621,111623],{"className":24996,"code":111622,"language":24998,"meta":104,"style":104},"python ch6_cartpole.py\n",[106,111624,111625],{"__ignoreMap":104},[109,111626,111627,111629],{"class":111,"line":112},[109,111628,31555],{"class":211},[109,111630,111616],{"class":278},[51,111632,102747],{"id":102747},[19,111634,111635],{},"构造观测：",[99,111637,111639],{"className":31553,"code":111638,"language":31555,"meta":104,"style":104},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[106,111640,111641,111649],{"__ignoreMap":104},[109,111642,111643,111645,111647],{"class":111,"line":112},[109,111644,33122],{"class":122},[109,111646,111169],{"class":211},[109,111648,111172],{"class":126},[109,111650,111651,111653],{"class":111,"line":119},[109,111652,731],{"class":122},[109,111654,111179],{"class":126},[19,111656,111657,111660,111661,111663,111664,111666],{},[106,111658,111659],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[106,111662,105205],{}," 2 维，",[106,111665,105535],{}," 2 维，所以 obs 是 4 维。",[19,111668,111669],{},"设置初始角度：",[99,111671,111673],{"className":31553,"code":111672,"language":31555,"meta":104,"style":104},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[106,111674,111675,111687],{"__ignoreMap":104},[109,111676,111677,111679,111681,111683,111685],{"class":111,"line":112},[109,111678,105874],{"class":126},[109,111680,1755],{"class":133},[109,111682,5780],{"class":126},[109,111684,130],{"class":122},[109,111686,111315],{"class":133},[109,111688,111689],{"class":111,"line":119},[109,111690,105718],{"class":126},[19,111692,111693],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111695,111696],{},"简单反馈控制：",[99,111698,111700],{"className":31553,"code":111699,"language":31555,"meta":104,"style":104},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[106,111701,111702,111722],{"__ignoreMap":104},[109,111703,111704,111706,111708,111710,111712,111714,111716,111718,111720],{"class":111,"line":112},[109,111705,108617],{"class":126},[109,111707,130],{"class":122},[109,111709,111402],{"class":133},[109,111711,797],{"class":122},[109,111713,110995],{"class":126},[109,111715,1348],{"class":122},[109,111717,63042],{"class":133},[109,111719,797],{"class":122},[109,111721,111415],{"class":126},[109,111723,111724,111726,111728,111730,111732,111734,111736,111738],{"class":111,"line":119},[109,111725,108617],{"class":126},[109,111727,130],{"class":122},[109,111729,108622],{"class":126},[109,111731,2064],{"class":122},[109,111733,103578],{"class":133},[109,111735,13608],{"class":126},[109,111737,103578],{"class":133},[109,111739,1330],{"class":126},[19,111741,111742],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111744,111745],{},"限制动作：",[99,111747,111749],{"className":31553,"code":111748,"language":31555,"meta":104,"style":104},"np.clip(action, -1.0, 1.0)\n",[106,111750,111751],{"__ignoreMap":104},[109,111752,111753,111756,111758,111760,111762,111764],{"class":111,"line":112},[109,111754,111755],{"class":126},"np.clip(action, ",[109,111757,2064],{"class":122},[109,111759,103578],{"class":133},[109,111761,13608],{"class":126},[109,111763,103578],{"class":133},[109,111765,1330],{"class":126},[19,111767,111768,111769,111772],{},"因为 XML 里 ",[106,111770,111771],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[51,111774,102883],{"id":102883},[99,111776,111777],{"className":31553,"code":111638,"language":31555,"meta":104,"style":104},[106,111778,111779,111787],{"__ignoreMap":104},[109,111780,111781,111783,111785],{"class":111,"line":112},[109,111782,33122],{"class":122},[109,111784,111169],{"class":211},[109,111786,111172],{"class":126},[109,111788,111789,111791],{"class":111,"line":119},[109,111790,731],{"class":122},[109,111792,111179],{"class":126},[19,111794,111795,111796,111799,111800,111803,111804,111807],{},"这段定义了一个函数，用来获取当前观测。",[106,111797,111798],{},"data.qpos.copy()"," 是位置数组副本，",[106,111801,111802],{},"data.qvel.copy()"," 是速度数组副本。",[106,111805,111806],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111809,111810],{},"在本章模型里：",[99,111812,111815],{"className":111813,"code":111814,"language":6524,"meta":104},[6522],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[106,111816,111814],{"__ignoreMap":104},[19,111818,111819],{},"所以返回的 obs 是：",[99,111821,111824],{"className":111822,"code":111823,"language":6524,"meta":104},[6522],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[106,111825,111823],{"__ignoreMap":104},[99,111827,111829],{"className":31553,"code":111828,"language":31555,"meta":104,"style":104},"def compute_reward(obs: np.ndarray) -> float:\n",[106,111830,111831],{"__ignoreMap":104},[109,111832,111833,111835,111837,111839,111841],{"class":111,"line":112},[109,111834,33122],{"class":122},[109,111836,111194],{"class":211},[109,111838,111197],{"class":126},[109,111840,1584],{"class":133},[109,111842,5082],{"class":126},[19,111844,111845,111846,111849],{},"这行定义奖励函数。输入是观测 ",[106,111847,111848],{},"obs","，输出是一个浮点数奖励。",[99,111851,111853],{"className":31553,"code":111852,"language":31555,"meta":104,"style":104},"cart_x = obs[0]\npole_angle = obs[1]\n",[106,111854,111855,111868],{"__ignoreMap":104},[109,111856,111857,111860,111862,111864,111866],{"class":111,"line":112},[109,111858,111859],{"class":126},"cart_x ",[109,111861,130],{"class":122},[109,111863,111211],{"class":126},[109,111865,1314],{"class":133},[109,111867,34421],{"class":126},[109,111869,111870,111873,111875,111877,111879],{"class":111,"line":119},[109,111871,111872],{"class":126},"pole_angle ",[109,111874,130],{"class":122},[109,111876,111211],{"class":126},[109,111878,1755],{"class":133},[109,111880,34421],{"class":126},[19,111882,111883,111884,111887,111888,111891],{},"数组索引从 0 开始。",[106,111885,111886],{},"obs[0]"," 是第一个元素，也就是小车位置。",[106,111889,111890],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[99,111893,111894],{"className":31553,"code":110963,"language":31555,"meta":104,"style":104},[106,111895,111896],{"__ignoreMap":104},[109,111897,111898,111900,111902,111904,111906,111908,111910,111912,111914,111916,111918,111920,111922,111924],{"class":111,"line":112},[109,111899,18219],{"class":122},[109,111901,110972],{"class":133},[109,111903,714],{"class":126},[109,111905,103578],{"class":133},[109,111907,53446],{"class":122},[109,111909,110981],{"class":133},[109,111911,797],{"class":122},[109,111913,110986],{"class":126},[109,111915,1988],{"class":122},[109,111917,110986],{"class":126},[109,111919,2064],{"class":122},[109,111921,110995],{"class":126},[109,111923,1988],{"class":122},[109,111925,111000],{"class":126},[19,111927,111928,111929,111932,111933,111936],{},"这行计算奖励。",[106,111930,111931],{},"cart_x * cart_x"," 是小车位置的平方，",[106,111934,111935],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[99,111938,111940],{"className":31553,"code":111939,"language":31555,"meta":104,"style":104},"data.qpos[1] = 0.1\n",[106,111941,111942],{"__ignoreMap":104},[109,111943,111944,111946,111948,111950,111952],{"class":111,"line":112},[109,111945,105874],{"class":126},[109,111947,1755],{"class":133},[109,111949,5780],{"class":126},[109,111951,130],{"class":122},[109,111953,111315],{"class":133},[19,111955,111956,111957,111959,111960,111962],{},"手动设置杆子的初始角度。因为 ",[106,111958,106631],{}," 是小车位置，",[106,111961,106634],{}," 是杆子角度，所以这里改的是杆子。",[99,111964,111965],{"className":31553,"code":105718,"language":31555,"meta":104,"style":104},[106,111966,111967],{"__ignoreMap":104},[109,111968,111969],{"class":111,"line":112},[109,111970,105718],{"class":126},[19,111972,106677,111973,111975],{},[106,111974,105205],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[99,111977,111979],{"className":31553,"code":111978,"language":31555,"meta":104,"style":104},"total_reward = 0.0\n",[106,111980,111981],{"__ignoreMap":104},[109,111982,111983,111986,111988],{"class":111,"line":112},[109,111984,111985],{"class":126},"total_reward ",[109,111987,130],{"class":122},[109,111989,105936],{"class":133},[19,111991,111992],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[99,111994,111996],{"className":31553,"code":111995,"language":31555,"meta":104,"style":104},"for step in range(1000):\n",[106,111997,111998],{"__ignoreMap":104},[109,111999,112000,112002,112004,112006,112008,112010,112012],{"class":111,"line":112},[109,112001,4372],{"class":122},[109,112003,32791],{"class":126},[109,112005,27218],{"class":122},[109,112007,33618],{"class":133},[109,112009,714],{"class":126},[109,112011,7740],{"class":133},[109,112013,31961],{"class":126},[19,112015,112016,112017,112019],{},"循环 1000 步。",[106,112018,108309],{}," 是当前步数，从 0 到 999。",[99,112021,112023],{"className":31553,"code":112022,"language":31555,"meta":104,"style":104},"obs = get_observation(data)\n",[106,112024,112025],{"__ignoreMap":104},[109,112026,112027,112030,112032],{"class":111,"line":112},[109,112028,112029],{"class":126},"obs ",[109,112031,130],{"class":122},[109,112033,111362],{"class":126},[19,112035,112036,112037,29560],{},"读取当前状态，保存到 ",[106,112038,111848],{},[99,112040,112042],{"className":31553,"code":112041,"language":31555,"meta":104,"style":104},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[106,112043,112044,112056],{"__ignoreMap":104},[109,112045,112046,112048,112050,112052,112054],{"class":111,"line":112},[109,112047,111872],{"class":126},[109,112049,130],{"class":122},[109,112051,111211],{"class":126},[109,112053,1755],{"class":133},[109,112055,34421],{"class":126},[109,112057,112058,112061,112063,112065,112067],{"class":111,"line":119},[109,112059,112060],{"class":126},"pole_angular_velocity ",[109,112062,130],{"class":122},[109,112064,111211],{"class":126},[109,112066,1612],{"class":133},[109,112068,34421],{"class":126},[19,112070,112071,112072,112075,112076,29560],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[106,112073,112074],{},"obs[3]","？因为 obs 的顺序是 ",[106,112077,112078],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[99,112080,112082],{"className":31553,"code":112081,"language":31555,"meta":104,"style":104},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[106,112083,112084],{"__ignoreMap":104},[109,112085,112086,112088,112090,112092,112094,112096,112098,112100,112102],{"class":111,"line":112},[109,112087,108617],{"class":126},[109,112089,130],{"class":122},[109,112091,111402],{"class":133},[109,112093,797],{"class":122},[109,112095,110995],{"class":126},[109,112097,1348],{"class":122},[109,112099,63042],{"class":133},[109,112101,797],{"class":122},[109,112103,111415],{"class":126},[19,112105,112106,112107,102193,112109,112111],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[106,112108,106435],{},[106,112110,36504],{}," 是人为设置的系数，不是固定公式。",[99,112113,112115],{"className":31553,"code":112114,"language":31555,"meta":104,"style":104},"action = np.clip(action, -1.0, 1.0)\n",[106,112116,112117],{"__ignoreMap":104},[109,112118,112119,112121,112123,112125,112127,112129,112131,112133],{"class":111,"line":112},[109,112120,108617],{"class":126},[109,112122,130],{"class":122},[109,112124,108622],{"class":126},[109,112126,2064],{"class":122},[109,112128,103578],{"class":133},[109,112130,13608],{"class":126},[109,112132,103578],{"class":133},[109,112134,1330],{"class":126},[19,112136,112137],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[99,112139,112140],{"className":31553,"code":110948,"language":31555,"meta":104,"style":104},[106,112141,112142],{"__ignoreMap":104},[109,112143,112144,112146,112148,112150,112152],{"class":111,"line":112},[109,112145,107046],{"class":126},[109,112147,1314],{"class":133},[109,112149,5780],{"class":126},[109,112151,130],{"class":122},[109,112153,108645],{"class":126},[19,112155,112156],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[99,112158,112159],{"className":31553,"code":105680,"language":31555,"meta":104,"style":104},[106,112160,112161],{"__ignoreMap":104},[109,112162,112163],{"class":111,"line":112},[109,112164,105680],{"class":126},[19,112166,112167,112168,112170],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[106,112169,107301],{}," 计算小车和杆子的下一刻状态。",[99,112172,112174],{"className":31553,"code":112173,"language":31555,"meta":104,"style":104},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[106,112175,112176,112185],{"__ignoreMap":104},[109,112177,112178,112181,112183],{"class":111,"line":112},[109,112179,112180],{"class":126},"reward ",[109,112182,130],{"class":122},[109,112184,111467],{"class":126},[109,112186,112187,112189,112191],{"class":111,"line":119},[109,112188,111985],{"class":126},[109,112190,10795],{"class":122},[109,112192,111477],{"class":126},[19,112194,112195,112196,112198,112199,112202,112203,29560],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[106,112197,10795],{}," 是简写，",[106,112200,112201],{},"total_reward += reward"," 等价于 ",[106,112204,112205],{},"total_reward = total_reward + reward",[99,112207,112209],{"className":31553,"code":112208,"language":31555,"meta":104,"style":104},"if step % 100 == 0:\n",[106,112210,112211],{"__ignoreMap":104},[109,112212,112213,112215,112217,112219,112221,112223,112225],{"class":111,"line":112},[109,112214,2922],{"class":122},[109,112216,32791],{"class":126},[109,112218,1865],{"class":122},[109,112220,7085],{"class":133},[109,112222,102734],{"class":122},[109,112224,734],{"class":133},[109,112226,5082],{"class":126},[19,112228,112229,112231,112232,112235],{},[106,112230,1865],{}," 是取余数。",[106,112233,112234],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[99,112237,112239],{"className":31553,"code":112238,"language":31555,"meta":104,"style":104},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[106,112240,112241],{"__ignoreMap":104},[109,112242,112243,112245,112247,112249,112251,112253,112255,112257,112259,112261,112263,112265,112267,112269,112271,112273],{"class":111,"line":112},[109,112244,31590],{"class":133},[109,112246,714],{"class":126},[109,112248,111506],{"class":278},[109,112250,111509],{"class":126},[109,112252,111512],{"class":278},[109,112254,111515],{"class":126},[109,112256,1612],{"class":133},[109,112258,111520],{"class":126},[109,112260,111523],{"class":278},[109,112262,13608],{"class":126},[109,112264,33193],{"class":133},[109,112266,714],{"class":126},[109,112268,1584],{"class":133},[109,112270,111534],{"class":126},[109,112272,1612],{"class":133},[109,112274,31672],{"class":126},[19,112276,112277,112278,112281,112282,112285],{},"打印当前步数、观测和动作。",[106,112279,112280],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[106,112283,112284],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112287,103491],{"id":103490},[19,112289,112290],{},"观测向量:",[99,112292,112295],{"className":112293,"code":112294,"language":6524,"meta":104},[6522],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[106,112296,112294],{"__ignoreMap":104},[19,112298,112299],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112301,112302],{},"每隔 100 步会打印一次：",[99,112304,112307],{"className":112305,"code":112306,"language":6524,"meta":104},[6522],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[106,112308,112306],{"__ignoreMap":104},[19,112310,112311],{},"重点观察：",[765,112313,112314,112320,112325],{},[30,112315,112316,112319],{},[106,112317,112318],{},"pole_angle"," 是否越来越大。",[30,112321,112322,112324],{},[106,112323,110901],{}," 是否跑得太远。",[30,112326,112327,112328,83714,112330,29560],{},"action 是否经常被 clip 到 ",[106,112329,105090],{},[106,112331,1755],{},[19,112333,112334],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112336,103523],{"id":103522},[765,112338,112339,112345,112348,112354,112364,112370,112373],{},[30,112340,112341,112342,29560],{},"把初始角度改为 ",[106,112343,112344],{},"data.qpos[1] = 0.3",[30,112346,112347],{},"重新运行，观察控制是否变差。",[30,112349,112350,112351,112353],{},"把 actuator ",[106,112352,108242],{}," 改小。",[30,112355,112356,112357,112360,112361,29560],{},"打印 ",[106,112358,112359],{},"model.nq, model.nv, model.nu","，应为 ",[106,112362,112363],{},"2 2 1",[30,112365,112366,112367,112369],{},"把 reward 里的 ",[106,112368,111935],{}," 系数改大，观察总奖励变化。",[30,112371,112372],{},"把控制器改成反号，观察杆子是否更容易倒。",[30,112374,112375],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112377,103628],{"id":103627},[51,112379,112380],{"id":112380},"杆子方向和预期不一致",[19,112382,103571,112383,112385,112386,112388],{},[106,112384,107414],{}," 和 capsule 的 ",[106,112387,104351],{},"，必要时用 viewer 可视化确认。",[51,112390,112391],{"id":112391},"控制器越控越倒",[19,112393,112394],{},"说明反馈符号可能反了，尝试:",[99,112396,112398],{"className":31553,"code":112397,"language":31555,"meta":104,"style":104},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[106,112399,112400],{"__ignoreMap":104},[109,112401,112402,112404,112406,112408,112410,112412,112414,112416,112418,112420],{"class":111,"line":112},[109,112403,108617],{"class":126},[109,112405,130],{"class":122},[109,112407,53446],{"class":122},[109,112409,106435],{"class":133},[109,112411,797],{"class":122},[109,112413,110995],{"class":126},[109,112415,2064],{"class":122},[109,112417,63042],{"class":133},[109,112419,797],{"class":122},[109,112421,111415],{"class":126},[51,112423,112424],{"id":112424},"小车飞走",[19,112426,112427,112428,112430,112431,112434],{},"降低 ",[106,112429,108242],{}," 或缩小 ",[106,112432,112433],{},"action"," 的 clip 范围。",[51,112436,112438,112440],{"id":112437},"obs3-为什么是杆子角速度",[106,112439,112074],{}," 为什么是杆子角速度",[19,112442,112443],{},"因为这个模型里：",[99,112445,112448],{"className":112446,"code":112447,"language":6524,"meta":104},[6522],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[106,112449,112447],{"__ignoreMap":104},[19,112451,110922],{},[99,112453,112456],{"className":112454,"code":112455,"language":6524,"meta":104},[6522],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[106,112457,112455],{"__ignoreMap":104},[51,112459,112461],{"id":112460},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112463,112464],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112466,103782],{"id":103781},[19,112468,112469],{},"一个控制任务通常包含：",[765,112471,112472,112475,112483,112488,112491],{},[30,112473,112474],{},"模型：Cartpole 的 body、joint、actuator。",[30,112476,112477,112478,1750,112480,112482],{},"观测：从 ",[106,112479,105205],{},[106,112481,105535],{}," 里取状态。",[30,112484,112485,112486,29560],{},"动作：写入 ",[106,112487,102251],{},[30,112489,112490],{},"奖励：根据任务目标打分。",[30,112492,112493],{},"循环：obs -> action -> step -> reward。",[19,112495,112496],{},"这就是后面 Gymnasium 环境的基本骨架。",[1467,112498,105461],{},{"title":104,"searchDepth":119,"depth":119,"links":112500},[112501,112502,112503,112508,112512,112513,112514,112522],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":112504},[112505,112506,112507],{"id":110875,"depth":140,"text":110876},{"id":110940,"depth":140,"text":110941},{"id":110956,"depth":140,"text":110957},{"id":102427,"depth":119,"text":102428,"children":112509},[112510,112511],{"id":102747,"depth":140,"text":102747},{"id":102883,"depth":140,"text":102883},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":112515},[112516,112517,112518,112519,112521],{"id":112380,"depth":140,"text":112380},{"id":112391,"depth":140,"text":112391},{"id":112424,"depth":140,"text":112424},{"id":112437,"depth":140,"text":112520},"obs[3] 为什么是杆子角速度",{"id":112460,"depth":140,"text":112461},{"id":103781,"depth":119,"text":103782},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110611,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112529,"title":112530,"body":112531,"description":104,"extension":1476,"meta":114545,"navigation":157,"path":114546,"seo":114547,"stem":114548,"__hash__":114549},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112532,"toc":114521},[112533,112536,112538,112541,112543,112560,112563,112566,112572,112575,112577,112579,112603,112605,112619,112621,112662,112664,112682,112684,112687,112693,112696,112724,112728,112734,112759,112762,112793,112800,112803,112806,112812,112815,112821,112824,112830,112834,112837,112862,112865,112867,113627,113629,113641,113643,113654,113656,113659,113676,113679,113681,113692,113695,113697,113743,113746,113759,113762,113844,113847,113849,113865,113875,113888,113891,113930,113940,113951,113961,113974,113977,114006,114009,114019,114022,114028,114045,114056,114058,114064,114081,114092,114113,114116,114128,114131,114152,114155,114163,114171,114188,114191,114260,114267,114275,114278,114291,114298,114300,114303,114309,114312,114315,114321,114327,114329,114369,114371,114377,114386,114389,114391,114411,114414,114417,114423,114427,114429,114456,114459,114462,114489,114495,114498,114501,114503,114506,114509,114515,114518],[10,112534,112530],{"id":112535},"_7控制任务reacher-机械臂到达目标",[14,112537,101822],{"id":101821},[19,112539,112540],{},"本章搭建一个二维两关节 reacher 任务。",[19,112542,105506],{},[765,112544,112545,112548,112551,112554,112557],{},[30,112546,112547],{},"两个 hinge joint",[30,112549,112550],{},"两个 motor actuator",[30,112552,112553],{},"site 作为末端点和目标点",[30,112555,112556],{},"根据末端和目标距离设计 reward",[30,112558,112559],{},"构造机械臂任务的基本形式",[19,112561,112562],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112564,112565],{},"Reacher 任务可以理解为：",[99,112567,112570],{"className":112568,"code":112569,"language":6524,"meta":104},[6522],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[106,112571,112569],{"__ignoreMap":104},[19,112573,112574],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112576,101945],{"id":101944},[19,112578,101948],{},[99,112580,112581],{"className":24996,"code":105563,"language":24998,"meta":104,"style":104},[106,112582,112583],{"__ignoreMap":104},[109,112584,112585,112587,112589,112591,112593,112595,112597,112599,112601],{"class":111,"line":112},[109,112586,25751],{"class":211},[109,112588,27490],{"class":278},[109,112590,25008],{"class":278},[109,112592,27575],{"class":133},[109,112594,105578],{"class":278},[109,112596,101973],{"class":278},[109,112598,103676],{"class":278},[109,112600,101989],{"class":278},[109,112602,105587],{"class":278},[19,112604,103994],{},[99,112606,112607],{"className":24996,"code":102094,"language":24998,"meta":104,"style":104},[106,112608,112609],{"__ignoreMap":104},[109,112610,112611,112613,112615,112617],{"class":111,"line":112},[109,112612,25005],{"class":211},[109,112614,25008],{"class":278},[109,112616,102105],{"class":278},[109,112618,102108],{"class":278},[19,112620,104011],{},[99,112622,112624],{"className":24996,"code":112623,"language":24998,"meta":104,"style":104},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[106,112625,112626,112643,112652],{"__ignoreMap":104},[109,112627,112628,112630,112632,112634,112637,112639,112641],{"class":111,"line":112},[109,112629,31505],{"class":211},[109,112631,30351],{"class":278},[109,112633,26290],{"class":133},[109,112635,112636],{"class":278}," mujoco-reacher",[109,112638,102150],{"class":278},[109,112640,102153],{"class":133},[109,112642,102156],{"class":133},[109,112644,112645,112647,112649],{"class":111,"line":119},[109,112646,31505],{"class":211},[109,112648,102163],{"class":278},[109,112650,112651],{"class":278}," mujoco-reacher\n",[109,112653,112654,112656,112658,112660],{"class":111,"line":140},[109,112655,25005],{"class":211},[109,112657,25008],{"class":278},[109,112659,102105],{"class":278},[109,112661,102108],{"class":278},[19,112663,102179],{},[765,112665,112666,112669,112672],{},[30,112667,112668],{},"本章使用低维状态，不使用图像输入。",[30,112670,112671],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[30,112673,112674,112675,1750,112677,1750,112679,112681],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[106,112676,105205],{},[106,112678,105535],{},[106,112680,104855],{}," 的方法一致。",[14,112683,102220],{"id":102219},[19,112685,112686],{},"Reacher 任务核心:",[99,112688,112691],{"className":112689,"code":112690,"language":6524,"meta":104},[6522],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[106,112692,112690],{"__ignoreMap":104},[19,112694,112695],{},"读取 site 世界坐标:",[99,112697,112699],{"className":31553,"code":112698,"language":31555,"meta":104,"style":104},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[106,112700,112701,112714],{"__ignoreMap":104},[109,112702,112703,112705,112707,112709,112712],{"class":111,"line":112},[109,112704,104809],{"class":126},[109,112706,130],{"class":122},[109,112708,104580],{"class":126},[109,112710,112711],{"class":278},"\"tip\"",[109,112713,1330],{"class":126},[109,112715,112716,112719,112721],{"class":111,"line":119},[109,112717,112718],{"class":126},"tip_pos ",[109,112720,130],{"class":122},[109,112722,112723],{"class":126}," data.site_xpos[site_id]\n",[51,112725,112727],{"id":112726},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112729,112730,112731,112733],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[106,112732,105205],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[99,112735,112737],{"className":31553,"code":112736,"language":31555,"meta":104,"style":104},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[106,112738,112739,112749],{"__ignoreMap":104},[109,112740,112741,112744,112746],{"class":111,"line":112},[109,112742,112743],{"class":126},"tip ",[109,112745,130],{"class":122},[109,112747,112748],{"class":126}," data.site_xpos[tip_site_id]\n",[109,112750,112751,112754,112756],{"class":111,"line":119},[109,112752,112753],{"class":126},"target ",[109,112755,130],{"class":122},[109,112757,112758],{"class":126}," data.site_xpos[target_site_id]\n",[19,112760,112761],{},"这样 reward 就很容易写：",[99,112763,112765],{"className":31553,"code":112764,"language":31555,"meta":104,"style":104},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[106,112766,112767,112782],{"__ignoreMap":104},[109,112768,112769,112772,112774,112777,112779],{"class":111,"line":112},[109,112770,112771],{"class":126},"dist ",[109,112773,130],{"class":122},[109,112775,112776],{"class":126}," np.linalg.norm(tip ",[109,112778,2064],{"class":122},[109,112780,112781],{"class":126}," target)\n",[109,112783,112784,112786,112788,112790],{"class":111,"line":119},[109,112785,112180],{"class":126},[109,112787,130],{"class":122},[109,112789,53446],{"class":122},[109,112791,112792],{"class":126},"dist\n",[19,112794,112795,112796,112799],{},"距离越小，",[106,112797,112798],{},"-dist"," 越接近 0，奖励越高。",[51,112801,112802],{"id":112802},"两关节机械臂的状态",[19,112804,112805],{},"这个模型有两个 hinge joint：",[99,112807,112810],{"className":112808,"code":112809,"language":6524,"meta":104},[6522],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[106,112811,112809],{"__ignoreMap":104},[19,112813,112814],{},"再加上末端和目标位置：",[99,112816,112819],{"className":112817,"code":112818,"language":6524,"meta":104},[6522],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[106,112820,112818],{"__ignoreMap":104},[19,112822,112823],{},"总维度：",[99,112825,112828],{"className":112826,"code":112827,"language":6524,"meta":104},[6522],"2 + 2 + 3 + 3 = 10\n",[106,112829,112827],{"__ignoreMap":104},[51,112831,112833],{"id":112832},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112835,112836],{},"本章把重力设为：",[99,112838,112840],{"className":54242,"code":112839,"language":54244,"meta":104,"style":104},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[106,112841,112842],{"__ignoreMap":104},[109,112843,112844,112846,112848,112850,112852,112854,112856,112858,112860],{"class":111,"line":112},[109,112845,1320],{"class":126},[109,112847,70341],{"class":52475},[109,112849,102369],{"class":211},[109,112851,130],{"class":126},[109,112853,102374],{"class":278},[109,112855,102377],{"class":211},[109,112857,130],{"class":126},[109,112859,104946],{"class":278},[109,112861,102319],{"class":126},[19,112863,112864],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112866,102428],{"id":102427},[99,112868,112870],{"className":31553,"code":112869,"language":31555,"meta":104,"style":104},"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",[106,112871,112872,112878,112888,112892,112896,112904,112909,112914,112918,112922,112927,112932,112936,112941,112946,112951,112955,112960,112965,112970,112975,112979,112983,112987,112991,112995,113000,113005,113009,113013,113017,113021,113025,113040,113049,113061,113084,113091,113095,113099,113109,113123,113137,113144,113148,113152,113166,113178,113190,113203,113218,113235,113239,113243,113255,113267,113275,113283,113287,113303,113308,113321,113334,113349,113353,113388,113420,113424,113428,113437,113441,113457,113467,113478,113494,113510,113526,113542,113546,113564,113584,113603,113607,113611,113623],{"__ignoreMap":104},[109,112873,112874,112876],{"class":111,"line":112},[109,112875,31567],{"class":122},[109,112877,102476],{"class":126},[109,112879,112880,112882,112884,112886],{"class":111,"line":119},[109,112881,31567],{"class":122},[109,112883,32555],{"class":126},[109,112885,32558],{"class":122},[109,112887,32561],{"class":126},[109,112889,112890],{"class":111,"line":140},[109,112891,158],{"emptyLinePlaceholder":157},[109,112893,112894],{"class":111,"line":154},[109,112895,158],{"emptyLinePlaceholder":157},[109,112897,112898,112900,112902],{"class":111,"line":161},[109,112899,102489],{"class":133},[109,112901,14737],{"class":122},[109,112903,102494],{"class":278},[109,112905,112906],{"class":111,"line":167},[109,112907,112908],{"class":278},"\u003Cmujoco model=\"two_link_reacher\">\n",[109,112910,112911],{"class":111,"line":185},[109,112912,112913],{"class":278},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[109,112915,112916],{"class":111,"line":201},[109,112917,158],{"emptyLinePlaceholder":157},[109,112919,112920],{"class":111,"line":206},[109,112921,102513],{"class":278},[109,112923,112924],{"class":111,"line":218},[109,112925,112926],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[109,112928,112929],{"class":111,"line":223},[109,112930,112931],{"class":278},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[109,112933,112934],{"class":111,"line":229},[109,112935,158],{"emptyLinePlaceholder":157},[109,112937,112938],{"class":111,"line":244},[109,112939,112940],{"class":278},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[109,112942,112943],{"class":111,"line":258},[109,112944,112945],{"class":278},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[109,112947,112948],{"class":111,"line":263},[109,112949,112950],{"class":278},"      \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",[109,112952,112953],{"class":111,"line":269},[109,112954,158],{"emptyLinePlaceholder":157},[109,112956,112957],{"class":111,"line":304},[109,112958,112959],{"class":278},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[109,112961,112962],{"class":111,"line":331},[109,112963,112964],{"class":278},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[109,112966,112967],{"class":111,"line":336},[109,112968,112969],{"class":278},"        \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",[109,112971,112972],{"class":111,"line":364},[109,112973,112974],{"class":278},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[109,112976,112977],{"class":111,"line":391},[109,112978,107613],{"class":278},[109,112980,112981],{"class":111,"line":396},[109,112982,102542],{"class":278},[109,112984,112985],{"class":111,"line":402},[109,112986,102547],{"class":278},[109,112988,112989],{"class":111,"line":419},[109,112990,158],{"emptyLinePlaceholder":157},[109,112992,112993],{"class":111,"line":435},[109,112994,107630],{"class":278},[109,112996,112997],{"class":111,"line":440},[109,112998,112999],{"class":278},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[109,113001,113002],{"class":111,"line":467},[109,113003,113004],{"class":278},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[109,113006,113007],{"class":111,"line":494},[109,113008,107640],{"class":278},[109,113010,113011],{"class":111,"line":499},[109,113012,102552],{"class":278},[109,113014,113015],{"class":111,"line":526},[109,113016,96873],{"class":278},[109,113018,113019],{"class":111,"line":552},[109,113020,158],{"emptyLinePlaceholder":157},[109,113022,113023],{"class":111,"line":557},[109,113024,158],{"emptyLinePlaceholder":157},[109,113026,113027,113029,113032,113035,113037],{"class":111,"line":584},[109,113028,33122],{"class":122},[109,113030,113031],{"class":211}," site_position",[109,113033,113034],{"class":126},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[109,113036,2695],{"class":133},[109,113038,113039],{"class":126},") -> np.ndarray:\n",[109,113041,113042,113044,113046],{"class":111,"line":611},[109,113043,104575],{"class":126},[109,113045,130],{"class":122},[109,113047,113048],{"class":126}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[109,113050,113051,113053,113055,113057,113059],{"class":111,"line":616},[109,113052,4446],{"class":122},[109,113054,104624],{"class":126},[109,113056,1320],{"class":122},[109,113058,734],{"class":133},[109,113060,5082],{"class":126},[109,113062,113063,113065,113067,113069,113071,113074,113076,113078,113080,113082],{"class":111,"line":633},[109,113064,104607],{"class":122},[109,113066,104610],{"class":133},[109,113068,714],{"class":126},[109,113070,1595],{"class":122},[109,113072,113073],{"class":278},"\"site not found: ",[109,113075,2427],{"class":133},[109,113077,80985],{"class":126},[109,113079,2476],{"class":133},[109,113081,1789],{"class":278},[109,113083,1330],{"class":126},[109,113085,113086,113088],{"class":111,"line":649},[109,113087,731],{"class":122},[109,113089,113090],{"class":126}," data.site_xpos[site_id].copy()\n",[109,113092,113093],{"class":111,"line":676},[109,113094,158],{"emptyLinePlaceholder":157},[109,113096,113097],{"class":111,"line":703},[109,113098,158],{"emptyLinePlaceholder":157},[109,113100,113101,113103,113106],{"class":111,"line":708},[109,113102,33122],{"class":122},[109,113104,113105],{"class":211}," get_obs",[109,113107,113108],{"class":126},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[109,113110,113111,113114,113116,113119,113121],{"class":111,"line":723},[109,113112,113113],{"class":126},"    tip ",[109,113115,130],{"class":122},[109,113117,113118],{"class":126}," site_position(model, data, ",[109,113120,112711],{"class":278},[109,113122,1330],{"class":126},[109,113124,113125,113128,113130,113132,113135],{"class":111,"line":728},[109,113126,113127],{"class":126},"    target ",[109,113129,130],{"class":122},[109,113131,113118],{"class":126},[109,113133,113134],{"class":278},"\"target\"",[109,113136,1330],{"class":126},[109,113138,113139,113141],{"class":111,"line":739},[109,113140,731],{"class":122},[109,113142,113143],{"class":126}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[109,113145,113146],{"class":111,"line":9352},[109,113147,158],{"emptyLinePlaceholder":157},[109,113149,113150],{"class":111,"line":9364},[109,113151,158],{"emptyLinePlaceholder":157},[109,113153,113154,113156,113159,113162,113164],{"class":111,"line":9376},[109,113155,33122],{"class":122},[109,113157,113158],{"class":211}," reward",[109,113160,113161],{"class":126},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[109,113163,1584],{"class":133},[109,113165,5082],{"class":126},[109,113167,113168,113170,113172,113174,113176],{"class":111,"line":11034},[109,113169,113113],{"class":126},[109,113171,130],{"class":122},[109,113173,113118],{"class":126},[109,113175,112711],{"class":278},[109,113177,1330],{"class":126},[109,113179,113180,113182,113184,113186,113188],{"class":111,"line":11059},[109,113181,113127],{"class":126},[109,113183,130],{"class":122},[109,113185,113118],{"class":126},[109,113187,113134],{"class":278},[109,113189,1330],{"class":126},[109,113191,113192,113195,113197,113199,113201],{"class":111,"line":11082},[109,113193,113194],{"class":126},"    dist ",[109,113196,130],{"class":122},[109,113198,112776],{"class":126},[109,113200,2064],{"class":122},[109,113202,112781],{"class":126},[109,113204,113205,113208,113210,113213,113215],{"class":111,"line":11106},[109,113206,113207],{"class":126},"    control_cost ",[109,113209,130],{"class":122},[109,113211,113212],{"class":133}," 0.01",[109,113214,797],{"class":122},[109,113216,113217],{"class":126}," np.sum(np.square(data.ctrl))\n",[109,113219,113220,113222,113224,113226,113228,113230,113232],{"class":111,"line":11111},[109,113221,731],{"class":122},[109,113223,110972],{"class":133},[109,113225,714],{"class":126},[109,113227,2064],{"class":122},[109,113229,112771],{"class":126},[109,113231,2064],{"class":122},[109,113233,113234],{"class":126}," control_cost)\n",[109,113236,113237],{"class":111,"line":11116},[109,113238,158],{"emptyLinePlaceholder":157},[109,113240,113241],{"class":111,"line":11121},[109,113242,158],{"emptyLinePlaceholder":157},[109,113244,113245,113247,113249,113251,113253],{"class":111,"line":11130},[109,113246,33122],{"class":122},[109,113248,212],{"class":211},[109,113250,102573],{"class":126},[109,113252,96861],{"class":133},[109,113254,5082],{"class":126},[109,113256,113257,113259,113261,113263,113265],{"class":111,"line":11135},[109,113258,102582],{"class":126},[109,113260,130],{"class":122},[109,113262,102587],{"class":126},[109,113264,102489],{"class":133},[109,113266,1330],{"class":126},[109,113268,113269,113271,113273],{"class":111,"line":11141},[109,113270,102596],{"class":126},[109,113272,130],{"class":122},[109,113274,102601],{"class":126},[109,113276,113277,113279,113281],{"class":111,"line":11162},[109,113278,111328],{"class":126},[109,113280,130],{"class":122},[109,113282,105936],{"class":133},[109,113284,113285],{"class":111,"line":11168},[109,113286,158],{"emptyLinePlaceholder":157},[109,113288,113289,113291,113293,113295,113297,113299,113301],{"class":111,"line":11182},[109,113290,1302],{"class":122},[109,113292,32791],{"class":126},[109,113294,27218],{"class":122},[109,113296,33618],{"class":133},[109,113298,714],{"class":126},[109,113300,66249],{"class":133},[109,113302,31961],{"class":126},[109,113304,113305],{"class":111,"line":11188},[109,113306,113307],{"class":126},"        mujoco.mj_forward(model, data)\n",[109,113309,113310,113313,113315,113317,113319],{"class":111,"line":11215},[109,113311,113312],{"class":126},"        tip ",[109,113314,130],{"class":122},[109,113316,113118],{"class":126},[109,113318,112711],{"class":278},[109,113320,1330],{"class":126},[109,113322,113323,113326,113328,113330,113332],{"class":111,"line":11224},[109,113324,113325],{"class":126},"        target ",[109,113327,130],{"class":122},[109,113329,113118],{"class":126},[109,113331,113134],{"class":278},[109,113333,1330],{"class":126},[109,113335,113336,113339,113341,113344,113346],{"class":111,"line":11230},[109,113337,113338],{"class":126},"        error ",[109,113340,130],{"class":122},[109,113342,113343],{"class":126}," target ",[109,113345,2064],{"class":122},[109,113347,113348],{"class":126}," tip\n",[109,113350,113351],{"class":111,"line":11238},[109,113352,158],{"emptyLinePlaceholder":157},[109,113354,113355,113357,113359,113361,113363,113366,113368,113370,113373,113375,113378,113380,113382,113384,113386],{"class":111,"line":11243},[109,113356,107792],{"class":126},[109,113358,1314],{"class":133},[109,113360,5780],{"class":126},[109,113362,130],{"class":122},[109,113364,113365],{"class":126}," np.clip(",[109,113367,106435],{"class":133},[109,113369,797],{"class":122},[109,113371,113372],{"class":126}," error[",[109,113374,1618],{"class":133},[109,113376,113377],{"class":126},"], ",[109,113379,2064],{"class":122},[109,113381,103578],{"class":133},[109,113383,13608],{"class":126},[109,113385,103578],{"class":133},[109,113387,1330],{"class":126},[109,113389,113390,113392,113394,113396,113398,113400,113402,113404,113406,113408,113410,113412,113414,113416,113418],{"class":111,"line":17777},[109,113391,107792],{"class":126},[109,113393,1755],{"class":133},[109,113395,5780],{"class":126},[109,113397,130],{"class":122},[109,113399,113365],{"class":126},[109,113401,106435],{"class":133},[109,113403,797],{"class":122},[109,113405,113372],{"class":126},[109,113407,1314],{"class":133},[109,113409,113377],{"class":126},[109,113411,2064],{"class":122},[109,113413,103578],{"class":133},[109,113415,13608],{"class":126},[109,113417,103578],{"class":133},[109,113419,1330],{"class":126},[109,113421,113422],{"class":111,"line":17783},[109,113423,158],{"emptyLinePlaceholder":157},[109,113425,113426],{"class":111,"line":17806},[109,113427,102691],{"class":126},[109,113429,113430,113432,113434],{"class":111,"line":17812},[109,113431,111472],{"class":126},[109,113433,10795],{"class":122},[109,113435,113436],{"class":126}," reward(model, data)\n",[109,113438,113439],{"class":111,"line":17835},[109,113440,158],{"emptyLinePlaceholder":157},[109,113442,113443,113445,113447,113449,113451,113453,113455],{"class":111,"line":17849},[109,113444,3852],{"class":122},[109,113446,32791],{"class":126},[109,113448,1865],{"class":122},[109,113450,7085],{"class":133},[109,113452,102734],{"class":122},[109,113454,734],{"class":133},[109,113456,5082],{"class":126},[109,113458,113459,113462,113464],{"class":111,"line":17869},[109,113460,113461],{"class":126},"            obs ",[109,113463,130],{"class":122},[109,113465,113466],{"class":126}," get_obs(model, data)\n",[109,113468,113469,113471,113473,113475],{"class":111,"line":17875},[109,113470,35825],{"class":133},[109,113472,714],{"class":126},[109,113474,111506],{"class":278},[109,113476,113477],{"class":126},", step)\n",[109,113479,113480,113482,113484,113487,113490,113492],{"class":111,"line":17886},[109,113481,35825],{"class":133},[109,113483,714],{"class":126},[109,113485,113486],{"class":278},"\"  tip:\"",[109,113488,113489],{"class":126},", np.round(tip, ",[109,113491,1612],{"class":133},[109,113493,31672],{"class":126},[109,113495,113496,113498,113500,113503,113506,113508],{"class":111,"line":17909},[109,113497,35825],{"class":133},[109,113499,714],{"class":126},[109,113501,113502],{"class":278},"\"  target:\"",[109,113504,113505],{"class":126},", np.round(target, ",[109,113507,1612],{"class":133},[109,113509,31672],{"class":126},[109,113511,113512,113514,113516,113519,113522,113524],{"class":111,"line":17931},[109,113513,35825],{"class":133},[109,113515,714],{"class":126},[109,113517,113518],{"class":278},"\"  ctrl:\"",[109,113520,113521],{"class":126},", np.round(data.ctrl.copy(), ",[109,113523,1612],{"class":133},[109,113525,31672],{"class":126},[109,113527,113528,113530,113532,113535,113538,113540],{"class":111,"line":17936},[109,113529,35825],{"class":133},[109,113531,714],{"class":126},[109,113533,113534],{"class":278},"\"  obs_dim:\"",[109,113536,113537],{"class":126},", obs.shape[",[109,113539,1314],{"class":133},[109,113541,5994],{"class":126},[109,113543,113544],{"class":111,"line":17942},[109,113545,158],{"emptyLinePlaceholder":157},[109,113547,113548,113550,113552,113554,113556,113558,113560,113562],{"class":111,"line":17956},[109,113549,32474],{"class":133},[109,113551,714],{"class":126},[109,113553,111551],{"class":278},[109,113555,13608],{"class":126},[109,113557,33193],{"class":133},[109,113559,111558],{"class":126},[109,113561,1612],{"class":133},[109,113563,31672],{"class":126},[109,113565,113566,113568,113570,113573,113576,113578,113580,113582],{"class":111,"line":17969},[109,113567,32474],{"class":133},[109,113569,714],{"class":126},[109,113571,113572],{"class":278},"\"final tip:\"",[109,113574,113575],{"class":126},", np.round(site_position(model, data, ",[109,113577,112711],{"class":278},[109,113579,111520],{"class":126},[109,113581,1612],{"class":133},[109,113583,31672],{"class":126},[109,113585,113586,113588,113590,113593,113595,113597,113599,113601],{"class":111,"line":17974},[109,113587,32474],{"class":133},[109,113589,714],{"class":126},[109,113591,113592],{"class":278},"\"target:\"",[109,113594,113575],{"class":126},[109,113596,113134],{"class":278},[109,113598,111520],{"class":126},[109,113600,1612],{"class":133},[109,113602,31672],{"class":126},[109,113604,113605],{"class":111,"line":17988},[109,113606,158],{"emptyLinePlaceholder":157},[109,113608,113609],{"class":111,"line":17993},[109,113610,158],{"emptyLinePlaceholder":157},[109,113612,113613,113615,113617,113619,113621],{"class":111,"line":17999},[109,113614,2922],{"class":122},[109,113616,32395],{"class":133},[109,113618,102734],{"class":122},[109,113620,102737],{"class":278},[109,113622,5082],{"class":126},[109,113624,113625],{"class":111,"line":18004},[109,113626,102744],{"class":126},[19,113628,104745],{},[99,113630,113632],{"className":24996,"code":113631,"language":24998,"meta":104,"style":104},"touch ch7_reacher.py\n",[106,113633,113634],{"__ignoreMap":104},[109,113635,113636,113638],{"class":111,"line":112},[109,113637,102458],{"class":211},[109,113639,113640],{"class":278}," ch7_reacher.py\n",[19,113642,111619],{},[99,113644,113646],{"className":24996,"code":113645,"language":24998,"meta":104,"style":104},"python ch7_reacher.py\n",[106,113647,113648],{"__ignoreMap":104},[109,113649,113650,113652],{"class":111,"line":112},[109,113651,31555],{"class":211},[109,113653,113640],{"class":278},[51,113655,102747],{"id":102747},[19,113657,113658],{},"读取 site 坐标：",[99,113660,113662],{"className":31553,"code":113661,"language":31555,"meta":104,"style":104},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[106,113663,113664],{"__ignoreMap":104},[109,113665,113666,113668,113670,113672,113674],{"class":111,"line":112},[109,113667,33122],{"class":122},[109,113669,113031],{"class":211},[109,113671,113034],{"class":126},[109,113673,2695],{"class":133},[109,113675,113039],{"class":126},[19,113677,113678],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113680,111635],{},[99,113682,113684],{"className":31553,"code":113683,"language":31555,"meta":104,"style":104},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[106,113685,113686],{"__ignoreMap":104},[109,113687,113688,113690],{"class":111,"line":112},[109,113689,18219],{"class":122},[109,113691,113143],{"class":126},[19,113693,113694],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113696,110960],{},[99,113698,113700],{"className":31553,"code":113699,"language":31555,"meta":104,"style":104},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[106,113701,113702,113714,113727],{"__ignoreMap":104},[109,113703,113704,113706,113708,113710,113712],{"class":111,"line":112},[109,113705,112771],{"class":126},[109,113707,130],{"class":122},[109,113709,112776],{"class":126},[109,113711,2064],{"class":122},[109,113713,112781],{"class":126},[109,113715,113716,113719,113721,113723,113725],{"class":111,"line":119},[109,113717,113718],{"class":126},"control_cost ",[109,113720,130],{"class":122},[109,113722,113212],{"class":133},[109,113724,797],{"class":122},[109,113726,113217],{"class":126},[109,113728,113729,113731,113733,113735,113737,113739,113741],{"class":111,"line":140},[109,113730,18219],{"class":122},[109,113732,110972],{"class":133},[109,113734,714],{"class":126},[109,113736,2064],{"class":122},[109,113738,112771],{"class":126},[109,113740,2064],{"class":122},[109,113742,113234],{"class":126},[19,113744,113745],{},"奖励由两部分组成：",[765,113747,113748,113753],{},[30,113749,113750,113752],{},[106,113751,112798],{},"：末端离目标越远，奖励越低。",[30,113754,113755,113758],{},[106,113756,113757],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113760,113761],{},"简单控制器：",[99,113763,113765],{"className":31553,"code":113764,"language":31555,"meta":104,"style":104},"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",[106,113766,113767,113780,113812],{"__ignoreMap":104},[109,113768,113769,113772,113774,113776,113778],{"class":111,"line":112},[109,113770,113771],{"class":126},"error ",[109,113773,130],{"class":122},[109,113775,113343],{"class":126},[109,113777,2064],{"class":122},[109,113779,113348],{"class":126},[109,113781,113782,113784,113786,113788,113790,113792,113794,113796,113798,113800,113802,113804,113806,113808,113810],{"class":111,"line":119},[109,113783,107046],{"class":126},[109,113785,1314],{"class":133},[109,113787,5780],{"class":126},[109,113789,130],{"class":122},[109,113791,113365],{"class":126},[109,113793,106435],{"class":133},[109,113795,797],{"class":122},[109,113797,113372],{"class":126},[109,113799,1618],{"class":133},[109,113801,113377],{"class":126},[109,113803,2064],{"class":122},[109,113805,103578],{"class":133},[109,113807,13608],{"class":126},[109,113809,103578],{"class":133},[109,113811,1330],{"class":126},[109,113813,113814,113816,113818,113820,113822,113824,113826,113828,113830,113832,113834,113836,113838,113840,113842],{"class":111,"line":140},[109,113815,107046],{"class":126},[109,113817,1755],{"class":133},[109,113819,5780],{"class":126},[109,113821,130],{"class":122},[109,113823,113365],{"class":126},[109,113825,106435],{"class":133},[109,113827,797],{"class":122},[109,113829,113372],{"class":126},[109,113831,1314],{"class":133},[109,113833,113377],{"class":126},[109,113835,2064],{"class":122},[109,113837,103578],{"class":133},[109,113839,13608],{"class":126},[109,113841,103578],{"class":133},[109,113843,1330],{"class":126},[19,113845,113846],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[51,113848,102883],{"id":102883},[99,113850,113851],{"className":31553,"code":113661,"language":31555,"meta":104,"style":104},[106,113852,113853],{"__ignoreMap":104},[109,113854,113855,113857,113859,113861,113863],{"class":111,"line":112},[109,113856,33122],{"class":122},[109,113858,113031],{"class":211},[109,113860,113034],{"class":126},[109,113862,2695],{"class":133},[109,113864,113039],{"class":126},[19,113866,113867,113868,113870,113871,83714,113873,29560],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[106,113869,80985],{}," 是 site 的名字，比如 ",[106,113872,112711],{},[106,113874,113134],{},[99,113876,113878],{"className":31553,"code":113877,"language":31555,"meta":104,"style":104},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[106,113879,113880],{"__ignoreMap":104},[109,113881,113882,113884,113886],{"class":111,"line":112},[109,113883,104809],{"class":126},[109,113885,130],{"class":122},[109,113887,113048],{"class":126},[19,113889,113890],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[99,113892,113894],{"className":31553,"code":113893,"language":31555,"meta":104,"style":104},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[106,113895,113896,113908],{"__ignoreMap":104},[109,113897,113898,113900,113902,113904,113906],{"class":111,"line":112},[109,113899,2922],{"class":122},[109,113901,104624],{"class":126},[109,113903,1320],{"class":122},[109,113905,734],{"class":133},[109,113907,5082],{"class":126},[109,113909,113910,113912,113914,113916,113918,113920,113922,113924,113926,113928],{"class":111,"line":119},[109,113911,105070],{"class":122},[109,113913,104610],{"class":133},[109,113915,714],{"class":126},[109,113917,1595],{"class":122},[109,113919,113073],{"class":278},[109,113921,2427],{"class":133},[109,113923,80985],{"class":126},[109,113925,2476],{"class":133},[109,113927,1789],{"class":278},[109,113929,1330],{"class":126},[19,113931,113932,113933,113936,113937,113939],{},"如果 site 没找到，就主动报错。",[106,113934,113935],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[106,113938,80985],{}," 的值放进字符串里。",[99,113941,113943],{"className":31553,"code":113942,"language":31555,"meta":104,"style":104},"return data.site_xpos[site_id].copy()\n",[106,113944,113945],{"__ignoreMap":104},[109,113946,113947,113949],{"class":111,"line":112},[109,113948,18219],{"class":122},[109,113950,113090],{"class":126},[19,113952,113953,113954,113956,113957,113960],{},"返回这个 site 的世界坐标。",[106,113955,104855],{}," 里的每一行都是一个 site 的 ",[106,113958,113959],{},"(x, y, z)"," 坐标。",[99,113962,113964],{"className":31553,"code":113963,"language":31555,"meta":104,"style":104},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[106,113965,113966],{"__ignoreMap":104},[109,113967,113968,113970,113972],{"class":111,"line":112},[109,113969,33122],{"class":122},[109,113971,113105],{"class":211},[109,113973,113108],{"class":126},[19,113975,113976],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[99,113978,113980],{"className":31553,"code":113979,"language":31555,"meta":104,"style":104},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[106,113981,113982,113994],{"__ignoreMap":104},[109,113983,113984,113986,113988,113990,113992],{"class":111,"line":112},[109,113985,112743],{"class":126},[109,113987,130],{"class":122},[109,113989,113118],{"class":126},[109,113991,112711],{"class":278},[109,113993,1330],{"class":126},[109,113995,113996,113998,114000,114002,114004],{"class":111,"line":119},[109,113997,112753],{"class":126},[109,113999,130],{"class":122},[109,114001,113118],{"class":126},[109,114003,113134],{"class":278},[109,114005,1330],{"class":126},[19,114007,114008],{},"分别读取末端点和目标点的世界坐标。",[99,114010,114011],{"className":31553,"code":113683,"language":31555,"meta":104,"style":104},[106,114012,114013],{"__ignoreMap":104},[109,114014,114015,114017],{"class":111,"line":112},[109,114016,18219],{"class":122},[109,114018,113143],{"class":126},[19,114020,114021],{},"把四部分拼成一个观测数组：",[99,114023,114026],{"className":114024,"code":114025,"language":6524,"meta":104},[6522],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[106,114027,114025],{"__ignoreMap":104},[99,114029,114031],{"className":31553,"code":114030,"language":31555,"meta":104,"style":104},"dist = np.linalg.norm(tip - target)\n",[106,114032,114033],{"__ignoreMap":104},[109,114034,114035,114037,114039,114041,114043],{"class":111,"line":112},[109,114036,112771],{"class":126},[109,114038,130],{"class":122},[109,114040,112776],{"class":126},[109,114042,2064],{"class":122},[109,114044,112781],{"class":126},[19,114046,114047,114048,114051,114052,114055],{},"计算 tip 到 target 的距离。",[106,114049,114050],{},"tip - target"," 得到一个三维向量，",[106,114053,114054],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114057,15806],{},[99,114059,114062],{"className":114060,"code":114061,"language":6524,"meta":104},[6522],"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",[106,114063,114061],{"__ignoreMap":104},[99,114065,114067],{"className":31553,"code":114066,"language":31555,"meta":104,"style":104},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[106,114068,114069],{"__ignoreMap":104},[109,114070,114071,114073,114075,114077,114079],{"class":111,"line":112},[109,114072,113718],{"class":126},[109,114074,130],{"class":122},[109,114076,113212],{"class":133},[109,114078,797],{"class":122},[109,114080,113217],{"class":126},[19,114082,114083,114084,114087,114088,114091],{},"计算动作惩罚。",[106,114085,114086],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[106,114089,114090],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[99,114093,114095],{"className":31553,"code":114094,"language":31555,"meta":104,"style":104},"return float(-dist - control_cost)\n",[106,114096,114097],{"__ignoreMap":104},[109,114098,114099,114101,114103,114105,114107,114109,114111],{"class":111,"line":112},[109,114100,18219],{"class":122},[109,114102,110972],{"class":133},[109,114104,714],{"class":126},[109,114106,2064],{"class":122},[109,114108,112771],{"class":126},[109,114110,2064],{"class":122},[109,114112,113234],{"class":126},[19,114114,114115],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[99,114117,114118],{"className":31553,"code":111978,"language":31555,"meta":104,"style":104},[106,114119,114120],{"__ignoreMap":104},[109,114121,114122,114124,114126],{"class":111,"line":112},[109,114123,111985],{"class":126},[109,114125,130],{"class":122},[109,114127,105936],{"class":133},[19,114129,114130],{},"累计奖励变量，记录整个运行过程的总分。",[99,114132,114134],{"className":31553,"code":114133,"language":31555,"meta":104,"style":104},"for step in range(500):\n",[106,114135,114136],{"__ignoreMap":104},[109,114137,114138,114140,114142,114144,114146,114148,114150],{"class":111,"line":112},[109,114139,4372],{"class":122},[109,114141,32791],{"class":126},[109,114143,27218],{"class":122},[109,114145,33618],{"class":133},[109,114147,714],{"class":126},[109,114149,66249],{"class":133},[109,114151,31961],{"class":126},[19,114153,114154],{},"运行 500 个控制步。",[99,114156,114157],{"className":31553,"code":105718,"language":31555,"meta":104,"style":104},[106,114158,114159],{"__ignoreMap":104},[109,114160,114161],{"class":111,"line":112},[109,114162,105718],{"class":126},[19,114164,114165,114166,102193,114168,114170],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[106,114167,104406],{},[106,114169,104409],{}," 是当前状态下的坐标。",[99,114172,114174],{"className":31553,"code":114173,"language":31555,"meta":104,"style":104},"error = target - tip\n",[106,114175,114176],{"__ignoreMap":104},[109,114177,114178,114180,114182,114184,114186],{"class":111,"line":112},[109,114179,113771],{"class":126},[109,114181,130],{"class":122},[109,114183,113343],{"class":126},[109,114185,2064],{"class":122},[109,114187,113348],{"class":126},[19,114189,114190],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[99,114192,114194],{"className":31553,"code":114193,"language":31555,"meta":104,"style":104},"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",[106,114195,114196,114228],{"__ignoreMap":104},[109,114197,114198,114200,114202,114204,114206,114208,114210,114212,114214,114216,114218,114220,114222,114224,114226],{"class":111,"line":112},[109,114199,107046],{"class":126},[109,114201,1314],{"class":133},[109,114203,5780],{"class":126},[109,114205,130],{"class":122},[109,114207,113365],{"class":126},[109,114209,106435],{"class":133},[109,114211,797],{"class":122},[109,114213,113372],{"class":126},[109,114215,1618],{"class":133},[109,114217,113377],{"class":126},[109,114219,2064],{"class":122},[109,114221,103578],{"class":133},[109,114223,13608],{"class":126},[109,114225,103578],{"class":133},[109,114227,1330],{"class":126},[109,114229,114230,114232,114234,114236,114238,114240,114242,114244,114246,114248,114250,114252,114254,114256,114258],{"class":111,"line":119},[109,114231,107046],{"class":126},[109,114233,1755],{"class":133},[109,114235,5780],{"class":126},[109,114237,130],{"class":122},[109,114239,113365],{"class":126},[109,114241,106435],{"class":133},[109,114243,797],{"class":122},[109,114245,113372],{"class":126},[109,114247,1314],{"class":133},[109,114249,113377],{"class":126},[109,114251,2064],{"class":122},[109,114253,103578],{"class":133},[109,114255,13608],{"class":126},[109,114257,103578],{"class":133},[109,114259,1330],{"class":126},[19,114261,114262,114263,114266],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[106,114264,114265],{},"error -> ctrl -> step"," 的流程。",[99,114268,114269],{"className":31553,"code":105680,"language":31555,"meta":104,"style":104},[106,114270,114271],{"__ignoreMap":104},[109,114272,114273],{"class":111,"line":112},[109,114274,105680],{"class":126},[19,114276,114277],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[99,114279,114281],{"className":31553,"code":114280,"language":31555,"meta":104,"style":104},"obs = get_obs(model, data)\n",[106,114282,114283],{"__ignoreMap":104},[109,114284,114285,114287,114289],{"class":111,"line":112},[109,114286,112029],{"class":126},[109,114288,130],{"class":122},[109,114290,113466],{"class":126},[19,114292,114293,114294,114297],{},"读取最新观测。后面打印 ",[106,114295,114296],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114299,103491],{"id":103490},[19,114301,114302],{},"观测维度为:",[99,114304,114307],{"className":114305,"code":114306,"language":6524,"meta":104},[6522],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[106,114308,114306],{"__ignoreMap":104},[19,114310,114311],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114313,114314],{},"程序每 100 步打印：",[99,114316,114319],{"className":114317,"code":114318,"language":6524,"meta":104},[6522],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[106,114320,114318],{"__ignoreMap":104},[19,114322,114323,114324,114326],{},"如果控制有效，你应该看到最终 ",[106,114325,104406],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114328,103523],{"id":103522},[765,114330,114331,114334,114337,114343,114349,114356,114366],{},[30,114332,114333],{},"修改目标点位置。",[30,114335,114336],{},"重新运行，观察最终 tip 是否变化。",[30,114338,114339,114340,114342],{},"把 gravity 改成 ",[106,114341,103764],{},"，观察控制是否变差。",[30,114344,112356,114345,112360,114347,29560],{},[106,114346,103333],{},[106,114348,1618],{},[30,114350,103586,114351,103589,114353,114355],{},[106,114352,111771],{},[106,114354,108482],{},"，观察机械臂是否更难移动。",[30,114357,103586,114358,83705,114360,103589,114362,114365],{},[106,114359,104409],{},[106,114361,105321],{},[106,114363,114364],{},"0.2 0 0.6","，观察 reward 和 final tip。",[30,114367,114368],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114370,103628],{"id":103627},[51,114372,114374],{"id":114373},"site-not-found",[106,114375,114376],{},"site not found",[19,114378,114379,114380,102193,114383,29560],{},"检查 XML 中是否有 ",[106,114381,114382],{},"site name=\"tip\"",[106,114384,114385],{},"site name=\"target\"",[51,114387,114388],{"id":114388},"机械臂完全不动",[19,114390,103698],{},[765,114392,114393,114398,114401,114406],{},[30,114394,114395,114397],{},[106,114396,103333],{}," 是否为 2",[30,114399,114400],{},"actuator 是否引用正确 joint",[30,114402,114403,114405],{},[106,114404,102251],{}," 是否被赋值",[30,114407,114408,114409],{},"是否执行了 ",[106,114410,101860],{},[51,114412,114413],{"id":114413},"控制效果不好",[19,114415,114416],{},"正常。本章重点不是控制器最优，而是任务结构:",[99,114418,114421],{"className":114419,"code":114420,"language":6524,"meta":104},[6522],"obs → action → mj_step → reward → next_obs\n",[106,114422,114420],{"__ignoreMap":104},[51,114424,114426],{"id":114425},"tip-坐标不变化","tip 坐标不变化",[19,114428,103750],{},[765,114430,114431,114436,114444,114453],{},[30,114432,114433,114434,29560],{},"是否每步调用了 ",[106,114435,101860],{},[30,114437,114438,114439,102193,114441,29560],{},"是否写入了 ",[106,114440,107301],{},[106,114442,114443],{},"data.ctrl[1]",[30,114445,114446,114447,1750,114450,29560],{},"actuator 是否正确引用 ",[106,114448,114449],{},"joint1",[106,114451,114452],{},"joint2",[30,114454,114455],{},"控制输入是否太小。",[51,114457,114458],{"id":114458},"目标点不会动",[19,114460,114461],{},"本章的 target 是固定 site：",[99,114463,114465],{"className":54242,"code":114464,"language":54244,"meta":104,"style":104},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[106,114466,114467],{"__ignoreMap":104},[109,114468,114469,114471,114473,114475,114477,114479,114481,114483,114486],{"class":111,"line":112},[109,114470,1320],{"class":126},[109,114472,104385],{"class":52475},[109,114474,16093],{"class":211},[109,114476,130],{"class":126},[109,114478,113134],{"class":278},[109,114480,102281],{"class":211},[109,114482,130],{"class":126},[109,114484,114485],{"class":278},"\"0.5 0 0.4\"",[109,114487,114488],{"class":126}," ...\u002F>\n",[19,114490,114491,114492,114494],{},"它直接挂在 ",[106,114493,103016],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[51,114496,114497],{"id":114497},"机械臂不像真实机械臂",[19,114499,114500],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114502,103782],{"id":103781},[19,114504,114505],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114507,114508],{},"核心公式：",[99,114510,114513],{"className":114511,"code":114512,"language":6524,"meta":104},[6522],"distance = ||tip - target||\nreward = -distance - action_cost\n",[106,114514,114512],{"__ignoreMap":104},[19,114516,114517],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1467,114519,114520],{},"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":104,"searchDepth":119,"depth":119,"links":114522},[114523,114524,114525,114530,114534,114535,114536,114544],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":114526},[114527,114528,114529],{"id":112726,"depth":140,"text":112727},{"id":112802,"depth":140,"text":112802},{"id":112832,"depth":140,"text":112833},{"id":102427,"depth":119,"text":102428,"children":114531},[114532,114533],{"id":102747,"depth":140,"text":102747},{"id":102883,"depth":140,"text":102883},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":114537},[114538,114539,114540,114541,114542,114543],{"id":114373,"depth":140,"text":114376},{"id":114388,"depth":140,"text":114388},{"id":114413,"depth":140,"text":114413},{"id":114425,"depth":140,"text":114426},{"id":114458,"depth":140,"text":114458},{"id":114497,"depth":140,"text":114497},{"id":103781,"depth":119,"text":103782},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112530,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114551,"title":114552,"body":114553,"description":104,"extension":1476,"meta":118015,"navigation":157,"path":118016,"seo":118017,"stem":118018,"__hash__":118019},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114554,"toc":117986},[114555,114558,114560,114563,114566,114591,114594,114600,114603,114609,114611,114613,114637,114639,114657,114659,114702,114704,114731,114733,114736,114788,114791,114797,114806,114809,114847,114850,114889,114892,114900,114907,114910,114916,114918,114972,114979,115024,115027,115031,115047,115057,115059,116320,116322,116334,116336,116347,116349,116352,116373,116376,116379,116412,116418,116421,116454,116457,116460,116501,116506,116520,116523,116536,116541,116564,116566,116581,116591,116606,116613,116633,116648,116666,116669,116686,116694,116710,116716,116748,116761,116793,116803,116838,116852,116898,116912,116954,116965,116978,116984,117017,117020,117047,117057,117097,117107,117124,117131,117149,117152,117193,117206,117221,117224,117247,117250,117262,117265,117284,117289,117310,117313,117328,117331,117365,117377,117392,117395,117420,117423,117442,117445,117477,117480,117504,117510,117540,117547,117560,117563,117565,117567,117573,117576,117579,117591,117594,117596,117650,117652,117656,117662,117671,117674,117681,117683,117706,117709,117713,117715,117733,117739,117741,117774,117777,117783,117787,117790,117810,117815,117819,117826,117846,117851,117855,117858,117878,117881,117967,117971,117974,117980,117983],[10,114556,114552],{"id":114557},"_8gymnasium-风格强化学习接口基础",[14,114559,101822],{"id":101821},[19,114561,114562],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114564,114565],{},"你将实现:",[99,114567,114569],{"className":31553,"code":114568,"language":31555,"meta":104,"style":104},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[106,114570,114571,114581],{"__ignoreMap":104},[109,114572,114573,114576,114578],{"class":111,"line":112},[109,114574,114575],{"class":126},"obs, info ",[109,114577,130],{"class":122},[109,114579,114580],{"class":126}," env.reset()\n",[109,114582,114583,114586,114588],{"class":111,"line":119},[109,114584,114585],{"class":126},"obs, reward, terminated, truncated, info ",[109,114587,130],{"class":122},[109,114589,114590],{"class":126}," env.step(action)\n",[19,114592,114593],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114595,114596,114597,114599],{},"前面章节的代码都是“脚本式”的：在 ",[106,114598,103470],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114601,114602],{},"可以先记住 Gymnasium 环境的核心交互：",[99,114604,114607],{"className":114605,"code":114606,"language":6524,"meta":104},[6522],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[106,114608,114606],{"__ignoreMap":104},[14,114610,101945],{"id":101944},[19,114612,101948],{},[99,114614,114615],{"className":24996,"code":105563,"language":24998,"meta":104,"style":104},[106,114616,114617],{"__ignoreMap":104},[109,114618,114619,114621,114623,114625,114627,114629,114631,114633,114635],{"class":111,"line":112},[109,114620,25751],{"class":211},[109,114622,27490],{"class":278},[109,114624,25008],{"class":278},[109,114626,27575],{"class":133},[109,114628,105578],{"class":278},[109,114630,101973],{"class":278},[109,114632,103676],{"class":278},[109,114634,101989],{"class":278},[109,114636,105587],{"class":278},[19,114638,103994],{},[99,114640,114642],{"className":24996,"code":114641,"language":24998,"meta":104,"style":104},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[106,114643,114644],{"__ignoreMap":104},[109,114645,114646,114648,114650,114652,114654],{"class":111,"line":112},[109,114647,25005],{"class":211},[109,114649,25008],{"class":278},[109,114651,102105],{"class":278},[109,114653,108886],{"class":278},[109,114655,114656],{"class":278}," gymnasium\n",[19,114658,104011],{},[99,114660,114662],{"className":24996,"code":114661,"language":24998,"meta":104,"style":104},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[106,114663,114664,114681,114690],{"__ignoreMap":104},[109,114665,114666,114668,114670,114672,114675,114677,114679],{"class":111,"line":112},[109,114667,31505],{"class":211},[109,114669,30351],{"class":278},[109,114671,26290],{"class":133},[109,114673,114674],{"class":278}," mujoco-gym-api",[109,114676,102150],{"class":278},[109,114678,102153],{"class":133},[109,114680,102156],{"class":133},[109,114682,114683,114685,114687],{"class":111,"line":119},[109,114684,31505],{"class":211},[109,114686,102163],{"class":278},[109,114688,114689],{"class":278}," mujoco-gym-api\n",[109,114691,114692,114694,114696,114698,114700],{"class":111,"line":140},[109,114693,25005],{"class":211},[109,114695,25008],{"class":278},[109,114697,102105],{"class":278},[109,114699,108886],{"class":278},[109,114701,114656],{"class":278},[19,114703,102179],{},[765,114705,114706,114716,114719,114725],{},[30,114707,114708,114709,114712,114713,29560],{},"本章使用 ",[106,114710,114711],{},"gymnasium","，不是旧版 ",[106,114714,114715],{},"gym",[30,114717,114718],{},"Gymnasium API 与旧 Gym API 有差异。",[30,114720,114721,114722,29560],{},"旧 Gym 常见返回值是 4 个: ",[106,114723,114724],{},"obs, reward, done, info",[30,114726,114727,114728,29560],{},"Gymnasium 返回值是 5 个: ",[106,114729,114730],{},"obs, reward, terminated, truncated, info",[14,114732,102220],{"id":102219},[19,114734,114735],{},"强化学习环境接口包含:",[1677,114737,114738,114747],{},[1680,114739,114740],{},[1683,114741,114742,114745],{},[1686,114743,114744],{"align":24910},"方法",[1686,114746,103871],{"align":24910},[1723,114748,114749,114759,114769,114779],{},[1683,114750,114751,114756],{},[1728,114752,114753],{"align":24910},[106,114754,114755],{},"reset()",[1728,114757,114758],{"align":24910},"重置环境",[1683,114760,114761,114766],{},[1728,114762,114763],{"align":24910},[106,114764,114765],{},"step(action)",[1728,114767,114768],{"align":24910},"执行动作",[1683,114770,114771,114776],{},[1728,114772,114773],{"align":24910},[106,114774,114775],{},"observation_space",[1728,114777,114778],{"align":24910},"观测空间",[1683,114780,114781,114786],{},[1728,114782,114783],{"align":24910},[106,114784,114785],{},"action_space",[1728,114787,24828],{"align":24910},[19,114789,114790],{},"一个最小环境需要完成:",[99,114792,114795],{"className":114793,"code":114794,"language":6524,"meta":104},[6522],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[106,114796,114794],{"__ignoreMap":104},[51,114798,114800,102193,114803,105813],{"id":114799},"terminated-和-truncated-的区别",[106,114801,114802],{},"terminated",[106,114804,114805],{},"truncated",[19,114807,114808],{},"Gymnasium 把“结束”拆成两个概念：",[1677,114810,114811,114821],{},[1680,114812,114813],{},[1683,114814,114815,114817,114819],{},[1686,114816,105749],{"align":24910},[1686,114818,101875],{"align":24910},[1686,114820,22360],{"align":24910},[1723,114822,114823,114835],{},[1683,114824,114825,114829,114832],{},[1728,114826,114827],{"align":24910},[106,114828,114802],{},[1728,114830,114831],{"align":24910},"任务自然结束",[1728,114833,114834],{"align":24910},"机械臂到达目标、机器人摔倒",[1683,114836,114837,114841,114844],{},[1728,114838,114839],{"align":24910},[106,114840,114805],{},[1728,114842,114843],{"align":24910},"因外部限制截断",[1728,114845,114846],{"align":24910},"达到最大步数、时间限制",[19,114848,114849],{},"本章中：",[99,114851,114853],{"className":31553,"code":114852,"language":31555,"meta":104,"style":104},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[106,114854,114855,114870],{"__ignoreMap":104},[109,114856,114857,114860,114862,114865,114867],{"class":111,"line":112},[109,114858,114859],{"class":126},"terminated ",[109,114861,130],{"class":122},[109,114863,114864],{"class":126}," dist ",[109,114866,1320],{"class":122},[109,114868,114869],{"class":133}," 0.05\n",[109,114871,114872,114875,114877,114879,114882,114884,114886],{"class":111,"line":119},[109,114873,114874],{"class":126},"truncated ",[109,114876,130],{"class":122},[109,114878,40048],{"class":133},[109,114880,114881],{"class":126},".steps ",[109,114883,3086],{"class":122},[109,114885,40048],{"class":133},[109,114887,114888],{"class":126},".max_steps\n",[19,114890,114891],{},"也就是：",[765,114893,114894,114897],{},[30,114895,114896],{},"末端距离目标小于 0.05，任务成功结束。",[30,114898,114899],{},"步数超过上限，episode 被截断。",[51,114901,114903,102193,114905],{"id":114902},"observation_space-和-action_space",[106,114904,114775],{},[106,114906,114785],{},[19,114908,114909],{},"这两个对象告诉算法：",[99,114911,114914],{"className":114912,"code":114913,"language":6524,"meta":104},[6522],"观测长什么样\n动作允许多大\n",[106,114915,114913],{"__ignoreMap":104},[19,114917,15806],{},[99,114919,114921],{"className":31553,"code":114920,"language":31555,"meta":104,"style":104},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[106,114922,114923],{"__ignoreMap":104},[109,114924,114925,114927,114930,114932,114935,114938,114941,114943,114945,114948,114950,114952,114954,114956,114958,114960,114962,114965,114967,114969],{"class":111,"line":112},[109,114926,31998],{"class":133},[109,114928,114929],{"class":126},".action_space ",[109,114931,130],{"class":122},[109,114933,114934],{"class":126}," spaces.Box(",[109,114936,114937],{"class":6553},"low",[109,114939,114940],{"class":122},"=-",[109,114942,103578],{"class":133},[109,114944,13608],{"class":126},[109,114946,114947],{"class":6553},"high",[109,114949,130],{"class":122},[109,114951,103578],{"class":133},[109,114953,13608],{"class":126},[109,114955,97138],{"class":6553},[109,114957,130],{"class":122},[109,114959,714],{"class":126},[109,114961,1618],{"class":133},[109,114963,114964],{"class":126},",), ",[109,114966,94675],{"class":6553},[109,114968,130],{"class":122},[109,114970,114971],{"class":126},"np.float32)\n",[19,114973,114974,114975,114978],{},"表示动作是 2 维数组，每个值都在 ",[106,114976,114977],{},"[-1, 1]"," 范围内。",[99,114980,114982],{"className":31553,"code":114981,"language":31555,"meta":104,"style":104},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[106,114983,114984],{"__ignoreMap":104},[109,114985,114986,114988,114991,114993,114995,114997,114999,115002,115004,115006,115008,115010,115012,115014,115016,115018,115020,115022],{"class":111,"line":112},[109,114987,31998],{"class":133},[109,114989,114990],{"class":126},".observation_space ",[109,114992,130],{"class":122},[109,114994,114934],{"class":126},[109,114996,114937],{"class":6553},[109,114998,114940],{"class":122},[109,115000,115001],{"class":126},"np.inf, ",[109,115003,114947],{"class":6553},[109,115005,130],{"class":122},[109,115007,115001],{"class":126},[109,115009,97138],{"class":6553},[109,115011,130],{"class":122},[109,115013,714],{"class":126},[109,115015,1008],{"class":133},[109,115017,114964],{"class":126},[109,115019,94675],{"class":6553},[109,115021,130],{"class":122},[109,115023,114971],{"class":126},[19,115025,115026],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[51,115028,115030],{"id":115029},"frame_skip-是什么","frame_skip 是什么",[99,115032,115034],{"className":31553,"code":115033,"language":31555,"meta":104,"style":104},"self.frame_skip = 5\n",[106,115035,115036],{"__ignoreMap":104},[109,115037,115038,115040,115043,115045],{"class":111,"line":112},[109,115039,31998],{"class":133},[109,115041,115042],{"class":126},".frame_skip ",[109,115044,130],{"class":122},[109,115046,55602],{"class":133},[19,115048,115049,115050,115053,115054,115056],{},"表示外部调用一次 ",[106,115051,115052],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[106,115055,102390],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115058,102428],{"id":102427},[99,115060,115062],{"className":31553,"code":115061,"language":31555,"meta":104,"style":104},"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",[106,115063,115064,115076,115082,115092,115103,115107,115111,115119,115124,115128,115132,115136,115140,115144,115148,115152,115157,115161,115165,115169,115174,115178,115182,115186,115190,115194,115198,115202,115206,115210,115214,115218,115222,115226,115244,115259,115263,115276,115286,115301,115318,115322,115343,115362,115387,115401,115405,115415,115427,115437,115441,115483,115521,115525,115535,115551,115566,115585,115592,115596,115609,115624,115639,115652,115671,115687,115691,115732,115747,115762,115766,115805,115816,115829,115833,115843,115852,115856,115866,115881,115899,115903,115914,115931,115944,115948,115958,115962,115973,115984,115988,116002,116016,116032,116036,116049,116066,116081,116088,116092,116096,116108,116118,116136,116148,116160,116164,116172,116188,116197,116206,116214,116256,116269,116274,116278,116296,116300,116304,116316],{"__ignoreMap":104},[109,115065,115066,115068,115071,115073],{"class":111,"line":112},[109,115067,31567],{"class":122},[109,115069,115070],{"class":126}," gymnasium ",[109,115072,32558],{"class":122},[109,115074,115075],{"class":126}," gym\n",[109,115077,115078,115080],{"class":111,"line":119},[109,115079,31567],{"class":122},[109,115081,102476],{"class":126},[109,115083,115084,115086,115088,115090],{"class":111,"line":140},[109,115085,31567],{"class":122},[109,115087,32555],{"class":126},[109,115089,32558],{"class":122},[109,115091,32561],{"class":126},[109,115093,115094,115096,115098,115100],{"class":111,"line":154},[109,115095,31912],{"class":122},[109,115097,115070],{"class":126},[109,115099,31567],{"class":122},[109,115101,115102],{"class":126}," spaces\n",[109,115104,115105],{"class":111,"line":161},[109,115106,158],{"emptyLinePlaceholder":157},[109,115108,115109],{"class":111,"line":167},[109,115110,158],{"emptyLinePlaceholder":157},[109,115112,115113,115115,115117],{"class":111,"line":185},[109,115114,102489],{"class":133},[109,115116,14737],{"class":122},[109,115118,102494],{"class":278},[109,115120,115121],{"class":111,"line":201},[109,115122,115123],{"class":278},"\u003Cmujoco model=\"gym_reacher\">\n",[109,115125,115126],{"class":111,"line":206},[109,115127,112913],{"class":278},[109,115129,115130],{"class":111,"line":218},[109,115131,158],{"emptyLinePlaceholder":157},[109,115133,115134],{"class":111,"line":223},[109,115135,102513],{"class":278},[109,115137,115138],{"class":111,"line":229},[109,115139,112931],{"class":278},[109,115141,115142],{"class":111,"line":244},[109,115143,158],{"emptyLinePlaceholder":157},[109,115145,115146],{"class":111,"line":258},[109,115147,112940],{"class":278},[109,115149,115150],{"class":111,"line":263},[109,115151,112945],{"class":278},[109,115153,115154],{"class":111,"line":269},[109,115155,115156],{"class":278},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[109,115158,115159],{"class":111,"line":304},[109,115160,158],{"emptyLinePlaceholder":157},[109,115162,115163],{"class":111,"line":331},[109,115164,112959],{"class":278},[109,115166,115167],{"class":111,"line":336},[109,115168,112964],{"class":278},[109,115170,115171],{"class":111,"line":364},[109,115172,115173],{"class":278},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[109,115175,115176],{"class":111,"line":391},[109,115177,112974],{"class":278},[109,115179,115180],{"class":111,"line":396},[109,115181,107613],{"class":278},[109,115183,115184],{"class":111,"line":402},[109,115185,102542],{"class":278},[109,115187,115188],{"class":111,"line":419},[109,115189,102547],{"class":278},[109,115191,115192],{"class":111,"line":435},[109,115193,158],{"emptyLinePlaceholder":157},[109,115195,115196],{"class":111,"line":440},[109,115197,107630],{"class":278},[109,115199,115200],{"class":111,"line":467},[109,115201,112999],{"class":278},[109,115203,115204],{"class":111,"line":494},[109,115205,113004],{"class":278},[109,115207,115208],{"class":111,"line":499},[109,115209,107640],{"class":278},[109,115211,115212],{"class":111,"line":526},[109,115213,102552],{"class":278},[109,115215,115216],{"class":111,"line":552},[109,115217,96873],{"class":278},[109,115219,115220],{"class":111,"line":557},[109,115221,158],{"emptyLinePlaceholder":157},[109,115223,115224],{"class":111,"line":584},[109,115225,158],{"emptyLinePlaceholder":157},[109,115227,115228,115230,115233,115235,115237,115239,115242],{"class":111,"line":611},[109,115229,15867],{"class":122},[109,115231,115232],{"class":211}," ReacherEnv",[109,115234,714],{"class":126},[109,115236,114715],{"class":211},[109,115238,2090],{"class":126},[109,115240,115241],{"class":211},"Env",[109,115243,31961],{"class":126},[109,115245,115246,115249,115251,115253,115256],{"class":111,"line":616},[109,115247,115248],{"class":126},"    metadata ",[109,115250,130],{"class":122},[109,115252,5785],{"class":126},[109,115254,115255],{"class":278},"\"render_modes\"",[109,115257,115258],{"class":126},": []}\n",[109,115260,115261],{"class":111,"line":633},[109,115262,158],{"emptyLinePlaceholder":157},[109,115264,115265,115267,115269,115272,115274],{"class":111,"line":649},[109,115266,31976],{"class":122},[109,115268,31979],{"class":133},[109,115270,115271],{"class":126},"(self) -> ",[109,115273,96861],{"class":133},[109,115275,5082],{"class":126},[109,115277,115278,115280,115282,115284],{"class":111,"line":676},[109,115279,31992],{"class":133},[109,115281,18434],{"class":126},[109,115283,32004],{"class":133},[109,115285,803],{"class":126},[109,115287,115288,115290,115293,115295,115297,115299],{"class":111,"line":703},[109,115289,32020],{"class":133},[109,115291,115292],{"class":126},".model ",[109,115294,130],{"class":122},[109,115296,102587],{"class":126},[109,115298,102489],{"class":133},[109,115300,1330],{"class":126},[109,115302,115303,115305,115308,115310,115313,115315],{"class":111,"line":708},[109,115304,32020],{"class":133},[109,115306,115307],{"class":126},".data ",[109,115309,130],{"class":122},[109,115311,115312],{"class":126}," mujoco.MjData(",[109,115314,31998],{"class":133},[109,115316,115317],{"class":126},".model)\n",[109,115319,115320],{"class":111,"line":723},[109,115321,158],{"emptyLinePlaceholder":157},[109,115323,115324,115326,115329,115331,115334,115336,115339,115341],{"class":111,"line":728},[109,115325,32020],{"class":133},[109,115327,115328],{"class":126},".tip_site_id ",[109,115330,130],{"class":122},[109,115332,115333],{"class":126}," mujoco.mj_name2id(",[109,115335,31998],{"class":133},[109,115337,115338],{"class":126},".model, mujoco.mjtObj.mjOBJ_SITE, ",[109,115340,112711],{"class":278},[109,115342,1330],{"class":126},[109,115344,115345,115347,115350,115352,115354,115356,115358,115360],{"class":111,"line":739},[109,115346,32020],{"class":133},[109,115348,115349],{"class":126},".target_site_id ",[109,115351,130],{"class":122},[109,115353,115333],{"class":126},[109,115355,31998],{"class":133},[109,115357,115338],{"class":126},[109,115359,113134],{"class":278},[109,115361,1330],{"class":126},[109,115363,115364,115366,115368,115370,115372,115374,115377,115379,115381,115383,115385],{"class":111,"line":9352},[109,115365,3852],{"class":122},[109,115367,40048],{"class":133},[109,115369,115328],{"class":126},[109,115371,1320],{"class":122},[109,115373,734],{"class":133},[109,115375,115376],{"class":122}," or",[109,115378,40048],{"class":133},[109,115380,115349],{"class":126},[109,115382,1320],{"class":122},[109,115384,734],{"class":133},[109,115386,5082],{"class":126},[109,115388,115389,115392,115394,115396,115399],{"class":111,"line":9364},[109,115390,115391],{"class":122},"            raise",[109,115393,104610],{"class":133},[109,115395,714],{"class":126},[109,115397,115398],{"class":278},"\"required sites not found\"",[109,115400,1330],{"class":126},[109,115402,115403],{"class":111,"line":9376},[109,115404,158],{"emptyLinePlaceholder":157},[109,115406,115407,115409,115411,115413],{"class":111,"line":11034},[109,115408,32020],{"class":133},[109,115410,115042],{"class":126},[109,115412,130],{"class":122},[109,115414,55602],{"class":133},[109,115416,115417,115419,115422,115424],{"class":111,"line":11059},[109,115418,32020],{"class":133},[109,115420,115421],{"class":126},".max_steps ",[109,115423,130],{"class":122},[109,115425,115426],{"class":133}," 200\n",[109,115428,115429,115431,115433,115435],{"class":111,"line":11082},[109,115430,32020],{"class":133},[109,115432,114881],{"class":126},[109,115434,130],{"class":122},[109,115436,48508],{"class":133},[109,115438,115439],{"class":111,"line":11106},[109,115440,158],{"emptyLinePlaceholder":157},[109,115442,115443,115445,115447,115449,115451,115453,115455,115457,115459,115461,115463,115465,115467,115469,115471,115473,115475,115477,115479,115481],{"class":111,"line":11111},[109,115444,32020],{"class":133},[109,115446,114929],{"class":126},[109,115448,130],{"class":122},[109,115450,114934],{"class":126},[109,115452,114937],{"class":6553},[109,115454,114940],{"class":122},[109,115456,103578],{"class":133},[109,115458,13608],{"class":126},[109,115460,114947],{"class":6553},[109,115462,130],{"class":122},[109,115464,103578],{"class":133},[109,115466,13608],{"class":126},[109,115468,97138],{"class":6553},[109,115470,130],{"class":122},[109,115472,714],{"class":126},[109,115474,1618],{"class":133},[109,115476,114964],{"class":126},[109,115478,94675],{"class":6553},[109,115480,130],{"class":122},[109,115482,114971],{"class":126},[109,115484,115485,115487,115489,115491,115493,115495,115497,115499,115501,115503,115505,115507,115509,115511,115513,115515,115517,115519],{"class":111,"line":11116},[109,115486,32020],{"class":133},[109,115488,114990],{"class":126},[109,115490,130],{"class":122},[109,115492,114934],{"class":126},[109,115494,114937],{"class":6553},[109,115496,114940],{"class":122},[109,115498,115001],{"class":126},[109,115500,114947],{"class":6553},[109,115502,130],{"class":122},[109,115504,115001],{"class":126},[109,115506,97138],{"class":6553},[109,115508,130],{"class":122},[109,115510,714],{"class":126},[109,115512,1008],{"class":133},[109,115514,114964],{"class":126},[109,115516,94675],{"class":6553},[109,115518,130],{"class":122},[109,115520,114971],{"class":126},[109,115522,115523],{"class":111,"line":11121},[109,115524,158],{"emptyLinePlaceholder":157},[109,115526,115527,115529,115532],{"class":111,"line":11130},[109,115528,31976],{"class":122},[109,115530,115531],{"class":211}," _get_obs",[109,115533,115534],{"class":126},"(self) -> np.ndarray:\n",[109,115536,115537,115539,115541,115543,115546,115548],{"class":111,"line":11135},[109,115538,113312],{"class":126},[109,115540,130],{"class":122},[109,115542,40048],{"class":133},[109,115544,115545],{"class":126},".data.site_xpos[",[109,115547,31998],{"class":133},[109,115549,115550],{"class":126},".tip_site_id].copy()\n",[109,115552,115553,115555,115557,115559,115561,115563],{"class":111,"line":11141},[109,115554,113325],{"class":126},[109,115556,130],{"class":122},[109,115558,40048],{"class":133},[109,115560,115545],{"class":126},[109,115562,31998],{"class":133},[109,115564,115565],{"class":126},".target_site_id].copy()\n",[109,115567,115568,115570,115572,115575,115577,115580,115582],{"class":111,"line":11162},[109,115569,111357],{"class":126},[109,115571,130],{"class":122},[109,115573,115574],{"class":126}," np.concatenate([",[109,115576,31998],{"class":133},[109,115578,115579],{"class":126},".data.qpos.copy(), ",[109,115581,31998],{"class":133},[109,115583,115584],{"class":126},".data.qvel.copy(), tip, target])\n",[109,115586,115587,115589],{"class":111,"line":11168},[109,115588,15925],{"class":122},[109,115590,115591],{"class":126}," obs.astype(np.float32)\n",[109,115593,115594],{"class":111,"line":11182},[109,115595,158],{"emptyLinePlaceholder":157},[109,115597,115598,115600,115603,115605,115607],{"class":111,"line":11188},[109,115599,31976],{"class":122},[109,115601,115602],{"class":211}," _get_reward",[109,115604,115271],{"class":126},[109,115606,1584],{"class":133},[109,115608,5082],{"class":126},[109,115610,115611,115613,115615,115617,115619,115621],{"class":111,"line":11215},[109,115612,113312],{"class":126},[109,115614,130],{"class":122},[109,115616,40048],{"class":133},[109,115618,115545],{"class":126},[109,115620,31998],{"class":133},[109,115622,115623],{"class":126},".tip_site_id]\n",[109,115625,115626,115628,115630,115632,115634,115636],{"class":111,"line":11224},[109,115627,113325],{"class":126},[109,115629,130],{"class":122},[109,115631,40048],{"class":133},[109,115633,115545],{"class":126},[109,115635,31998],{"class":133},[109,115637,115638],{"class":126},".target_site_id]\n",[109,115640,115641,115644,115646,115648,115650],{"class":111,"line":11230},[109,115642,115643],{"class":126},"        dist ",[109,115645,130],{"class":122},[109,115647,112776],{"class":126},[109,115649,2064],{"class":122},[109,115651,112781],{"class":126},[109,115653,115654,115657,115659,115661,115663,115666,115668],{"class":111,"line":11238},[109,115655,115656],{"class":126},"        control_cost ",[109,115658,130],{"class":122},[109,115660,113212],{"class":133},[109,115662,797],{"class":122},[109,115664,115665],{"class":126}," np.sum(np.square(",[109,115667,31998],{"class":133},[109,115669,115670],{"class":126},".data.ctrl))\n",[109,115672,115673,115675,115677,115679,115681,115683,115685],{"class":111,"line":11243},[109,115674,15925],{"class":122},[109,115676,110972],{"class":133},[109,115678,714],{"class":126},[109,115680,2064],{"class":122},[109,115682,112771],{"class":126},[109,115684,2064],{"class":122},[109,115686,113234],{"class":126},[109,115688,115689],{"class":111,"line":17777},[109,115690,158],{"emptyLinePlaceholder":157},[109,115692,115693,115695,115698,115701,115703,115706,115708,115710,115712,115714,115716,115719,115722,115724,115726,115728,115730],{"class":111,"line":17783},[109,115694,31976],{"class":122},[109,115696,115697],{"class":211}," reset",[109,115699,115700],{"class":126},"(self, ",[109,115702,1988],{"class":122},[109,115704,115705],{"class":126},", seed: ",[109,115707,123],{"class":133},[109,115709,26284],{"class":122},[109,115711,40108],{"class":133},[109,115713,14737],{"class":122},[109,115715,40108],{"class":133},[109,115717,115718],{"class":126},", options: ",[109,115720,115721],{"class":133},"dict",[109,115723,26284],{"class":122},[109,115725,40108],{"class":133},[109,115727,14737],{"class":122},[109,115729,40108],{"class":133},[109,115731,31961],{"class":126},[109,115733,115734,115736,115739,115742,115744],{"class":111,"line":17806},[109,115735,31992],{"class":133},[109,115737,115738],{"class":126},"().reset(",[109,115740,115741],{"class":6553},"seed",[109,115743,130],{"class":122},[109,115745,115746],{"class":126},"seed)\n",[109,115748,115749,115752,115754,115757,115759],{"class":111,"line":17812},[109,115750,115751],{"class":126},"        mujoco.mj_resetData(",[109,115753,31998],{"class":133},[109,115755,115756],{"class":126},".model, ",[109,115758,31998],{"class":133},[109,115760,115761],{"class":126},".data)\n",[109,115763,115764],{"class":111,"line":17835},[109,115765,158],{"emptyLinePlaceholder":157},[109,115767,115768,115770,115773,115775,115777,115780,115782,115784,115786,115788,115790,115792,115794,115796,115798,115800,115802],{"class":111,"line":17849},[109,115769,32020],{"class":133},[109,115771,115772],{"class":126},".data.qpos[:] ",[109,115774,130],{"class":122},[109,115776,40048],{"class":133},[109,115778,115779],{"class":126},".np_random.uniform(",[109,115781,114937],{"class":6553},[109,115783,114940],{"class":122},[109,115785,87385],{"class":133},[109,115787,13608],{"class":126},[109,115789,114947],{"class":6553},[109,115791,130],{"class":122},[109,115793,87385],{"class":133},[109,115795,13608],{"class":126},[109,115797,32671],{"class":6553},[109,115799,130],{"class":122},[109,115801,31998],{"class":133},[109,115803,115804],{"class":126},".model.nq)\n",[109,115806,115807,115809,115812,115814],{"class":111,"line":17869},[109,115808,32020],{"class":133},[109,115810,115811],{"class":126},".data.qvel[:] ",[109,115813,130],{"class":122},[109,115815,105936],{"class":133},[109,115817,115818,115821,115823,115825,115827],{"class":111,"line":17875},[109,115819,115820],{"class":126},"        mujoco.mj_forward(",[109,115822,31998],{"class":133},[109,115824,115756],{"class":126},[109,115826,31998],{"class":133},[109,115828,115761],{"class":126},[109,115830,115831],{"class":111,"line":17886},[109,115832,158],{"emptyLinePlaceholder":157},[109,115834,115835,115837,115839,115841],{"class":111,"line":17909},[109,115836,32020],{"class":133},[109,115838,114881],{"class":126},[109,115840,130],{"class":122},[109,115842,48508],{"class":133},[109,115844,115845,115847,115849],{"class":111,"line":17931},[109,115846,15925],{"class":122},[109,115848,40048],{"class":133},[109,115850,115851],{"class":126},"._get_obs(), {}\n",[109,115853,115854],{"class":111,"line":17936},[109,115855,158],{"emptyLinePlaceholder":157},[109,115857,115858,115860,115863],{"class":111,"line":17942},[109,115859,31976],{"class":122},[109,115861,115862],{"class":211}," step",[109,115864,115865],{"class":126},"(self, action):\n",[109,115867,115868,115870,115872,115875,115877,115879],{"class":111,"line":17956},[109,115869,111397],{"class":126},[109,115871,130],{"class":122},[109,115873,115874],{"class":126}," np.asarray(action, ",[109,115876,94675],{"class":6553},[109,115878,130],{"class":122},[109,115880,114971],{"class":126},[109,115882,115883,115885,115887,115889,115891,115894,115896],{"class":111,"line":17969},[109,115884,111397],{"class":126},[109,115886,130],{"class":122},[109,115888,108622],{"class":126},[109,115890,31998],{"class":133},[109,115892,115893],{"class":126},".action_space.low, ",[109,115895,31998],{"class":133},[109,115897,115898],{"class":126},".action_space.high)\n",[109,115900,115901],{"class":111,"line":17974},[109,115902,158],{"emptyLinePlaceholder":157},[109,115904,115905,115907,115910,115912],{"class":111,"line":17988},[109,115906,32020],{"class":133},[109,115908,115909],{"class":126},".data.ctrl[:] ",[109,115911,130],{"class":122},[109,115913,108645],{"class":126},[109,115915,115916,115918,115920,115922,115924,115926,115928],{"class":111,"line":17993},[109,115917,4747],{"class":122},[109,115919,102676],{"class":126},[109,115921,27218],{"class":122},[109,115923,33618],{"class":133},[109,115925,714],{"class":126},[109,115927,31998],{"class":133},[109,115929,115930],{"class":126},".frame_skip):\n",[109,115932,115933,115936,115938,115940,115942],{"class":111,"line":17999},[109,115934,115935],{"class":126},"            mujoco.mj_step(",[109,115937,31998],{"class":133},[109,115939,115756],{"class":126},[109,115941,31998],{"class":133},[109,115943,115761],{"class":126},[109,115945,115946],{"class":111,"line":18004},[109,115947,158],{"emptyLinePlaceholder":157},[109,115949,115950,115952,115954,115956],{"class":111,"line":18018},[109,115951,32020],{"class":133},[109,115953,114881],{"class":126},[109,115955,10795],{"class":122},[109,115957,56874],{"class":133},[109,115959,115960],{"class":111,"line":18023},[109,115961,158],{"emptyLinePlaceholder":157},[109,115963,115964,115966,115968,115970],{"class":111,"line":18028},[109,115965,111357],{"class":126},[109,115967,130],{"class":122},[109,115969,40048],{"class":133},[109,115971,115972],{"class":126},"._get_obs()\n",[109,115974,115975,115977,115979,115981],{"class":111,"line":18042},[109,115976,111462],{"class":126},[109,115978,130],{"class":122},[109,115980,40048],{"class":133},[109,115982,115983],{"class":126},"._get_reward()\n",[109,115985,115986],{"class":111,"line":18054},[109,115987,158],{"emptyLinePlaceholder":157},[109,115989,115990,115992,115994,115996,115998,116000],{"class":111,"line":18059},[109,115991,113312],{"class":126},[109,115993,130],{"class":122},[109,115995,40048],{"class":133},[109,115997,115545],{"class":126},[109,115999,31998],{"class":133},[109,116001,115623],{"class":126},[109,116003,116004,116006,116008,116010,116012,116014],{"class":111,"line":18072},[109,116005,113325],{"class":126},[109,116007,130],{"class":122},[109,116009,40048],{"class":133},[109,116011,115545],{"class":126},[109,116013,31998],{"class":133},[109,116015,115638],{"class":126},[109,116017,116018,116020,116022,116024,116027,116029],{"class":111,"line":18077},[109,116019,115643],{"class":126},[109,116021,130],{"class":122},[109,116023,110972],{"class":133},[109,116025,116026],{"class":126},"(np.linalg.norm(tip ",[109,116028,2064],{"class":122},[109,116030,116031],{"class":126}," target))\n",[109,116033,116034],{"class":111,"line":18082},[109,116035,158],{"emptyLinePlaceholder":157},[109,116037,116038,116041,116043,116045,116047],{"class":111,"line":18087},[109,116039,116040],{"class":126},"        terminated ",[109,116042,130],{"class":122},[109,116044,114864],{"class":126},[109,116046,1320],{"class":122},[109,116048,114869],{"class":133},[109,116050,116051,116054,116056,116058,116060,116062,116064],{"class":111,"line":18100},[109,116052,116053],{"class":126},"        truncated ",[109,116055,130],{"class":122},[109,116057,40048],{"class":133},[109,116059,114881],{"class":126},[109,116061,3086],{"class":122},[109,116063,40048],{"class":133},[109,116065,114888],{"class":126},[109,116067,116068,116071,116073,116075,116078],{"class":111,"line":18105},[109,116069,116070],{"class":126},"        info ",[109,116072,130],{"class":122},[109,116074,5785],{"class":126},[109,116076,116077],{"class":278},"\"distance\"",[109,116079,116080],{"class":126},": dist}\n",[109,116082,116083,116085],{"class":111,"line":33808},[109,116084,15925],{"class":122},[109,116086,116087],{"class":126}," obs, reward, terminated, truncated, info\n",[109,116089,116090],{"class":111,"line":33814},[109,116091,158],{"emptyLinePlaceholder":157},[109,116093,116094],{"class":111,"line":33820},[109,116095,158],{"emptyLinePlaceholder":157},[109,116097,116098,116100,116102,116104,116106],{"class":111,"line":33826},[109,116099,33122],{"class":122},[109,116101,212],{"class":211},[109,116103,102573],{"class":126},[109,116105,96861],{"class":133},[109,116107,5082],{"class":126},[109,116109,116110,116113,116115],{"class":111,"line":33832},[109,116111,116112],{"class":126},"    env ",[109,116114,130],{"class":122},[109,116116,116117],{"class":126}," ReacherEnv()\n",[109,116119,116120,116123,116125,116128,116130,116132,116134],{"class":111,"line":33843},[109,116121,116122],{"class":126},"    obs, info ",[109,116124,130],{"class":122},[109,116126,116127],{"class":126}," env.reset(",[109,116129,115741],{"class":6553},[109,116131,130],{"class":122},[109,116133,1314],{"class":133},[109,116135,1330],{"class":126},[109,116137,116138,116140,116142,116145],{"class":111,"line":33849},[109,116139,32474],{"class":133},[109,116141,714],{"class":126},[109,116143,116144],{"class":278},"\"initial obs shape:\"",[109,116146,116147],{"class":126},", obs.shape)\n",[109,116149,116150,116152,116154,116157],{"class":111,"line":33869},[109,116151,32474],{"class":133},[109,116153,714],{"class":126},[109,116155,116156],{"class":278},"\"initial info:\"",[109,116158,116159],{"class":126},", info)\n",[109,116161,116162],{"class":111,"line":33875},[109,116163,158],{"emptyLinePlaceholder":157},[109,116165,116166,116168,116170],{"class":111,"line":33886},[109,116167,111328],{"class":126},[109,116169,130],{"class":122},[109,116171,105936],{"class":133},[109,116173,116174,116176,116178,116180,116182,116184,116186],{"class":111,"line":33892},[109,116175,1302],{"class":122},[109,116177,32791],{"class":126},[109,116179,27218],{"class":122},[109,116181,33618],{"class":133},[109,116183,714],{"class":126},[109,116185,2232],{"class":133},[109,116187,31961],{"class":126},[109,116189,116190,116192,116194],{"class":111,"line":33898},[109,116191,111397],{"class":126},[109,116193,130],{"class":122},[109,116195,116196],{"class":126}," env.action_space.sample()\n",[109,116198,116199,116202,116204],{"class":111,"line":33904},[109,116200,116201],{"class":126},"        obs, reward, terminated, truncated, info ",[109,116203,130],{"class":122},[109,116205,114590],{"class":126},[109,116207,116208,116210,116212],{"class":111,"line":33910},[109,116209,111472],{"class":126},[109,116211,10795],{"class":122},[109,116213,111477],{"class":126},[109,116215,116216,116218,116220,116222,116224,116227,116229,116231,116234,116236,116238,116241,116243,116245,116248,116250,116252,116254],{"class":111,"line":33916},[109,116217,33626],{"class":133},[109,116219,714],{"class":126},[109,116221,111506],{"class":278},[109,116223,111509],{"class":126},[109,116225,116226],{"class":278},"\"reward:\"",[109,116228,13608],{"class":126},[109,116230,33193],{"class":133},[109,116232,116233],{"class":126},"(reward, ",[109,116235,1612],{"class":133},[109,116237,111520],{"class":126},[109,116239,116240],{"class":278},"\"distance:\"",[109,116242,13608],{"class":126},[109,116244,33193],{"class":133},[109,116246,116247],{"class":126},"(info[",[109,116249,116077],{"class":278},[109,116251,113377],{"class":126},[109,116253,1612],{"class":133},[109,116255,31672],{"class":126},[109,116257,116258,116260,116263,116266],{"class":111,"line":33922},[109,116259,3852],{"class":122},[109,116261,116262],{"class":126}," terminated ",[109,116264,116265],{"class":122},"or",[109,116267,116268],{"class":126}," truncated:\n",[109,116270,116271],{"class":111,"line":33928},[109,116272,116273],{"class":122},"            break\n",[109,116275,116276],{"class":111,"line":33948},[109,116277,158],{"emptyLinePlaceholder":157},[109,116279,116280,116282,116284,116286,116288,116290,116292,116294],{"class":111,"line":33954},[109,116281,32474],{"class":133},[109,116283,714],{"class":126},[109,116285,111551],{"class":278},[109,116287,13608],{"class":126},[109,116289,33193],{"class":133},[109,116291,111558],{"class":126},[109,116293,1612],{"class":133},[109,116295,31672],{"class":126},[109,116297,116298],{"class":111,"line":33970},[109,116299,158],{"emptyLinePlaceholder":157},[109,116301,116302],{"class":111,"line":33976},[109,116303,158],{"emptyLinePlaceholder":157},[109,116305,116306,116308,116310,116312,116314],{"class":111,"line":33990},[109,116307,2922],{"class":122},[109,116309,32395],{"class":133},[109,116311,102734],{"class":122},[109,116313,102737],{"class":278},[109,116315,5082],{"class":126},[109,116317,116318],{"class":111,"line":33996},[109,116319,102744],{"class":126},[19,116321,104745],{},[99,116323,116325],{"className":24996,"code":116324,"language":24998,"meta":104,"style":104},"touch ch8_gym_env.py\n",[106,116326,116327],{"__ignoreMap":104},[109,116328,116329,116331],{"class":111,"line":112},[109,116330,102458],{"class":211},[109,116332,116333],{"class":278}," ch8_gym_env.py\n",[19,116335,111619],{},[99,116337,116339],{"className":24996,"code":116338,"language":24998,"meta":104,"style":104},"python ch8_gym_env.py\n",[106,116340,116341],{"__ignoreMap":104},[109,116342,116343,116345],{"class":111,"line":112},[109,116344,31555],{"class":211},[109,116346,116333],{"class":278},[51,116348,102747],{"id":102747},[19,116350,116351],{},"继承 Gymnasium 环境：",[99,116353,116355],{"className":31553,"code":116354,"language":31555,"meta":104,"style":104},"class ReacherEnv(gym.Env):\n",[106,116356,116357],{"__ignoreMap":104},[109,116358,116359,116361,116363,116365,116367,116369,116371],{"class":111,"line":112},[109,116360,15867],{"class":122},[109,116362,115232],{"class":211},[109,116364,714],{"class":126},[109,116366,114715],{"class":211},[109,116368,2090],{"class":126},[109,116370,115241],{"class":211},[109,116372,31961],{"class":126},[19,116374,116375],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116377,116378],{},"初始化模型：",[99,116380,116382],{"className":31553,"code":116381,"language":31555,"meta":104,"style":104},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[106,116383,116384,116398],{"__ignoreMap":104},[109,116385,116386,116388,116390,116392,116394,116396],{"class":111,"line":112},[109,116387,31998],{"class":133},[109,116389,115292],{"class":126},[109,116391,130],{"class":122},[109,116393,102587],{"class":126},[109,116395,102489],{"class":133},[109,116397,1330],{"class":126},[109,116399,116400,116402,116404,116406,116408,116410],{"class":111,"line":119},[109,116401,31998],{"class":133},[109,116403,115307],{"class":126},[109,116405,130],{"class":122},[109,116407,115312],{"class":126},[109,116409,31998],{"class":133},[109,116411,115317],{"class":126},[19,116413,116414,116415,116417],{},"这和前面章节一样，只是现在放到了类的 ",[106,116416,32004],{}," 里。",[19,116419,116420],{},"缓存 site ID：",[99,116422,116424],{"className":31553,"code":116423,"language":31555,"meta":104,"style":104},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[106,116425,116426,116440],{"__ignoreMap":104},[109,116427,116428,116430,116432,116434,116436,116438],{"class":111,"line":112},[109,116429,31998],{"class":133},[109,116431,115328],{"class":126},[109,116433,130],{"class":122},[109,116435,115333],{"class":126},[109,116437,90729],{"class":133},[109,116439,1330],{"class":126},[109,116441,116442,116444,116446,116448,116450,116452],{"class":111,"line":119},[109,116443,31998],{"class":133},[109,116445,115349],{"class":126},[109,116447,130],{"class":122},[109,116449,115333],{"class":126},[109,116451,90729],{"class":133},[109,116453,1330],{"class":126},[19,116455,116456],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116458,116459],{},"reset：",[99,116461,116463],{"className":31553,"code":116462,"language":31555,"meta":104,"style":104},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[106,116464,116465],{"__ignoreMap":104},[109,116466,116467,116469,116471,116473,116475,116477,116479,116481,116483,116485,116487,116489,116491,116493,116495,116497,116499],{"class":111,"line":112},[109,116468,33122],{"class":122},[109,116470,115697],{"class":211},[109,116472,115700],{"class":126},[109,116474,1988],{"class":122},[109,116476,115705],{"class":126},[109,116478,123],{"class":133},[109,116480,26284],{"class":122},[109,116482,40108],{"class":133},[109,116484,14737],{"class":122},[109,116486,40108],{"class":133},[109,116488,115718],{"class":126},[109,116490,115721],{"class":133},[109,116492,26284],{"class":122},[109,116494,40108],{"class":133},[109,116496,14737],{"class":122},[109,116498,40108],{"class":133},[109,116500,31961],{"class":126},[19,116502,116503,116505],{},[106,116504,71231],{}," 做四件事：",[765,116507,116508,116511,116514,116517],{},[30,116509,116510],{},"设置随机种子。",[30,116512,116513],{},"重置 MuJoCo data。",[30,116515,116516],{},"随机初始化关节角。",[30,116518,116519],{},"返回初始观测和 info。",[19,116521,116522],{},"step：",[99,116524,116526],{"className":31553,"code":116525,"language":31555,"meta":104,"style":104},"def step(self, action):\n",[106,116527,116528],{"__ignoreMap":104},[109,116529,116530,116532,116534],{"class":111,"line":112},[109,116531,33122],{"class":122},[109,116533,115862],{"class":211},[109,116535,115865],{"class":126},[19,116537,116538,116540],{},[106,116539,108309],{}," 做六件事：",[765,116542,116543,116546,116552,116555,116558,116561],{},[30,116544,116545],{},"检查并裁剪 action。",[30,116547,116548,116549,29560],{},"写入 ",[106,116550,116551],{},"self.data.ctrl",[30,116553,116554],{},"连续推进若干个 MuJoCo 物理步。",[30,116556,116557],{},"计算新观测。",[30,116559,116560],{},"计算奖励和结束条件。",[30,116562,116563],{},"返回 Gymnasium 标准五元组。",[51,116565,102883],{"id":102883},[99,116567,116569],{"className":31553,"code":116568,"language":31555,"meta":104,"style":104},"import gymnasium as gym\n",[106,116570,116571],{"__ignoreMap":104},[109,116572,116573,116575,116577,116579],{"class":111,"line":112},[109,116574,31567],{"class":122},[109,116576,115070],{"class":126},[109,116578,32558],{"class":122},[109,116580,115075],{"class":126},[19,116582,116583,116584,116586,116587,116590],{},"导入 Gymnasium，并起别名 ",[106,116585,114715],{},"。后面写 ",[106,116588,116589],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[99,116592,116594],{"className":31553,"code":116593,"language":31555,"meta":104,"style":104},"from gymnasium import spaces\n",[106,116595,116596],{"__ignoreMap":104},[109,116597,116598,116600,116602,116604],{"class":111,"line":112},[109,116599,31912],{"class":122},[109,116601,115070],{"class":126},[109,116603,31567],{"class":122},[109,116605,115102],{"class":126},[19,116607,116608,116609,116612],{},"导入空间定义工具。",[106,116610,116611],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[99,116614,116615],{"className":31553,"code":116354,"language":31555,"meta":104,"style":104},[106,116616,116617],{"__ignoreMap":104},[109,116618,116619,116621,116623,116625,116627,116629,116631],{"class":111,"line":112},[109,116620,15867],{"class":122},[109,116622,115232],{"class":211},[109,116624,714],{"class":126},[109,116626,114715],{"class":211},[109,116628,2090],{"class":126},[109,116630,115241],{"class":211},[109,116632,31961],{"class":126},[19,116634,116635,116636,116639,116640,116642,116643,102193,116645,116647],{},"定义一个类，名字叫 ",[106,116637,116638],{},"ReacherEnv","。括号里的 ",[106,116641,116589],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[106,116644,71231],{},[106,116646,108309],{}," 这两个核心方法。",[99,116649,116651],{"className":31553,"code":116650,"language":31555,"meta":104,"style":104},"metadata = {\"render_modes\": []}\n",[106,116652,116653],{"__ignoreMap":104},[109,116654,116655,116658,116660,116662,116664],{"class":111,"line":112},[109,116656,116657],{"class":126},"metadata ",[109,116659,130],{"class":122},[109,116661,5785],{"class":126},[109,116663,115255],{"class":278},[109,116665,115258],{"class":126},[19,116667,116668],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[99,116670,116672],{"className":31553,"code":116671,"language":31555,"meta":104,"style":104},"def __init__(self) -> None:\n",[106,116673,116674],{"__ignoreMap":104},[109,116675,116676,116678,116680,116682,116684],{"class":111,"line":112},[109,116677,33122],{"class":122},[109,116679,31979],{"class":133},[109,116681,115271],{"class":126},[109,116683,96861],{"class":133},[109,116685,5082],{"class":126},[19,116687,116688,116690,116691,29560],{},[106,116689,32004],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[106,116692,116693],{},"env = ReacherEnv()",[99,116695,116697],{"className":31553,"code":116696,"language":31555,"meta":104,"style":104},"super().__init__()\n",[106,116698,116699],{"__ignoreMap":104},[109,116700,116701,116704,116706,116708],{"class":111,"line":112},[109,116702,116703],{"class":133},"super",[109,116705,18434],{"class":126},[109,116707,32004],{"class":133},[109,116709,803],{"class":126},[19,116711,116712,116713,116715],{},"调用父类 ",[106,116714,116589],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[99,116717,116718],{"className":31553,"code":116381,"language":31555,"meta":104,"style":104},[106,116719,116720,116734],{"__ignoreMap":104},[109,116721,116722,116724,116726,116728,116730,116732],{"class":111,"line":112},[109,116723,31998],{"class":133},[109,116725,115292],{"class":126},[109,116727,130],{"class":122},[109,116729,102587],{"class":126},[109,116731,102489],{"class":133},[109,116733,1330],{"class":126},[109,116735,116736,116738,116740,116742,116744,116746],{"class":111,"line":119},[109,116737,31998],{"class":133},[109,116739,115307],{"class":126},[109,116741,130],{"class":122},[109,116743,115312],{"class":126},[109,116745,31998],{"class":133},[109,116747,115317],{"class":126},[19,116749,116750,116751,116753,116754,102193,116757,116760],{},"把 MuJoCo 模型和状态保存到 ",[106,116752,31998],{}," 上。",[106,116755,116756],{},"self.model",[106,116758,116759],{},"self.data"," 表示这个环境对象自己的模型和状态。",[99,116762,116763],{"className":31553,"code":116423,"language":31555,"meta":104,"style":104},[106,116764,116765,116779],{"__ignoreMap":104},[109,116766,116767,116769,116771,116773,116775,116777],{"class":111,"line":112},[109,116768,31998],{"class":133},[109,116770,115328],{"class":126},[109,116772,130],{"class":122},[109,116774,115333],{"class":126},[109,116776,90729],{"class":133},[109,116778,1330],{"class":126},[109,116780,116781,116783,116785,116787,116789,116791],{"class":111,"line":119},[109,116782,31998],{"class":133},[109,116784,115349],{"class":126},[109,116786,130],{"class":122},[109,116788,115333],{"class":126},[109,116790,90729],{"class":133},[109,116792,1330],{"class":126},[19,116794,116795,116796,102193,116799,116802],{},"提前查好 tip 和 target 的 site ID。这样 ",[106,116797,116798],{},"_get_obs",[106,116800,116801],{},"_get_reward"," 里就不用每次按名字查找。",[99,116804,116806],{"className":31553,"code":116805,"language":31555,"meta":104,"style":104},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[106,116807,116808,116818,116828],{"__ignoreMap":104},[109,116809,116810,116812,116814,116816],{"class":111,"line":112},[109,116811,31998],{"class":133},[109,116813,115042],{"class":126},[109,116815,130],{"class":122},[109,116817,55602],{"class":133},[109,116819,116820,116822,116824,116826],{"class":111,"line":119},[109,116821,31998],{"class":133},[109,116823,115421],{"class":126},[109,116825,130],{"class":122},[109,116827,115426],{"class":133},[109,116829,116830,116832,116834,116836],{"class":111,"line":140},[109,116831,31998],{"class":133},[109,116833,114881],{"class":126},[109,116835,130],{"class":122},[109,116837,48508],{"class":133},[19,116839,116840,116843,116844,116847,116848,116851],{},[106,116841,116842],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[106,116845,116846],{},"max_steps"," 是一个 episode 最多运行多少步。",[106,116849,116850],{},"steps"," 记录当前 episode 已经走了多少步。",[99,116853,116854],{"className":31553,"code":114920,"language":31555,"meta":104,"style":104},[106,116855,116856],{"__ignoreMap":104},[109,116857,116858,116860,116862,116864,116866,116868,116870,116872,116874,116876,116878,116880,116882,116884,116886,116888,116890,116892,116894,116896],{"class":111,"line":112},[109,116859,31998],{"class":133},[109,116861,114929],{"class":126},[109,116863,130],{"class":122},[109,116865,114934],{"class":126},[109,116867,114937],{"class":6553},[109,116869,114940],{"class":122},[109,116871,103578],{"class":133},[109,116873,13608],{"class":126},[109,116875,114947],{"class":6553},[109,116877,130],{"class":122},[109,116879,103578],{"class":133},[109,116881,13608],{"class":126},[109,116883,97138],{"class":6553},[109,116885,130],{"class":122},[109,116887,714],{"class":126},[109,116889,1618],{"class":133},[109,116891,114964],{"class":126},[109,116893,94675],{"class":6553},[109,116895,130],{"class":122},[109,116897,114971],{"class":126},[19,116899,116900,116901,116904,116905,102193,116908,116911],{},"定义动作空间。",[106,116902,116903],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[106,116906,116907],{},"low=-1.0",[106,116909,116910],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[99,116913,116914],{"className":31553,"code":114981,"language":31555,"meta":104,"style":104},[106,116915,116916],{"__ignoreMap":104},[109,116917,116918,116920,116922,116924,116926,116928,116930,116932,116934,116936,116938,116940,116942,116944,116946,116948,116950,116952],{"class":111,"line":112},[109,116919,31998],{"class":133},[109,116921,114990],{"class":126},[109,116923,130],{"class":122},[109,116925,114934],{"class":126},[109,116927,114937],{"class":6553},[109,116929,114940],{"class":122},[109,116931,115001],{"class":126},[109,116933,114947],{"class":6553},[109,116935,130],{"class":122},[109,116937,115001],{"class":126},[109,116939,97138],{"class":6553},[109,116941,130],{"class":122},[109,116943,714],{"class":126},[109,116945,1008],{"class":133},[109,116947,114964],{"class":126},[109,116949,94675],{"class":6553},[109,116951,130],{"class":122},[109,116953,114971],{"class":126},[19,116955,116956,116957,116960,116961,116964],{},"定义观测空间。",[106,116958,116959],{},"shape=(10,)"," 表示观测是 10 个数。",[106,116962,116963],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[99,116966,116968],{"className":31553,"code":116967,"language":31555,"meta":104,"style":104},"def _get_obs(self) -> np.ndarray:\n",[106,116969,116970],{"__ignoreMap":104},[109,116971,116972,116974,116976],{"class":111,"line":112},[109,116973,33122],{"class":122},[109,116975,115531],{"class":211},[109,116977,115534],{"class":126},[19,116979,116980,116981,116983],{},"定义内部函数，用来生成观测。函数名前面的 ",[106,116982,2522],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[99,116985,116987],{"className":31553,"code":116986,"language":31555,"meta":104,"style":104},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[106,116988,116989,117003],{"__ignoreMap":104},[109,116990,116991,116993,116995,116997,116999,117001],{"class":111,"line":112},[109,116992,112743],{"class":126},[109,116994,130],{"class":122},[109,116996,40048],{"class":133},[109,116998,115545],{"class":126},[109,117000,31998],{"class":133},[109,117002,115550],{"class":126},[109,117004,117005,117007,117009,117011,117013,117015],{"class":111,"line":119},[109,117006,112753],{"class":126},[109,117008,130],{"class":122},[109,117010,40048],{"class":133},[109,117012,115545],{"class":126},[109,117014,31998],{"class":133},[109,117016,115565],{"class":126},[19,117018,117019],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[99,117021,117023],{"className":31553,"code":117022,"language":31555,"meta":104,"style":104},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[106,117024,117025,117041],{"__ignoreMap":104},[109,117026,117027,117029,117031,117033,117035,117037,117039],{"class":111,"line":112},[109,117028,112029],{"class":126},[109,117030,130],{"class":122},[109,117032,115574],{"class":126},[109,117034,31998],{"class":133},[109,117036,115579],{"class":126},[109,117038,31998],{"class":133},[109,117040,115584],{"class":126},[109,117042,117043,117045],{"class":111,"line":119},[109,117044,18219],{"class":122},[109,117046,115591],{"class":126},[19,117048,117049,117050,117053,117054,117056],{},"拼接观测，并转换成 ",[106,117051,117052],{},"float32","。很多强化学习库默认使用 ",[106,117055,117052],{},"，所以这里主动转换。",[99,117058,117059],{"className":31553,"code":116462,"language":31555,"meta":104,"style":104},[106,117060,117061],{"__ignoreMap":104},[109,117062,117063,117065,117067,117069,117071,117073,117075,117077,117079,117081,117083,117085,117087,117089,117091,117093,117095],{"class":111,"line":112},[109,117064,33122],{"class":122},[109,117066,115697],{"class":211},[109,117068,115700],{"class":126},[109,117070,1988],{"class":122},[109,117072,115705],{"class":126},[109,117074,123],{"class":133},[109,117076,26284],{"class":122},[109,117078,40108],{"class":133},[109,117080,14737],{"class":122},[109,117082,40108],{"class":133},[109,117084,115718],{"class":126},[109,117086,115721],{"class":133},[109,117088,26284],{"class":122},[109,117090,40108],{"class":133},[109,117092,14737],{"class":122},[109,117094,40108],{"class":133},[109,117096,31961],{"class":126},[19,117098,117099,117100,117102,117103,117106],{},"定义 reset。",[106,117101,115741],{}," 用来控制随机数，保证实验可以复现。",[106,117104,117105],{},"options"," 用来接收额外配置，本章暂时不用。",[99,117108,117110],{"className":31553,"code":117109,"language":31555,"meta":104,"style":104},"super().reset(seed=seed)\n",[106,117111,117112],{"__ignoreMap":104},[109,117113,117114,117116,117118,117120,117122],{"class":111,"line":112},[109,117115,116703],{"class":133},[109,117117,115738],{"class":126},[109,117119,115741],{"class":6553},[109,117121,130],{"class":122},[109,117123,115746],{"class":126},[19,117125,117126,117127,117130],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[106,117128,117129],{},"self.np_random"," 生成可复现的随机数。",[99,117132,117134],{"className":31553,"code":117133,"language":31555,"meta":104,"style":104},"mujoco.mj_resetData(self.model, self.data)\n",[106,117135,117136],{"__ignoreMap":104},[109,117137,117138,117141,117143,117145,117147],{"class":111,"line":112},[109,117139,117140],{"class":126},"mujoco.mj_resetData(",[109,117142,31998],{"class":133},[109,117144,115756],{"class":126},[109,117146,31998],{"class":133},[109,117148,115761],{"class":126},[19,117150,117151],{},"把 MuJoCo 状态重置到默认状态。",[99,117153,117155],{"className":31553,"code":117154,"language":31555,"meta":104,"style":104},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[106,117156,117157],{"__ignoreMap":104},[109,117158,117159,117161,117163,117165,117167,117169,117171,117173,117175,117177,117179,117181,117183,117185,117187,117189,117191],{"class":111,"line":112},[109,117160,31998],{"class":133},[109,117162,115772],{"class":126},[109,117164,130],{"class":122},[109,117166,40048],{"class":133},[109,117168,115779],{"class":126},[109,117170,114937],{"class":6553},[109,117172,114940],{"class":122},[109,117174,87385],{"class":133},[109,117176,13608],{"class":126},[109,117178,114947],{"class":6553},[109,117180,130],{"class":122},[109,117182,87385],{"class":133},[109,117184,13608],{"class":126},[109,117186,32671],{"class":6553},[109,117188,130],{"class":122},[109,117190,31998],{"class":133},[109,117192,115804],{"class":126},[19,117194,116516,117195,117198,117199,117202,117203,117205],{},[106,117196,117197],{},"[:]"," 表示修改整个数组。",[106,117200,117201],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[106,117204,103325],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[99,117207,117209],{"className":31553,"code":117208,"language":31555,"meta":104,"style":104},"self.data.qvel[:] = 0.0\n",[106,117210,117211],{"__ignoreMap":104},[109,117212,117213,117215,117217,117219],{"class":111,"line":112},[109,117214,31998],{"class":133},[109,117216,115811],{"class":126},[109,117218,130],{"class":122},[109,117220,105936],{"class":133},[19,117222,117223],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[99,117225,117227],{"className":31553,"code":117226,"language":31555,"meta":104,"style":104},"self.steps = 0\nreturn self._get_obs(), {}\n",[106,117228,117229,117239],{"__ignoreMap":104},[109,117230,117231,117233,117235,117237],{"class":111,"line":112},[109,117232,31998],{"class":133},[109,117234,114881],{"class":126},[109,117236,130],{"class":122},[109,117238,48508],{"class":133},[109,117240,117241,117243,117245],{"class":111,"line":119},[109,117242,18219],{"class":122},[109,117244,40048],{"class":133},[109,117246,115851],{"class":126},[19,117248,117249],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[99,117251,117252],{"className":31553,"code":116525,"language":31555,"meta":104,"style":104},[106,117253,117254],{"__ignoreMap":104},[109,117255,117256,117258,117260],{"class":111,"line":112},[109,117257,33122],{"class":122},[109,117259,115862],{"class":211},[109,117261,115865],{"class":126},[19,117263,117264],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[99,117266,117268],{"className":31553,"code":117267,"language":31555,"meta":104,"style":104},"action = np.asarray(action, dtype=np.float32)\n",[106,117269,117270],{"__ignoreMap":104},[109,117271,117272,117274,117276,117278,117280,117282],{"class":111,"line":112},[109,117273,108617],{"class":126},[109,117275,130],{"class":122},[109,117277,115874],{"class":126},[109,117279,94675],{"class":6553},[109,117281,130],{"class":122},[109,117283,114971],{"class":126},[19,117285,117286,117287,29560],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[106,117288,117052],{},[99,117290,117292],{"className":31553,"code":117291,"language":31555,"meta":104,"style":104},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[106,117293,117294],{"__ignoreMap":104},[109,117295,117296,117298,117300,117302,117304,117306,117308],{"class":111,"line":112},[109,117297,108617],{"class":126},[109,117299,130],{"class":122},[109,117301,108622],{"class":126},[109,117303,31998],{"class":133},[109,117305,115893],{"class":126},[109,117307,31998],{"class":133},[109,117309,115898],{"class":126},[19,117311,117312],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[99,117314,117316],{"className":31553,"code":117315,"language":31555,"meta":104,"style":104},"self.data.ctrl[:] = action\n",[106,117317,117318],{"__ignoreMap":104},[109,117319,117320,117322,117324,117326],{"class":111,"line":112},[109,117321,31998],{"class":133},[109,117323,115909],{"class":126},[109,117325,130],{"class":122},[109,117327,108645],{"class":126},[19,117329,117330],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[99,117332,117334],{"className":31553,"code":117333,"language":31555,"meta":104,"style":104},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[106,117335,117336,117352],{"__ignoreMap":104},[109,117337,117338,117340,117342,117344,117346,117348,117350],{"class":111,"line":112},[109,117339,4372],{"class":122},[109,117341,102676],{"class":126},[109,117343,27218],{"class":122},[109,117345,33618],{"class":133},[109,117347,714],{"class":126},[109,117349,31998],{"class":133},[109,117351,115930],{"class":126},[109,117353,117354,117357,117359,117361,117363],{"class":111,"line":119},[109,117355,117356],{"class":126},"    mujoco.mj_step(",[109,117358,31998],{"class":133},[109,117360,115756],{"class":126},[109,117362,31998],{"class":133},[109,117364,115761],{"class":126},[19,117366,117367,117368,117371,117372,117374,117375,29560],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[106,117369,117370],{},"frame_skip=5","，所以外部调用一次 ",[106,117373,115052],{},"，内部实际执行 5 次 ",[106,117376,102390],{},[99,117378,117380],{"className":31553,"code":117379,"language":31555,"meta":104,"style":104},"self.steps += 1\n",[106,117381,117382],{"__ignoreMap":104},[109,117383,117384,117386,117388,117390],{"class":111,"line":112},[109,117385,31998],{"class":133},[109,117387,114881],{"class":126},[109,117389,10795],{"class":122},[109,117391,56874],{"class":133},[19,117393,117394],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[99,117396,117398],{"className":31553,"code":117397,"language":31555,"meta":104,"style":104},"obs = self._get_obs()\nreward = self._get_reward()\n",[106,117399,117400,117410],{"__ignoreMap":104},[109,117401,117402,117404,117406,117408],{"class":111,"line":112},[109,117403,112029],{"class":126},[109,117405,130],{"class":122},[109,117407,40048],{"class":133},[109,117409,115972],{"class":126},[109,117411,117412,117414,117416,117418],{"class":111,"line":119},[109,117413,112180],{"class":126},[109,117415,130],{"class":122},[109,117417,40048],{"class":133},[109,117419,115983],{"class":126},[19,117421,117422],{},"计算新的观测和奖励。",[99,117424,117426],{"className":31553,"code":117425,"language":31555,"meta":104,"style":104},"dist = float(np.linalg.norm(tip - target))\n",[106,117427,117428],{"__ignoreMap":104},[109,117429,117430,117432,117434,117436,117438,117440],{"class":111,"line":112},[109,117431,112771],{"class":126},[109,117433,130],{"class":122},[109,117435,110972],{"class":133},[109,117437,116026],{"class":126},[109,117439,2064],{"class":122},[109,117441,116031],{"class":126},[19,117443,117444],{},"计算末端到目标的距离，并转换成 Python float。",[99,117446,117447],{"className":31553,"code":114852,"language":31555,"meta":104,"style":104},[106,117448,117449,117461],{"__ignoreMap":104},[109,117450,117451,117453,117455,117457,117459],{"class":111,"line":112},[109,117452,114859],{"class":126},[109,117454,130],{"class":122},[109,117456,114864],{"class":126},[109,117458,1320],{"class":122},[109,117460,114869],{"class":133},[109,117462,117463,117465,117467,117469,117471,117473,117475],{"class":111,"line":119},[109,117464,114874],{"class":126},[109,117466,130],{"class":122},[109,117468,40048],{"class":133},[109,117470,114881],{"class":126},[109,117472,3086],{"class":122},[109,117474,40048],{"class":133},[109,117476,114888],{"class":126},[19,117478,117479],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[99,117481,117483],{"className":31553,"code":117482,"language":31555,"meta":104,"style":104},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[106,117484,117485,117498],{"__ignoreMap":104},[109,117486,117487,117490,117492,117494,117496],{"class":111,"line":112},[109,117488,117489],{"class":126},"info ",[109,117491,130],{"class":122},[109,117493,5785],{"class":126},[109,117495,116077],{"class":278},[109,117497,116080],{"class":126},[109,117499,117500,117502],{"class":111,"line":119},[109,117501,18219],{"class":122},[109,117503,116087],{"class":126},[19,117505,117506,117509],{},[106,117507,117508],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[99,117511,117513],{"className":31553,"code":117512,"language":31555,"meta":104,"style":104},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[106,117514,117515,117524],{"__ignoreMap":104},[109,117516,117517,117520,117522],{"class":111,"line":112},[109,117518,117519],{"class":126},"env ",[109,117521,130],{"class":122},[109,117523,116117],{"class":126},[109,117525,117526,117528,117530,117532,117534,117536,117538],{"class":111,"line":119},[109,117527,114575],{"class":126},[109,117529,130],{"class":122},[109,117531,116127],{"class":126},[109,117533,115741],{"class":6553},[109,117535,130],{"class":122},[109,117537,1314],{"class":133},[109,117539,1330],{"class":126},[19,117541,117542,117543,117546],{},"创建环境并重置。",[106,117544,117545],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[99,117548,117550],{"className":31553,"code":117549,"language":31555,"meta":104,"style":104},"action = env.action_space.sample()\n",[106,117551,117552],{"__ignoreMap":104},[109,117553,117554,117556,117558],{"class":111,"line":112},[109,117555,108617],{"class":126},[109,117557,130],{"class":122},[109,117559,116196],{"class":126},[19,117561,117562],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117564,103491],{"id":103490},[19,117566,106659],{},[99,117568,117571],{"className":117569,"code":117570,"language":6524,"meta":104},[6522],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[106,117572,117570],{"__ignoreMap":104},[19,117574,117575],{},"这个环境已经具备强化学习环境的基本结构。",[19,117577,117578],{},"主函数里使用随机动作：",[99,117580,117581],{"className":31553,"code":117549,"language":31555,"meta":104,"style":104},[106,117582,117583],{"__ignoreMap":104},[109,117584,117585,117587,117589],{"class":111,"line":112},[109,117586,108617],{"class":126},[109,117588,130],{"class":122},[109,117590,116196],{"class":126},[19,117592,117593],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117595,103523],{"id":103522},[765,117597,117598,117601,117607,117616,117625,117634,117640],{},[30,117599,117600],{},"运行程序。",[30,117602,117603,117604,29560],{},"确认 ",[106,117605,117606],{},"obs.shape == (10,)",[30,117608,112356,117609,117612,117613,29560],{},[106,117610,117611],{},"env.action_space","，应类似 ",[106,117614,117615],{},"Box(-1.0, 1.0, (2,), float32)",[30,117617,106760,117618,117621,117622,29560],{},[106,117619,117620],{},"self.max_steps = 10","，确认环境会更快 ",[106,117623,117624],{},"truncated=True",[30,117626,103586,117627,103589,117630,117633],{},[106,117628,117629],{},"terminated = dist \u003C 0.05",[106,117631,117632],{},"dist \u003C 0.2","，观察是否更容易结束。",[30,117635,103586,117636,117639],{},[106,117637,117638],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[30,117641,117642,117643,117645,117646,117649],{},"在 ",[106,117644,117508],{}," 里加入 ",[106,117647,117648],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117651,103628],{"id":103627},[51,117653,117655],{"id":117654},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117657,117658,117659,117661],{},"Gymnasium 的 ",[106,117660,108309],{}," 返回 5 个值:",[99,117663,117665],{"className":31553,"code":117664,"language":31555,"meta":104,"style":104},"obs, reward, terminated, truncated, info\n",[106,117666,117667],{"__ignoreMap":104},[109,117668,117669],{"class":111,"line":112},[109,117670,117664],{"class":126},[19,117672,117673],{},"不是旧 Gym 的 4 个值。",[51,117675,117677,117680],{"id":117676},"datactrl-action-维度错误",[106,117678,117679],{},"data.ctrl[:] = action"," 维度错误",[19,117682,103698],{},[99,117684,117686],{"className":31553,"code":117685,"language":31555,"meta":104,"style":104},"print(self.model.nu)\nprint(action.shape)\n",[106,117687,117688,117699],{"__ignoreMap":104},[109,117689,117690,117692,117694,117696],{"class":111,"line":112},[109,117691,31590],{"class":133},[109,117693,714],{"class":126},[109,117695,31998],{"class":133},[109,117697,117698],{"class":126},".model.nu)\n",[109,117700,117701,117703],{"class":111,"line":119},[109,117702,31590],{"class":133},[109,117704,117705],{"class":126},"(action.shape)\n",[19,117707,117708],{},"两者必须匹配。",[51,117710,117712],{"id":117711},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117714,103637],{},[99,117716,117718],{"className":31553,"code":117717,"language":31555,"meta":104,"style":104},"mujoco.mj_forward(self.model, self.data)\n",[106,117719,117720],{"__ignoreMap":104},[109,117721,117722,117725,117727,117729,117731],{"class":111,"line":112},[109,117723,117724],{"class":126},"mujoco.mj_forward(",[109,117726,31998],{"class":133},[109,117728,115756],{"class":126},[109,117730,31998],{"class":133},[109,117732,115761],{"class":126},[51,117734,117736,117738],{"id":117735},"observation_space-维度和-obs-不一致",[106,117737,114775],{}," 维度和 obs 不一致",[19,117740,103750],{},[99,117742,117744],{"className":31553,"code":117743,"language":31555,"meta":104,"style":104},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[106,117745,117746,117756,117763],{"__ignoreMap":104},[109,117747,117748,117750,117752,117754],{"class":111,"line":112},[109,117749,112029],{"class":126},[109,117751,130],{"class":122},[109,117753,40048],{"class":133},[109,117755,115972],{"class":126},[109,117757,117758,117760],{"class":111,"line":119},[109,117759,31590],{"class":133},[109,117761,117762],{"class":126},"(obs.shape)\n",[109,117764,117765,117767,117769,117771],{"class":111,"line":140},[109,117766,31590],{"class":133},[109,117768,714],{"class":126},[109,117770,31998],{"class":133},[109,117772,117773],{"class":126},".observation_space.shape)\n",[19,117775,117776],{},"两者必须一致。本章观测是：",[99,117778,117781],{"className":117779,"code":117780,"language":6524,"meta":104},[6522],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[106,117782,117780],{"__ignoreMap":104},[51,117784,117786],{"id":117785},"action-超过范围","action 超过范围",[19,117788,117789],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[99,117791,117792],{"className":31553,"code":117291,"language":31555,"meta":104,"style":104},[106,117793,117794],{"__ignoreMap":104},[109,117795,117796,117798,117800,117802,117804,117806,117808],{"class":111,"line":112},[109,117797,108617],{"class":126},[109,117799,130],{"class":122},[109,117801,108622],{"class":126},[109,117803,31998],{"class":133},[109,117805,115893],{"class":126},[109,117807,31998],{"class":133},[109,117809,115898],{"class":126},[19,117811,117812,117813,29560],{},"这能避免无效动作直接写入 ",[106,117814,102251],{},[51,117816,117818],{"id":117817},"忘记返回-info","忘记返回 info",[19,117820,117658,117821,102193,117823,117825],{},[106,117822,71231],{},[106,117824,108309],{}," 都会返回 info：",[99,117827,117828],{"className":31553,"code":114568,"language":31555,"meta":104,"style":104},[106,117829,117830,117838],{"__ignoreMap":104},[109,117831,117832,117834,117836],{"class":111,"line":112},[109,117833,114575],{"class":126},[109,117835,130],{"class":122},[109,117837,114580],{"class":126},[109,117839,117840,117842,117844],{"class":111,"line":119},[109,117841,114585],{"class":126},[109,117843,130],{"class":122},[109,117845,114590],{"class":126},[19,117847,117848,117849,29560],{},"即使暂时没有额外信息，也返回 ",[106,117850,33634],{},[14,117852,117854],{"id":117853},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117856,117857],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[765,117859,117860,117863,117866,117869,117872,117875],{},[30,117861,117862],{},"更稳定的 reward。",[30,117864,117865],{},"合理的 episode 长度。",[30,117867,117868],{},"可重复的随机目标采样。",[30,117870,117871],{},"render 接口。",[30,117873,117874],{},"环境注册代码。",[30,117876,117877],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117879,117880],{},"如果只是自己写训练循环，最小形式是：",[99,117882,117884],{"className":31553,"code":117883,"language":31555,"meta":104,"style":104},"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",[106,117885,117886,117894,117910,117914,117930,117939,117948,117958],{"__ignoreMap":104},[109,117887,117888,117890,117892],{"class":111,"line":112},[109,117889,117519],{"class":126},[109,117891,130],{"class":122},[109,117893,116117],{"class":126},[109,117895,117896,117898,117900,117902,117904,117906,117908],{"class":111,"line":119},[109,117897,114575],{"class":126},[109,117899,130],{"class":122},[109,117901,116127],{"class":126},[109,117903,115741],{"class":6553},[109,117905,130],{"class":122},[109,117907,1314],{"class":133},[109,117909,1330],{"class":126},[109,117911,117912],{"class":111,"line":140},[109,117913,158],{"emptyLinePlaceholder":157},[109,117915,117916,117918,117920,117922,117924,117926,117928],{"class":111,"line":154},[109,117917,4372],{"class":122},[109,117919,102676],{"class":126},[109,117921,27218],{"class":122},[109,117923,33618],{"class":133},[109,117925,714],{"class":126},[109,117927,7740],{"class":133},[109,117929,31961],{"class":126},[109,117931,117932,117935,117937],{"class":111,"line":161},[109,117933,117934],{"class":126},"    action ",[109,117936,130],{"class":122},[109,117938,116196],{"class":126},[109,117940,117941,117944,117946],{"class":111,"line":167},[109,117942,117943],{"class":126},"    obs, reward, terminated, truncated, info ",[109,117945,130],{"class":122},[109,117947,114590],{"class":126},[109,117949,117950,117952,117954,117956],{"class":111,"line":185},[109,117951,4446],{"class":122},[109,117953,116262],{"class":126},[109,117955,116265],{"class":122},[109,117957,116268],{"class":126},[109,117959,117960,117963,117965],{"class":111,"line":201},[109,117961,117962],{"class":126},"        obs, info ",[109,117964,130],{"class":122},[109,117966,114580],{"class":126},[14,117968,117970],{"id":117969},"_9本章小结","9.本章小结",[19,117972,117973],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[99,117975,117978],{"className":117976,"code":117977,"language":6524,"meta":104},[6522],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[106,117979,117977],{"__ignoreMap":104},[19,117981,117982],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1467,117984,117985],{},"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":104,"searchDepth":119,"depth":119,"links":117987},[117988,117989,117990,117997,118001,118002,118003,118013,118014],{"id":101821,"depth":119,"text":101822},{"id":101944,"depth":119,"text":101945},{"id":102219,"depth":119,"text":102220,"children":117991},[117992,117994,117996],{"id":114799,"depth":140,"text":117993},"terminated 和 truncated 的区别",{"id":114902,"depth":140,"text":117995},"observation_space 和 action_space",{"id":115029,"depth":140,"text":115030},{"id":102427,"depth":119,"text":102428,"children":117998},[117999,118000],{"id":102747,"depth":140,"text":102747},{"id":102883,"depth":140,"text":102883},{"id":103490,"depth":119,"text":103491},{"id":103522,"depth":119,"text":103523},{"id":103627,"depth":119,"text":103628,"children":118004},[118005,118006,118008,118009,118011,118012],{"id":117654,"depth":140,"text":117655},{"id":117676,"depth":140,"text":118007},"data.ctrl[:] = action 维度错误",{"id":117711,"depth":140,"text":117712},{"id":117735,"depth":140,"text":118010},"observation_space 维度和 obs 不一致",{"id":117785,"depth":140,"text":117786},{"id":117817,"depth":140,"text":117818},{"id":117853,"depth":119,"text":117854},{"id":117969,"depth":119,"text":117970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114552,"description":104},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118021,"title":118022,"body":118023,"description":118446,"extension":1476,"meta":118447,"navigation":157,"path":118448,"seo":118449,"stem":118450,"__hash__":118451},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118024,"toc":118436},[118025,118029,118032,118035,118055,118061,118067,118077,118080,118083,118103,118106,118110,118113,118119,118122,118136,118139,118142,118216,118219,118225,118228,118251,118254,118304,118307,118313,118316,118319,118322,118341,118344,118350,118353,118356,118359,118379,118382,118385,118388,118433],[10,118026,118028],{"id":118027},"mujoco-学习","MuJoCo 学习",[19,118030,118031],{},"初版",[19,118033,118034],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[765,118036,118037,118040,118043,118052],{},[30,118038,118039],{},"MuJoCo 模型文件在描述什么。",[30,118041,118042],{},"Python 代码怎样读取和推进仿真。",[30,118044,118045,1750,118047,1750,118049,118051],{},[106,118046,105205],{},[106,118048,105535],{},[106,118050,105538],{}," 这些数组为什么重要。",[30,118053,118054],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118056,118057,118058,118060],{},"默认环境为 Fedora 44、Python >= 3.10、",[106,118059,102202],{}," 官方 Python bindings。",[19,118062,118063,118064,118066],{},"注意：本文禁止使用 ",[106,118065,102187],{},"。所有示例均使用：",[99,118068,118069],{"className":31553,"code":102753,"language":31555,"meta":104,"style":104},[106,118070,118071],{"__ignoreMap":104},[109,118072,118073,118075],{"class":111,"line":112},[109,118074,31567],{"class":122},[109,118076,102476],{"class":126},[14,118078,118079],{"id":118079},"适合谁阅读",[19,118081,118082],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[765,118084,118085,118088,118091,118094],{},[30,118086,118087],{},"没学过 MuJoCo，只会一点 Python。",[30,118089,118090],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[30,118092,118093],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[30,118095,118096,118097,118099,118100,118102],{},"以前接触过 ",[106,118098,102187],{},"，现在想迁移到官方 ",[106,118101,102196],{}," Python bindings。",[19,118104,118105],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118107,118109],{"id":118108},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118111,118112],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[99,118114,118117],{"className":118115,"code":118116,"language":6524,"meta":104},[6522],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[106,118118,118116],{"__ignoreMap":104},[19,118120,118121],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[765,118123,118124,118127,118130,118133],{},[30,118125,118126],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[30,118128,118129],{},"快速测试控制算法，不必一开始就上真实机器人。",[30,118131,118132],{},"生成强化学习环境。",[30,118134,118135],{},"采集状态、动作、图像、奖励等训练数据。",[14,118137,118138],{"id":118138},"学习前的心智模型",[19,118140,118141],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1677,118143,118144,118156],{},[1680,118145,118146],{},[1683,118147,118148,118151,118154],{},[1686,118149,118150],{"align":24910},"部分",[1686,118152,118153],{"align":24910},"负责什么",[1686,118155,22360],{"align":24910},[1723,118157,118158,118169,118181,118193,118205],{},[1683,118159,118160,118163,118166],{},[1728,118161,118162],{"align":24910},"MJCF XML",[1728,118164,118165],{"align":24910},"定义世界和机器人结构",[1728,118167,118168],{"align":24910},"地面、盒子、关节、电机、摄像头",[1683,118170,118171,118175,118178],{},[1728,118172,118173],{"align":24910},[106,118174,101884],{},[1728,118176,118177],{"align":24910},"编译后的静态模型",[1728,118179,118180],{"align":24910},"有几个关节、有几个电机、时间步长是多少",[1683,118182,118183,118187,118190],{},[1728,118184,118185],{"align":24910},[106,118186,101894],{},[1728,118188,118189],{"align":24910},"运行中的动态状态",[1728,118191,118192],{"align":24910},"当前时间、位置、速度、电机输入",[1683,118194,118195,118199,118202],{},[1728,118196,118197],{"align":24910},[106,118198,102390],{},[1728,118200,118201],{"align":24910},"推进一步物理仿真",[1728,118203,118204],{"align":24910},"根据重力、力、碰撞更新状态",[1683,118206,118207,118210,118213],{},[1728,118208,118209],{"align":24910},"Viewer \u002F Renderer",[1728,118211,118212],{"align":24910},"把仿真显示出来",[1728,118214,118215],{"align":24910},"打开窗口或保存图片",[19,118217,118218],{},"一句话总结：",[99,118220,118223],{"className":118221,"code":118222,"language":6524,"meta":104},[6522],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[106,118224,118222],{"__ignoreMap":104},[19,118226,118227],{},"参考来源：",[27,118229,118230,118237,118244],{},[30,118231,118232,118233],{},"MuJoCo Python 官方文档：",[1776,118234,118235],{"href":118235,"rel":118236},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25039],[30,118238,118239,118240],{},"MuJoCo XML Reference：",[1776,118241,118242],{"href":118242,"rel":118243},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25039],[30,118245,118246,118247],{},"MuJoCo Overview：",[1776,118248,118249],{"href":118249,"rel":118250},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25039],[14,118252,118253],{"id":118253},"章节目录",[765,118255,118256,118262,118268,118274,118280,118286,118292,118298],{},[30,118257,118258],{},[1776,118259,118261],{"href":118260},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[30,118263,118264],{},[1776,118265,118267],{"href":118266},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[30,118269,118270],{},[1776,118271,118273],{"href":118272},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[30,118275,118276],{},[1776,118277,118279],{"href":118278},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[30,118281,118282],{},[1776,118283,118285],{"href":118284},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[30,118287,118288],{},[1776,118289,118291],{"href":118290},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[30,118293,118294],{},[1776,118295,118297],{"href":118296},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[30,118299,118300],{},[1776,118301,118303],{"href":118302},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118305,118306],{"id":118306},"推荐学习路线",[99,118308,118311],{"className":118309,"code":118310,"language":6524,"meta":104},[6522],"环境安装\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",[106,118312,118310],{"__ignoreMap":104},[19,118314,118315],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118317,118318],{"id":118318},"建议的目录结构",[19,118320,118321],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[99,118323,118325],{"className":24996,"code":118324,"language":24998,"meta":104,"style":104},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[106,118326,118327,118335],{"__ignoreMap":104},[109,118328,118329,118331,118333],{"class":111,"line":112},[109,118330,102441],{"class":211},[109,118332,30391],{"class":133},[109,118334,102446],{"class":278},[109,118336,118337,118339],{"class":111,"line":119},[109,118338,102451],{"class":133},[109,118340,102446],{"class":278},[19,118342,118343],{},"每一章的代码都单独保存：",[99,118345,118348],{"className":118346,"code":118347,"language":6524,"meta":104},[6522],"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",[106,118349,118347],{"__ignoreMap":104},[19,118351,118352],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118354,118355],{"id":118355},"学习方法",[19,118357,118358],{},"每章建议按这个顺序操作：",[765,118360,118361,118364,118367,118370,118373,118376],{},[30,118362,118363],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[30,118365,118366],{},"复制最小可运行代码，保存成指定文件。",[30,118368,118369],{},"运行代码，确认没有报错。",[30,118371,118372],{},"对照“运行结果说明”理解输出。",[30,118374,118375],{},"做“验证步骤”，主动改一两个参数。",[30,118377,118378],{},"遇到报错先看“常见错误与解决方案”。",[19,118380,118381],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118383,118384],{"id":118384},"全局排错顺序",[19,118386,118387],{},"遇到问题时，按下面顺序查：",[765,118389,118390,118396,118402,118407,118410,118413,118420,118430],{},[30,118391,118392,118393],{},"Python 环境是否激活：",[106,118394,118395],{},"which python",[30,118397,118398,118399],{},"MuJoCo 是否能导入：",[106,118400,118401],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[30,118403,118404,118405],{},"是否误装了 ",[106,118406,102187],{},[30,118408,118409],{},"XML 标签是否闭合、属性是否拼写正确",[30,118411,118412],{},"actuator 引用的 joint 名字是否存在",[30,118414,118415,118417,118418],{},[106,118416,102251],{}," 的长度是否等于 ",[106,118419,103333],{},[30,118421,106760,118422,83714,118424,118426,118427],{},[106,118423,105205],{},[106,118425,105535],{}," 后是否调用了 ",[106,118428,118429],{},"mujoco.mj_forward",[30,118431,118432],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1467,118434,118435],{},"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":104,"searchDepth":119,"depth":119,"links":118437},[118438,118439,118440,118441,118442,118443,118444,118445],{"id":118079,"depth":119,"text":118079},{"id":118108,"depth":119,"text":118109},{"id":118138,"depth":119,"text":118138},{"id":118253,"depth":119,"text":118253},{"id":118306,"depth":119,"text":118306},{"id":118318,"depth":119,"text":118318},{"id":118355,"depth":119,"text":118355},{"id":118384,"depth":119,"text":118384},"仿真搭建。",{"category":24552},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118022,"description":118446},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118453,"title":118454,"body":118455,"description":24550,"extension":1476,"meta":118910,"navigation":157,"path":118911,"seo":118912,"stem":118913,"__hash__":118914},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118456,"toc":118908},[118457,118460,118463,118469,118905],[10,118458,118454],{"id":118459},"_1-最常用的基本操作更新",[19,118461,118462],{},"装linux系统教程：",[19,118464,118465],{},[1776,118466,118467],{"href":118467,"rel":118468},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25039],[99,118470,118474],{"className":118471,"code":118472,"language":118473,"meta":104,"style":104},"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",[106,118475,118476,118481,118486,118495,118500,118509,118514,118534,118539,118550,118555,118564,118569,118597,118602,118621,118626,118645,118649,118654,118670,118674,118679,118709,118713,118718,118734,118738,118743,118758,118762,118767,118783,118787,118792,118804,118816,118820,118825,118842,118846,118851,118869,118873,118878,118887,118891,118896],{"__ignoreMap":104},[109,118477,118478],{"class":111,"line":112},[109,118479,118480],{"class":115},"#更新相关的知识\n",[109,118482,118483],{"class":111,"line":119},[109,118484,118485],{"class":115},"# 更新软件包列表（从服务器获取最新软件信息）\n",[109,118487,118488,118490,118493],{"class":111,"line":140},[109,118489,25751],{"class":211},[109,118491,118492],{"class":278}," apt",[109,118494,27417],{"class":278},[109,118496,118497],{"class":111,"line":154},[109,118498,118499],{"class":115},"# 升级所有可更新的软件包（不删除旧包）\n",[109,118501,118502,118504,118506],{"class":111,"line":161},[109,118503,25751],{"class":211},[109,118505,118492],{"class":278},[109,118507,118508],{"class":278}," upgrade\n",[109,118510,118511],{"class":111,"line":167},[109,118512,118513],{"class":115},"#更新和升级软件包\n",[109,118515,118516,118518,118520,118523,118525,118527,118529,118532],{"class":111,"line":185},[109,118517,25751],{"class":211},[109,118519,118492],{"class":278},[109,118521,118522],{"class":278}," update",[109,118524,27365],{"class":126},[109,118526,25751],{"class":211},[109,118528,118492],{"class":278},[109,118530,118531],{"class":278}," upgrade",[109,118533,102156],{"class":133},[109,118535,118536],{"class":111,"line":201},[109,118537,118538],{"class":115},"#列出可更新的软件包及版本信息\n",[109,118540,118541,118544,118547],{"class":111,"line":206},[109,118542,118543],{"class":211},"apt",[109,118545,118546],{"class":278}," list",[109,118548,118549],{"class":133}," --upgradable\n",[109,118551,118552],{"class":111,"line":218},[109,118553,118554],{"class":115},"#彻底升级（处理依赖关系，可能删除旧包）\n",[109,118556,118557,118559,118561],{"class":111,"line":223},[109,118558,25751],{"class":211},[109,118560,118492],{"class":278},[109,118562,118563],{"class":278}," full-upgrade\n",[109,118565,118566],{"class":111,"line":229},[109,118567,118568],{"class":115},"#设置指定版本\n",[109,118570,118571,118573,118575,118577,118579,118582,118584,118586,118588,118590,118593,118595],{"class":111,"line":244},[109,118572,25751],{"class":211},[109,118574,118492],{"class":278},[109,118576,25008],{"class":278},[109,118578,30077],{"class":122},[109,118580,118581],{"class":278},"package_nam",[109,118583,1615],{"class":126},[109,118585,2490],{"class":122},[109,118587,130],{"class":278},[109,118589,1320],{"class":122},[109,118591,118592],{"class":278},"version_numbe",[109,118594,2202],{"class":126},[109,118596,52482],{"class":122},[109,118598,118599],{"class":111,"line":258},[109,118600,118601],{"class":115},"#只安装软件包不升级\n",[109,118603,118604,118606,118608,118610,118612,118614,118616,118618],{"class":111,"line":263},[109,118605,25751],{"class":211},[109,118607,118492],{"class":278},[109,118609,25008],{"class":278},[109,118611,30077],{"class":122},[109,118613,118581],{"class":278},[109,118615,1615],{"class":126},[109,118617,2490],{"class":122},[109,118619,118620],{"class":133}," --no-upgrade\n",[109,118622,118623],{"class":111,"line":269},[109,118624,118625],{"class":115},"#只升级，不存在就不安装\n",[109,118627,118628,118630,118632,118634,118636,118638,118640,118642],{"class":111,"line":304},[109,118629,25751],{"class":211},[109,118631,118492],{"class":278},[109,118633,25008],{"class":278},[109,118635,30077],{"class":122},[109,118637,118581],{"class":278},[109,118639,1615],{"class":126},[109,118641,2490],{"class":122},[109,118643,118644],{"class":133}," --only-upgrade\n",[109,118646,118647],{"class":111,"line":331},[109,118648,158],{"emptyLinePlaceholder":157},[109,118650,118651],{"class":111,"line":336},[109,118652,118653],{"class":115},"#安装指定的软件命令\n",[109,118655,118656,118658,118660,118662,118664,118666,118668],{"class":111,"line":364},[109,118657,25751],{"class":211},[109,118659,118492],{"class":278},[109,118661,25008],{"class":278},[109,118663,30077],{"class":122},[109,118665,118581],{"class":278},[109,118667,1615],{"class":126},[109,118669,52482],{"class":122},[109,118671,118672],{"class":111,"line":391},[109,118673,158],{"emptyLinePlaceholder":157},[109,118675,118676],{"class":111,"line":396},[109,118677,118678],{"class":115},"#安装多个软件包\n",[109,118680,118681,118683,118685,118687,118689,118692,118695,118697,118699,118702,118704,118706],{"class":111,"line":402},[109,118682,25751],{"class":211},[109,118684,118492],{"class":278},[109,118686,25008],{"class":278},[109,118688,30077],{"class":122},[109,118690,118691],{"class":278},"package_",[109,118693,118694],{"class":122},"1>",[109,118696,30077],{"class":122},[109,118698,118691],{"class":278},[109,118700,118701],{"class":122},"2>",[109,118703,30077],{"class":122},[109,118705,118691],{"class":278},[109,118707,118708],{"class":122},"3>\n",[109,118710,118711],{"class":111,"line":419},[109,118712,158],{"emptyLinePlaceholder":157},[109,118714,118715],{"class":111,"line":435},[109,118716,118717],{"class":115},"#更新指定的软件命令\n",[109,118719,118720,118722,118724,118726,118728,118730,118732],{"class":111,"line":440},[109,118721,25751],{"class":211},[109,118723,118492],{"class":278},[109,118725,118522],{"class":278},[109,118727,30077],{"class":122},[109,118729,118581],{"class":278},[109,118731,1615],{"class":126},[109,118733,52482],{"class":122},[109,118735,118736],{"class":111,"line":467},[109,118737,158],{"emptyLinePlaceholder":157},[109,118739,118740],{"class":111,"line":494},[109,118741,118742],{"class":115},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[109,118744,118745,118747,118750,118752,118754,118756],{"class":111,"line":499},[109,118746,118543],{"class":211},[109,118748,118749],{"class":278}," show",[109,118751,30077],{"class":122},[109,118753,118581],{"class":278},[109,118755,1615],{"class":126},[109,118757,52482],{"class":122},[109,118759,118760],{"class":111,"line":526},[109,118761,158],{"emptyLinePlaceholder":157},[109,118763,118764],{"class":111,"line":552},[109,118765,118766],{"class":115},"#删除软件包命令\n",[109,118768,118769,118771,118773,118775,118777,118779,118781],{"class":111,"line":557},[109,118770,25751],{"class":211},[109,118772,118492],{"class":278},[109,118774,27254],{"class":278},[109,118776,30077],{"class":122},[109,118778,118581],{"class":278},[109,118780,1615],{"class":126},[109,118782,52482],{"class":122},[109,118784,118785],{"class":111,"line":584},[109,118786,158],{"emptyLinePlaceholder":157},[109,118788,118789],{"class":111,"line":611},[109,118790,118791],{"class":115},"# 清理旧版本和缓存（释放磁盘空间）\n",[109,118793,118794,118796,118798,118801],{"class":111,"line":616},[109,118795,25751],{"class":211},[109,118797,118492],{"class":278},[109,118799,118800],{"class":278}," autoremove",[109,118802,118803],{"class":115},"  # 删除不再需要的依赖和库文件\n",[109,118805,118806,118808,118810,118813],{"class":111,"line":633},[109,118807,25751],{"class":211},[109,118809,118492],{"class":278},[109,118811,118812],{"class":278}," clean",[109,118814,118815],{"class":115},"       # 清理下载的缓存包\n",[109,118817,118818],{"class":111,"line":649},[109,118819,158],{"emptyLinePlaceholder":157},[109,118821,118822],{"class":111,"line":676},[109,118823,118824],{"class":115},"#移除软件包及配置文件\n",[109,118826,118827,118829,118831,118834,118836,118838,118840],{"class":111,"line":703},[109,118828,25751],{"class":211},[109,118830,118492],{"class":278},[109,118832,118833],{"class":278}," purge",[109,118835,30077],{"class":122},[109,118837,118581],{"class":278},[109,118839,1615],{"class":126},[109,118841,52482],{"class":122},[109,118843,118844],{"class":111,"line":708},[109,118845,158],{"emptyLinePlaceholder":157},[109,118847,118848],{"class":111,"line":723},[109,118849,118850],{"class":115},"#查找软件包命令\n",[109,118852,118853,118855,118857,118860,118862,118865,118867],{"class":111,"line":728},[109,118854,25751],{"class":211},[109,118856,118492],{"class":278},[109,118858,118859],{"class":278}," search",[109,118861,30077],{"class":122},[109,118863,118864],{"class":278},"keywor",[109,118866,1851],{"class":126},[109,118868,52482],{"class":122},[109,118870,118871],{"class":111,"line":739},[109,118872,158],{"emptyLinePlaceholder":157},[109,118874,118875],{"class":111,"line":9352},[109,118876,118877],{"class":115},"#列出所有已安装的包\n",[109,118879,118880,118882,118884],{"class":111,"line":9364},[109,118881,118543],{"class":211},[109,118883,118546],{"class":278},[109,118885,118886],{"class":133}," --installed\n",[109,118888,118889],{"class":111,"line":9376},[109,118890,158],{"emptyLinePlaceholder":157},[109,118892,118893],{"class":111,"line":11034},[109,118894,118895],{"class":115},"#列出所有已安装的包的版本信息\n",[109,118897,118898,118900,118902],{"class":111,"line":11059},[109,118899,118543],{"class":211},[109,118901,118546],{"class":278},[109,118903,118904],{"class":133}," --all-versions\n",[1467,118906,118907],{},"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":104,"searchDepth":119,"depth":119,"links":118909},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118454,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118916,"title":118917,"body":118918,"description":24550,"extension":1476,"meta":119659,"navigation":157,"path":119660,"seo":119661,"stem":119662,"__hash__":119663},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118919,"toc":119646},[118920,118923,118927,118930,118936,118940,118944,118950,118955,118960,118965,118970,118975,118978,118981,118984,118987,118991,118994,118999,119002,119007,119010,119015,119022,119025,119028,119031,119034,119037,119048,119052,119056,119061,119066,119070,119075,119079,119084,119088,119092,119097,119100,119145,119150,119154,119158,119163,119169,119174,119184,119189,119199,119204,119209,119236,119240,119243,119248,119251,119276,119280,119285,119288,119293,119298,119318,119323,119326,119341,119345,119398,119401,119406,119410,119413,119428,119431,119434,119439,119443,119447,119450,119454,119458,119461,119466,119471,119475,119482,119490,119493,119500,119505,119510,119513,119518,119525,119530,119537,119541,119543,119548,119552,119555,119558,119563,119566,119571,119574,119579,119584,119589,119593,119598,119602,119643],[10,118921,118917],{"id":118922},"_2-linux装机教程",[14,118924,118926],{"id":118925},"_21-实体机","2.1 实体机",[19,118928,118929],{},"使用清华源：（Ubuntu24.04）",[19,118931,118932],{},[1776,118933,118934],{"href":118934,"rel":118935},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25039],[14,118937,118939],{"id":118938},"_22-普通虚拟机","2.2 普通虚拟机",[51,118941,118943],{"id":118942},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118945,118946],{},[1776,118947,118948],{"href":118948,"rel":118949},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25039],[19,118951,118952],{},[938,118953],{"alt":104,"src":118954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118956,118957],{},[938,118958],{"alt":104,"src":118959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118961,118962],{},[938,118963],{"alt":104,"src":118964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118966,118967],{},[938,118968],{"alt":104,"src":118969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118971,118972],{},[938,118973],{"alt":104,"src":118974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118976,118977],{},"内存4G（4096MB）；",[19,118979,118980],{},"CPU给4个核；",[19,118982,118983],{},"硬盘动态分配60G；",[19,118985,118986],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[51,118988,118990],{"id":118989},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118992,118993],{},"按照1.1的步骤下载Ubuntu",[19,118995,118996],{},[938,118997],{"alt":104,"src":118998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119000,119001],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119003,119004],{},[938,119005],{"alt":104,"src":119006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119008,119009],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119011,119012],{},[938,119013],{"alt":104,"src":119014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119016,119017,119018,119021],{},"选择“正常安装”(找不到都用Alt+F7)， ",[23,119019,119020],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119023,119024],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119026,119027],{},"将改动写入磁盘吗 继续",[19,119029,119030],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119032,119033],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119035,119036],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119038,119039,119040,119043,119044,119047],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[23,119041,119042],{},"除了"," 选不发送系统信息与不升级之外， ",[23,119045,119046],{},"其它"," 都跳过或前进）",[51,119049,119051],{"id":119050},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23171,119053,119055],{"id":119054},"_2231-全屏","2.2.3.1 全屏",[19,119057,119058],{},[938,119059],{"alt":104,"src":119060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119062,119063],{},[938,119064],{"alt":104,"src":119065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23171,119067,119069],{"id":119068},"_2232-文件交换","2.2.3.2 文件交换",[19,119071,119072],{},[938,119073],{"alt":104,"src":119074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23171,119076,119078],{"id":119077},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119080,119081],{},[938,119082],{"alt":104,"src":119083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119085,119087],{"id":119086},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[51,119089,119091],{"id":119090},"_231-简介与优缺点","2.3.1 简介与优缺点",[765,119093,119094],{},[30,119095,119096],{},"什么情况下推荐？",[19,119098,119099],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[765,119101,119102],{"start":119},[30,119103,119104,119105],{},"优缺点：",[765,119106,119107,119137],{},[30,119108,119109,119110],{},"优点：",[765,119111,119112,119115,119122,119125,119128,119131,119134],{},[30,119113,119114],{},"WSL2是最好的Linux发行版;(bushi)",[30,119116,119117,119118,119121],{},"性能损耗极低。且比在Windows上跑深度性能 ",[23,119119,119120],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[30,119123,119124],{},"非常方便调用USB设备，可以USB直通;",[30,119126,119127],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[30,119129,119130],{},"非常方便Win与WSL2互相传文件等协同操作;",[30,119132,119133],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[30,119135,119136],{},"非常方便使用Windows的VScode远程开发;",[30,119138,119139,119140],{},"缺点：",[765,119141,119142],{},[30,119143,119144],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119146,119147],{},[938,119148],{"alt":104,"src":119149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[51,119151,119153],{"id":119152},"_232-安装教程","2.3.2 安装教程",[23171,119155,119157],{"id":119156},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[765,119159,119160],{},[30,119161,119162],{},"方法一(图形界面)",[19,119164,119165,119166,25793],{},"用Win+R输入",[106,119167,119168],{},"appwiz.cpl",[19,119170,119171],{},[938,119172],{"alt":104,"src":119173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119175,119176,119177,119180,119181,27648],{},"点击OK进入 ",[23,119178,119179],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[23,119182,119183],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119185,119186],{},[938,119187],{"alt":104,"src":119188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119190,119191,119192,102193,119195,119198],{},"选择 ",[23,119193,119194],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[23,119196,119197],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119200,119201],{},[938,119202],{"alt":104,"src":119203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[765,119205,119206],{"start":119},[30,119207,119208],{},"方法二(命令行)",[99,119210,119214],{"className":119211,"code":119212,"language":119213,"meta":104,"style":104},"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",[106,119215,119216,119221,119226,119231],{"__ignoreMap":104},[109,119217,119218],{"class":111,"line":112},[109,119219,119220],{},"# 开启 Linux 子系统\n",[109,119222,119223],{"class":111,"line":119},[109,119224,119225],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[109,119227,119228],{"class":111,"line":140},[109,119229,119230],{},"# 开启虚拟机平台\n",[109,119232,119233],{"class":111,"line":154},[109,119234,119235],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23171,119237,119239],{"id":119238},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119241,119242],{},"用管理员权限打开powershell",[19,119244,119245],{},[938,119246],{"alt":104,"src":119247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119249,119250],{},"升级WSL并设置默认版本为WSL2",[99,119252,119254],{"className":119211,"code":119253,"language":119213,"meta":104,"style":104},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[106,119255,119256,119261,119266,119271],{"__ignoreMap":104},[109,119257,119258],{"class":111,"line":112},[109,119259,119260],{},"# 更新 wsl\n",[109,119262,119263],{"class":111,"line":119},[109,119264,119265],{},"wsl --update\n",[109,119267,119268],{"class":111,"line":140},[109,119269,119270],{},"# 将 wsl 版本设置为 wsl2\n",[109,119272,119273],{"class":111,"line":154},[109,119274,119275],{},"wsl --set-default-version 2\n",[23171,119277,119279],{"id":119278},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[765,119281,119282],{},[30,119283,119284],{},"方式一(商店下载)",[19,119286,119287],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119289,119290],{},[938,119291],{"alt":104,"src":119292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[765,119294,119295],{"start":119},[30,119296,119297],{},"方式二(命令行安装)",[99,119299,119301],{"className":119211,"code":119300,"language":119213,"meta":104,"style":104},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[106,119302,119303,119308,119313],{"__ignoreMap":104},[109,119304,119305],{"class":111,"line":112},[109,119306,119307],{},"# 列出可安装的 Linux 版本\n",[109,119309,119310],{"class":111,"line":119},[109,119311,119312],{},"#（需要科学手段）\n",[109,119314,119315],{"class":111,"line":140},[109,119316,119317],{},"wsl --list --online\n",[19,119319,119320],{},[938,119321],{"alt":104,"src":119322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119324,119325],{},"选择对应发行版并安装",[99,119327,119329],{"className":119211,"code":119328,"language":119213,"meta":104,"style":104},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[106,119330,119331,119336],{"__ignoreMap":104},[109,119332,119333],{"class":111,"line":112},[109,119334,119335],{},"# Ubuntu安装完毕后需要重启系统\n",[109,119337,119338],{"class":111,"line":119},[109,119339,119340],{},"wsl --install -d Ubuntu-24.04\n",[23171,119342,119344],{"id":119343},"_2324-查看系统状态","2.3.2.4 查看系统状态",[99,119346,119348],{"className":119211,"code":119347,"language":119213,"meta":104,"style":104},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[106,119349,119350,119355,119360,119365,119370,119374,119378,119383,119388,119393],{"__ignoreMap":104},[109,119351,119352],{"class":111,"line":112},[109,119353,119354],{},"# 查看 wsl\n",[109,119356,119357],{"class":111,"line":119},[109,119358,119359],{},"wsl -l\n",[109,119361,119362],{"class":111,"line":140},[109,119363,119364],{},"# 查看 wsl 运行版本或模式\n",[109,119366,119367],{"class":111,"line":154},[109,119368,119369],{},"wsl -l -v\n",[109,119371,119372],{"class":111,"line":161},[109,119373,158],{"emptyLinePlaceholder":157},[109,119375,119376],{"class":111,"line":167},[109,119377,158],{"emptyLinePlaceholder":157},[109,119379,119380],{"class":111,"line":185},[109,119381,119382],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[109,119384,119385],{"class":111,"line":201},[109,119386,119387],{},"wsl --set-version \u003Cdistro> 2\n",[109,119389,119390],{"class":111,"line":206},[109,119391,119392],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[109,119394,119395],{"class":111,"line":218},[109,119396,119397],{},"wsl --unregister \u003Cdistro>\n",[19,119399,119400],{},"输出Version为2即正常",[19,119402,119403],{},[938,119404],{"alt":104,"src":119405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23171,119407,119409],{"id":119408},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119411,119412],{},"直接在Powershell里输入wsl命令进入子系统",[99,119414,119416],{"className":119211,"code":119415,"language":119213,"meta":104,"style":104},"# 进入子系统\nwsl\n",[106,119417,119418,119423],{"__ignoreMap":104},[109,119419,119420],{"class":111,"line":112},[109,119421,119422],{},"# 进入子系统\n",[109,119424,119425],{"class":111,"line":119},[109,119426,119427],{},"wsl\n",[19,119429,119430],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119432,119433],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119435,119436],{},[938,119437],{"alt":104,"src":119438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[51,119440,119442],{"id":119441},"_233-配置各种环境","2.3.3 配置各种环境",[23171,119444,119446],{"id":119445},"_2331-换源","2.3.3.1 换源",[19,119448,119449],{},"(同实体机LINUX，往下找教程)",[23171,119451,119453],{"id":119452},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24083,119455,119457],{"id":119456},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119459,119460],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119462,119463],{},[938,119464],{"alt":104,"src":119465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119467,119468],{},[938,119469],{"alt":104,"src":119470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24083,119472,119474],{"id":119473},"_23322-cuda","2.3.3.2.2 CUDA",[19,119476,119477,119478],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[1776,119479,119480],{"href":119480,"rel":119481},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25039],[19,119483,119484,119487],{},[938,119485],{"alt":104,"src":119486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[938,119488],{"alt":104,"src":119489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119491,119492],{},"在下方的网站，选择合适的版本。",[19,119494,119495,119496],{},"WSL2 专属 CUDA 指南：",[1776,119497,119498],{"href":119498,"rel":119499},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25039],[19,119501,119502],{},[23,119503,119504],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119506,119507],{},[938,119508],{"alt":104,"src":119509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119511,119512],{},"挨行敲一遍",[19,119514,119515],{},[938,119516],{"alt":104,"src":119517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119519,119520,119521,119524],{},"敲完后，输入",[106,119522,119523],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119526,119527],{},[938,119528],{"alt":104,"src":119529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119531,119532,119533,119536],{},"（请详看下方教程的",[23,119534,119535],{},"安装CUDA的配置环境来看","如何配置环境）",[24083,119538,119540],{"id":119539},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119542,119449],{},[19,119544,119545],{},[938,119546],{"alt":104,"src":119547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23171,119549,119551],{"id":119550},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119553,119554],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119556,119557],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119559,119560],{},[938,119561],{"alt":104,"src":119562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119564,119565],{},"连接WSL2",[19,119567,119568],{},[938,119569],{"alt":104,"src":119570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119572,119573],{},"远程开发成功。",[19,119575,119576],{},[938,119577],{"alt":104,"src":119578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119580,119581],{},[938,119582],{"alt":104,"src":119583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119585,119586],{},[938,119587],{"alt":104,"src":119588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23171,119590,119592],{"id":119591},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119594,119595],{},[938,119596],{"alt":104,"src":119597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23171,119599,119601],{"id":119600},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[99,119603,119605],{"className":118471,"code":119604,"language":118473,"meta":104,"style":104},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[106,119606,119607,119615,119623,119634,119638],{"__ignoreMap":104},[109,119608,119609,119611,119613],{"class":111,"line":112},[109,119610,25751],{"class":211},[109,119612,118492],{"class":278},[109,119614,27417],{"class":278},[109,119616,119617,119619,119621],{"class":111,"line":119},[109,119618,25751],{"class":211},[109,119620,118492],{"class":278},[109,119622,118508],{"class":278},[109,119624,119625,119627,119629,119631],{"class":111,"line":140},[109,119626,25751],{"class":211},[109,119628,118492],{"class":278},[109,119630,25008],{"class":278},[109,119632,119633],{"class":278}," mesa-utils\n",[109,119635,119636],{"class":111,"line":154},[109,119637,158],{"emptyLinePlaceholder":157},[109,119639,119640],{"class":111,"line":161},[109,119641,119642],{"class":115},"#然后重启wsl2即可\n",[1467,119644,119645],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":104,"searchDepth":119,"depth":119,"links":119647},[119648,119649,119654],{"id":118925,"depth":119,"text":118926},{"id":118938,"depth":119,"text":118939,"children":119650},[119651,119652,119653],{"id":118942,"depth":140,"text":118943},{"id":118989,"depth":140,"text":118990},{"id":119050,"depth":140,"text":119051},{"id":119086,"depth":119,"text":119087,"children":119655},[119656,119657,119658],{"id":119090,"depth":140,"text":119091},{"id":119152,"depth":140,"text":119153},{"id":119441,"depth":140,"text":119442},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118917,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119665,"title":119666,"body":119667,"description":24550,"extension":1476,"meta":122603,"navigation":157,"path":122604,"seo":122605,"stem":122606,"__hash__":122607},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119668,"toc":122575},[119669,119672,119676,119682,119686,119692,119696,119884,119887,119892,119896,119900,119903,119906,119912,119917,119920,119923,119928,119961,119966,119970,120047,120050,120055,120059,120062,120101,120104,120113,120131,120136,120143,120260,120265,120268,120295,120300,120304,120313,120363,120370,120374,120377,120391,120398,120432,120437,120441,120464,120467,120472,120476,120479,120482,120485,120527,120531,120534,120537,120578,120582,120586,120589,120594,120599,120602,120625,120628,120636,120641,120644,120649,120654,120657,120662,120666,120671,120694,120699,120761,120769,120774,120779,120782,120787,120790,120795,120800,120818,120823,120829,120834,120848,120852,120855,120858,120861,120904,120907,120912,121013,121016,121021,121025,121029,121066,121070,121074,121078,121124,121128,121173,121177,121184,121192,121247,121250,121327,121330,121353,121357,121360,121365,121370,121378,121381,121386,121391,121396,121399,121404,121413,121416,121421,121424,121495,121500,121503,121508,121511,121516,121519,121524,121527,121532,121537,121540,121615,121618,121631,121636,121639,121653,121656,121685,121690,121719,121722,121727,121731,121736,121745,121748,121753,121756,121761,121764,121767,121772,121775,121780,121785,121788,121793,121796,121921,121926,121956,121959,121964,121969,121986,121989,122032,122035,122062,122067,122080,122223,122227,122232,122246,122249,122300,122303,122333,122336,122352,122357,122371,122374,122441,122446,122455,122460,122463,122475,122480,122487,122511,122514,122519,122522,122541,122546,122553,122565,122572],[10,119670,119666],{"id":119671},"_3-安装必备配置",[14,119673,119675],{"id":119674},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[99,119677,119680],{"className":119678,"code":119679,"language":6524},[6522],"  打开下方网站（注意，该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",[106,119681,119679],{"__ignoreMap":104},[51,119683,119685],{"id":119684},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[99,119687,119690],{"className":119688,"code":119689,"language":6524},[6522],"  输入以下命令\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",[106,119691,119689],{"__ignoreMap":104},[51,119693,119695],{"id":119694},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[99,119697,119701],{"className":119698,"code":119699,"language":119700,"meta":104,"style":104},"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",[106,119702,119703,119711,119722,119734,119748,119752,119762,119767,119771,119775,119780,119784,119796,119800,119805,119809,119820,119824,119840,119844,119855,119859,119864,119868,119876],{"__ignoreMap":104},[109,119704,119705,119707,119709],{"class":111,"line":112},[109,119706,25751],{"class":211},[109,119708,118492],{"class":278},[109,119710,27417],{"class":278},[109,119712,119713,119715,119717,119719],{"class":111,"line":119},[109,119714,25751],{"class":211},[109,119716,118492],{"class":278},[109,119718,25008],{"class":278},[109,119720,119721],{"class":278}," vim\n",[109,119723,119724,119726,119729,119731],{"class":111,"line":140},[109,119725,25751],{"class":211},[109,119727,119728],{"class":278}," rm",[109,119730,26500],{"class":133},[109,119732,119733],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list\n",[109,119735,119736,119738,119740,119742,119745],{"class":111,"line":154},[109,119737,25751],{"class":211},[109,119739,119728],{"class":278},[109,119741,26500],{"class":133},[109,119743,119744],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[109,119746,119747],{"class":133},"**\n",[109,119749,119750],{"class":111,"line":161},[109,119751,158],{"emptyLinePlaceholder":157},[109,119753,119754,119756,119759],{"class":111,"line":167},[109,119755,25751],{"class":211},[109,119757,119758],{"class":278}," vim",[109,119760,119761],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[109,119763,119764],{"class":111,"line":185},[109,119765,119766],{"class":278},"```\n",[109,119768,119769],{"class":111,"line":201},[109,119770,158],{"emptyLinePlaceholder":157},[109,119772,119773],{"class":111,"line":206},[109,119774,158],{"emptyLinePlaceholder":157},[109,119776,119777],{"class":111,"line":218},[109,119778,119779],{"class":211},"选择好Ubuntu版本后，复制下方的内容。\n",[109,119781,119782],{"class":111,"line":223},[109,119783,158],{"emptyLinePlaceholder":157},[109,119785,119786,119788,119791,119794],{"class":111,"line":229},[109,119787,1764],{"class":122},[109,119789,119790],{"class":278},"[](",[109,119792,119793],{"class":211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[109,119795,1330],{"class":278},[109,119797,119798],{"class":111,"line":244},[109,119799,158],{"emptyLinePlaceholder":157},[109,119801,119802],{"class":111,"line":258},[109,119803,119804],{"class":211},"粘贴进去\n",[109,119806,119807],{"class":111,"line":263},[109,119808,158],{"emptyLinePlaceholder":157},[109,119810,119811,119813,119815,119818],{"class":111,"line":269},[109,119812,1764],{"class":122},[109,119814,119790],{"class":278},[109,119816,119817],{"class":211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[109,119819,1330],{"class":278},[109,119821,119822],{"class":111,"line":304},[109,119823,158],{"emptyLinePlaceholder":157},[109,119825,119826,119829,119832,119835,119837],{"class":111,"line":331},[109,119827,119828],{"class":211},"按一下ESC，然后英文冒号，输入",[109,119830,119831],{"class":278}," `",[109,119833,119834],{"class":211},":wq!",[109,119836,2502],{"class":278},[109,119838,119839],{"class":211},"然后回车\n",[109,119841,119842],{"class":111,"line":336},[109,119843,158],{"emptyLinePlaceholder":157},[109,119845,119846,119848,119850,119853],{"class":111,"line":364},[109,119847,1764],{"class":122},[109,119849,119790],{"class":278},[109,119851,119852],{"class":211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[109,119854,1330],{"class":278},[109,119856,119857],{"class":111,"line":391},[109,119858,158],{"emptyLinePlaceholder":157},[109,119860,119861],{"class":111,"line":396},[109,119862,119863],{"class":211},"输入以下命令\n",[109,119865,119866],{"class":111,"line":402},[109,119867,158],{"emptyLinePlaceholder":157},[109,119869,119870,119873],{"class":111,"line":419},[109,119871,119872],{"class":278},"```",[109,119874,119875],{"class":211},"Bash\n",[109,119877,119878,119880,119882],{"class":111,"line":435},[109,119879,25751],{"class":211},[109,119881,118492],{"class":278},[109,119883,27417],{"class":278},[19,119885,119886],{},"这里被替换成对应学校则成功",[19,119888,119889],{},[938,119890],{"alt":104,"src":119891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119893,119895],{"id":119894},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[51,119897,119899],{"id":119898},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119901,119902],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119904,119905],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119907,119908],{},[1776,119909,119910],{"href":119910,"rel":119911},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25039],[19,119913,119914],{},[938,119915],{"alt":104,"src":119916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119918,119919],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119921,119922],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119924,119925],{},[938,119926],{"alt":104,"src":119927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[99,119929,119931],{"className":118471,"code":119930,"language":118473,"meta":104,"style":104},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[106,119932,119933,119938,119945,119950],{"__ignoreMap":104},[109,119934,119935],{"class":111,"line":112},[109,119936,119937],{"class":115},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[109,119939,119940,119942],{"class":111,"line":119},[109,119941,102451],{"class":133},[109,119943,119944],{"class":278}," ~\u002FDownloads\n",[109,119946,119947],{"class":111,"line":140},[109,119948,119949],{"class":115},"#下方chrome安装包名不一定是这个，根据名字来看\n",[109,119951,119952,119954,119956,119958],{"class":111,"line":154},[109,119953,25751],{"class":211},[109,119955,118492],{"class":278},[109,119957,25008],{"class":278},[109,119959,119960],{"class":278}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119962,119963],{},[938,119964],{"alt":104,"src":119965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[51,119967,119969],{"id":119968},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[99,119971,119973],{"className":118471,"code":119972,"language":118473,"meta":104,"style":104},"# 老版\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",[106,119974,119975,119980,119988,119999,120004,120008,120013,120023,120031,120042],{"__ignoreMap":104},[109,119976,119977],{"class":111,"line":112},[109,119978,119979],{"class":115},"# 老版\n",[109,119981,119982,119984,119986],{"class":111,"line":119},[109,119983,25751],{"class":211},[109,119985,118492],{"class":278},[109,119987,27417],{"class":278},[109,119989,119990,119992,119994,119996],{"class":111,"line":140},[109,119991,25751],{"class":211},[109,119993,118492],{"class":278},[109,119995,25008],{"class":278},[109,119997,119998],{"class":278}," neofetch\n",[109,120000,120001],{"class":111,"line":154},[109,120002,120003],{"class":211},"neofetch\n",[109,120005,120006],{"class":111,"line":161},[109,120007,158],{"emptyLinePlaceholder":157},[109,120009,120010],{"class":111,"line":167},[109,120011,120012],{"class":115},"# 新版\n",[109,120014,120015,120017,120020],{"class":111,"line":185},[109,120016,25751],{"class":211},[109,120018,120019],{"class":278}," add-apt-repository",[109,120021,120022],{"class":278}," ppa:zhangsongcui3371\u002Ffastfetch\n",[109,120024,120025,120027,120029],{"class":111,"line":201},[109,120026,25751],{"class":211},[109,120028,118492],{"class":278},[109,120030,27417],{"class":278},[109,120032,120033,120035,120037,120039],{"class":111,"line":206},[109,120034,25751],{"class":211},[109,120036,118492],{"class":278},[109,120038,25008],{"class":278},[109,120040,120041],{"class":278}," fastfetch\n",[109,120043,120044],{"class":111,"line":218},[109,120045,120046],{"class":211},"fastfetch\n",[19,120048,120049],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120051,120052],{},[938,120053],{"alt":104,"src":120054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[51,120056,120058],{"id":120057},"_323-移除snap应用","3.2.3 移除snap应用",[19,120060,120061],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[99,120063,120065],{"className":118471,"code":120064,"language":118473,"meta":104,"style":104},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[106,120066,120067,120079,120090],{"__ignoreMap":104},[109,120068,120069,120071,120073,120076],{"class":111,"line":112},[109,120070,25751],{"class":211},[109,120072,27688],{"class":278},[109,120074,120075],{"class":278}," disable",[109,120077,120078],{"class":278}," snapd.service\n",[109,120080,120081,120083,120085,120087],{"class":111,"line":119},[109,120082,25751],{"class":211},[109,120084,27688],{"class":278},[109,120086,120075],{"class":278},[109,120088,120089],{"class":278}," snapd.socket\n",[109,120091,120092,120094,120096,120098],{"class":111,"line":140},[109,120093,25751],{"class":211},[109,120095,27688],{"class":278},[109,120097,120075],{"class":278},[109,120099,120100],{"class":278}," snapd.seeded.service\n",[19,120102,120103],{},"然后查看snap应用列表",[19,120105,120106,120107,120112],{},"根据你安装的选择不同（最小安装或普通安装），有",[1776,120108,120111],{"href":120109,"rel":120110},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25039],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[99,120114,120116],{"className":118471,"code":120115,"language":118473,"meta":104,"style":104},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[106,120117,120118,120123],{"__ignoreMap":104},[109,120119,120120],{"class":111,"line":112},[109,120121,120122],{"class":115},"# 查询当前系统上snap安装了哪些app\n",[109,120124,120125,120128],{"class":111,"line":119},[109,120126,120127],{"class":211},"snap",[109,120129,120130],{"class":278}," list\n",[19,120132,120133],{},[938,120134],{"alt":104,"src":120135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120137,120138,120139,120142],{},"卸载掉图中所有应用，按照 ",[23,120140,120141],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[99,120144,120146],{"className":118471,"code":120145,"language":118473,"meta":104,"style":104},"#移除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",[106,120147,120148,120153,120165,120170,120181,120186,120197,120202,120213,120218,120222,120227,120238,120249],{"__ignoreMap":104},[109,120149,120150],{"class":111,"line":112},[109,120151,120152],{"class":115},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[109,120154,120155,120157,120160,120162],{"class":111,"line":119},[109,120156,25751],{"class":211},[109,120158,120159],{"class":278}," snap",[109,120161,27254],{"class":278},[109,120163,120164],{"class":278}," snap-store\n",[109,120166,120167],{"class":111,"line":140},[109,120168,120169],{"class":115},"#移除firefox浏览器\n",[109,120171,120172,120174,120176,120178],{"class":111,"line":154},[109,120173,25751],{"class":211},[109,120175,120159],{"class":278},[109,120177,27254],{"class":278},[109,120179,120180],{"class":278}," firefox\n",[109,120182,120183],{"class":111,"line":161},[109,120184,120185],{"class":115},"#移除gnome-42-2204\n",[109,120187,120188,120190,120192,120194],{"class":111,"line":167},[109,120189,25751],{"class":211},[109,120191,120159],{"class":278},[109,120193,27254],{"class":278},[109,120195,120196],{"class":278}," gnome-42-2204\n",[109,120198,120199],{"class":111,"line":185},[109,120200,120201],{"class":115},"#移除gtk-common-themes\n",[109,120203,120204,120206,120208,120210],{"class":111,"line":201},[109,120205,25751],{"class":211},[109,120207,120159],{"class":278},[109,120209,27254],{"class":278},[109,120211,120212],{"class":278}," gtk-common-themes\n",[109,120214,120215],{"class":111,"line":206},[109,120216,120217],{"class":115},"#移除其它...\n",[109,120219,120220],{"class":111,"line":218},[109,120221,4022],{"class":126},[109,120223,120224],{"class":111,"line":223},[109,120225,120226],{"class":115},"#移除core22,bare以及snapd\n",[109,120228,120229,120231,120233,120235],{"class":111,"line":229},[109,120230,25751],{"class":211},[109,120232,120159],{"class":278},[109,120234,27254],{"class":278},[109,120236,120237],{"class":278}," core22\n",[109,120239,120240,120242,120244,120246],{"class":111,"line":244},[109,120241,25751],{"class":211},[109,120243,120159],{"class":278},[109,120245,27254],{"class":278},[109,120247,120248],{"class":278}," bare\n",[109,120250,120251,120253,120255,120257],{"class":111,"line":258},[109,120252,25751],{"class":211},[109,120254,120159],{"class":278},[109,120256,27254],{"class":278},[109,120258,120259],{"class":278}," snapd\n",[19,120261,120262],{},[938,120263],{"alt":104,"src":120264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120266,120267],{},"输入以下命令查看是否还有snap包",[99,120269,120271],{"className":118471,"code":120270,"language":118473,"meta":104,"style":104},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[106,120272,120273,120279,120283,120287,120291],{"__ignoreMap":104},[109,120274,120275,120277],{"class":111,"line":112},[109,120276,120127],{"class":211},[109,120278,120130],{"class":278},[109,120280,120281],{"class":111,"line":119},[109,120282,119979],{"class":115},[109,120284,120285],{"class":111,"line":140},[109,120286,120003],{"class":211},[109,120288,120289],{"class":111,"line":154},[109,120290,120012],{"class":115},[109,120292,120293],{"class":111,"line":161},[109,120294,120046],{"class":211},[19,120296,120297],{},[938,120298],{"alt":104,"src":120299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[51,120301,120303],{"id":120302},"_324-移除snap","3.2.4 移除snap",[19,120305,120306,120307,120312],{},"在删除掉",[1776,120308,120311],{"href":120309,"rel":120310},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25039],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[99,120314,120316],{"className":118471,"code":120315,"language":118473,"meta":104,"style":104}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[106,120317,120318,120323,120336,120341,120352],{"__ignoreMap":104},[109,120319,120320],{"class":111,"line":112},[109,120321,120322],{"class":115}," #使用apt移除掉snap\n",[109,120324,120325,120327,120329,120331,120334],{"class":111,"line":119},[109,120326,25751],{"class":211},[109,120328,118492],{"class":278},[109,120330,118800],{"class":278},[109,120332,120333],{"class":133}," --purge",[109,120335,120259],{"class":278},[109,120337,120338],{"class":111,"line":140},[109,120339,120340],{"class":115},"#移除snapd的一些目录\n",[109,120342,120343,120345,120347,120349],{"class":111,"line":154},[109,120344,25751],{"class":211},[109,120346,119728],{"class":278},[109,120348,26500],{"class":133},[109,120350,120351],{"class":278}," \u002Fvar\u002Fcache\u002Fsnapd\n",[109,120353,120354,120356,120358,120360],{"class":111,"line":161},[109,120355,25751],{"class":211},[109,120357,119728],{"class":278},[109,120359,26500],{"class":133},[109,120361,120362],{"class":278}," ~\u002Fsnap\n",[19,120364,120365,120366,120369],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[106,120367,120368],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[51,120371,120373],{"id":120372},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120375,120376],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[99,120378,120380],{"className":118471,"code":120379,"language":118473,"meta":104,"style":104},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[106,120381,120382],{"__ignoreMap":104},[109,120383,120384,120386,120388],{"class":111,"line":112},[109,120385,25751],{"class":211},[109,120387,119758],{"class":278},[109,120389,120390],{"class":278}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120392,120393,120394,120397],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[106,120395,120396],{},":wq"," 回车",[99,120399,120401],{"className":118471,"code":120400,"language":118473,"meta":104,"style":104},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[106,120402,120403,120410,120424],{"__ignoreMap":104},[109,120404,120405,120408],{"class":111,"line":112},[109,120406,120407],{"class":211},"Package:",[109,120409,120259],{"class":278},[109,120411,120412,120415,120418,120421],{"class":111,"line":119},[109,120413,120414],{"class":211},"Pin:",[109,120416,120417],{"class":278}," release",[109,120419,120420],{"class":278}," a=",[109,120422,120423],{"class":133},"*\n",[109,120425,120426,120429],{"class":111,"line":140},[109,120427,120428],{"class":211},"Pin-Priority:",[109,120430,120431],{"class":133}," -10\n",[19,120433,120434],{},[938,120435],{"alt":104,"src":120436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[51,120438,120440],{"id":120439},"_326-测试是否成功","3.2.6 测试是否成功",[99,120442,120444],{"className":118471,"code":120443,"language":118473,"meta":104,"style":104},"sudo apt update\nsudo apt install firefox\n",[106,120445,120446,120454],{"__ignoreMap":104},[109,120447,120448,120450,120452],{"class":111,"line":112},[109,120449,25751],{"class":211},[109,120451,118492],{"class":278},[109,120453,27417],{"class":278},[109,120455,120456,120458,120460,120462],{"class":111,"line":119},[109,120457,25751],{"class":211},[109,120459,118492],{"class":278},[109,120461,25008],{"class":278},[109,120463,120180],{"class":278},[19,120465,120466],{},"这里提示snapd无法被安装，就证明成功了",[19,120468,120469],{},[938,120470],{"alt":104,"src":120471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[51,120473,120475],{"id":120474},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120477,120478],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120480,120481],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120483,120484],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[99,120486,120488],{"className":118471,"code":120487,"language":118473,"meta":104,"style":104},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[106,120489,120490,120495,120504,120509,120517],{"__ignoreMap":104},[109,120491,120492],{"class":111,"line":112},[109,120493,120494],{"class":115},"# 添加Mozilla提供的源\n",[109,120496,120497,120499,120501],{"class":111,"line":119},[109,120498,25751],{"class":211},[109,120500,120019],{"class":278},[109,120502,120503],{"class":278}," ppa:mozillateam\u002Fppa\n",[109,120505,120506],{"class":111,"line":140},[109,120507,120508],{"class":115},"# 安装Firefox\n",[109,120510,120511,120513,120515],{"class":111,"line":154},[109,120512,25751],{"class":211},[109,120514,118492],{"class":278},[109,120516,27417],{"class":278},[109,120518,120519,120521,120523,120525],{"class":111,"line":161},[109,120520,25751],{"class":211},[109,120522,118492],{"class":278},[109,120524,25008],{"class":278},[109,120526,120180],{"class":278},[51,120528,120530],{"id":120529},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120532,120533],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120535,120536],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[99,120538,120540],{"className":118471,"code":120539,"language":118473,"meta":104,"style":104},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[106,120541,120542,120547,120557,120565,120569],{"__ignoreMap":104},[109,120543,120544],{"class":111,"line":112},[109,120545,120546],{"class":115},"#删掉禁止安装snap的配置文件\n",[109,120548,120549,120551,120553,120555],{"class":111,"line":119},[109,120550,25751],{"class":211},[109,120552,119728],{"class":278},[109,120554,26500],{"class":133},[109,120556,120390],{"class":278},[109,120558,120559,120561,120563],{"class":111,"line":140},[109,120560,25751],{"class":211},[109,120562,118492],{"class":278},[109,120564,27417],{"class":278},[109,120566,120567],{"class":111,"line":154},[109,120568,158],{"emptyLinePlaceholder":157},[109,120570,120571,120573,120575],{"class":111,"line":161},[109,120572,25751],{"class":211},[109,120574,118492],{"class":278},[109,120576,120577],{"class":278}," dist-update\n",[14,120579,120581],{"id":120580},"_33-中文输入法","3.3 中文输入法",[51,120583,120585],{"id":120584},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120587,120588],{},"官网下载搜狗输入法",[19,120590,120591],{},[938,120592],{"alt":104,"src":120593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120595,120596],{},[938,120597],{"alt":104,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120600,120601],{},"打开终端输入如下",[99,120603,120605],{"className":118471,"code":120604,"language":118473,"meta":104,"style":104},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[106,120606,120607,120614],{"__ignoreMap":104},[109,120608,120609,120611],{"class":111,"line":112},[109,120610,102451],{"class":133},[109,120612,120613],{"class":278}," ~\u002FDownloads\u002F\n",[109,120615,120616,120618,120620,120622],{"class":111,"line":119},[109,120617,25751],{"class":211},[109,120619,118492],{"class":278},[109,120621,25008],{"class":278},[109,120623,120624],{"class":278}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120626,120627],{},"打开Fcitx",[19,120629,120630,120633],{},[938,120631],{"alt":104,"src":120632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[938,120634],{"alt":104,"src":120635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120637,120638],{},[938,120639],{"alt":104,"src":120640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120642,120643],{},"添加搜狗输入法",[19,120645,120646],{},[938,120647],{"alt":104,"src":120648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120650,120651],{},[938,120652],{"alt":104,"src":120653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120655,120656],{},"将搜狗输入法设置为唯一输入法",[19,120658,120659],{},[938,120660],{"alt":104,"src":120661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[51,120663,120665],{"id":120664},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[765,120667,120668],{},[30,120669,120670],{},"卸载旧输入法",[99,120672,120674],{"className":119698,"code":120673,"language":119700,"meta":104,"style":104},"sudo apt purge fcitx* ibus*\n",[106,120675,120676],{"__ignoreMap":104},[109,120677,120678,120680,120682,120684,120687,120689,120692],{"class":111,"line":112},[109,120679,25751],{"class":211},[109,120681,118492],{"class":278},[109,120683,118833],{"class":278},[109,120685,120686],{"class":278}," fcitx",[109,120688,1988],{"class":133},[109,120690,120691],{"class":278}," ibus",[109,120693,120423],{"class":133},[765,120695,120696],{"start":119},[30,120697,120698],{},"安装Fcitx5",[99,120700,120702],{"className":118471,"code":120701,"language":118473,"meta":104,"style":104},"# 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",[106,120703,120704,120709,120723,120727,120732,120741,120749],{"__ignoreMap":104},[109,120705,120706],{"class":111,"line":112},[109,120707,120708],{"class":115},"# Ubuntu22.04及以上、Debian12及以上\n",[109,120710,120711,120713,120715,120717,120720],{"class":111,"line":119},[109,120712,25751],{"class":211},[109,120714,118492],{"class":278},[109,120716,25008],{"class":278},[109,120718,120719],{"class":278}," fcitx5",[109,120721,120722],{"class":278}," fcitx5-chinese-addons\n",[109,120724,120725],{"class":111,"line":140},[109,120726,158],{"emptyLinePlaceholder":157},[109,120728,120729],{"class":111,"line":154},[109,120730,120731],{"class":115},"# Ubuntu20.04\n",[109,120733,120734,120736,120738],{"class":111,"line":161},[109,120735,25751],{"class":211},[109,120737,120019],{"class":278},[109,120739,120740],{"class":278}," ppa:zhsj\u002Ffcitx5\n",[109,120742,120743,120745,120747],{"class":111,"line":167},[109,120744,25751],{"class":211},[109,120746,118492],{"class":278},[109,120748,27417],{"class":278},[109,120750,120751,120753,120755,120757,120759],{"class":111,"line":185},[109,120752,25751],{"class":211},[109,120754,118492],{"class":278},[109,120756,25008],{"class":278},[109,120758,120719],{"class":278},[109,120760,120722],{"class":278},[765,120762,120763,120766],{"start":140},[30,120764,120765],{},"Reboot System",[30,120767,120768],{},"启动Fcitx5",[19,120770,120771],{},[938,120772],{"alt":104,"src":120773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[765,120775,120776],{"start":161},[30,120777,120778],{},"修改一些设置",[19,120780,120781],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120783,120784],{},[938,120785],{"alt":104,"src":120786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120788,120789],{},"添加快捷键以便于更好切换中英文",[19,120791,120792],{},[938,120793],{"alt":104,"src":120794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[765,120796,120797],{"start":167},[30,120798,120799],{},"重启",[99,120801,120803],{"className":119698,"code":120802,"language":119700,"meta":104,"style":104},"sudo shutdown -r now\n",[106,120804,120805],{"__ignoreMap":104},[109,120806,120807,120809,120812,120815],{"class":111,"line":112},[109,120808,25751],{"class":211},[109,120810,120811],{"class":278}," shutdown",[109,120813,120814],{"class":133}," -r",[109,120816,120817],{"class":278}," now\n",[765,120819,120820],{"start":185},[30,120821,120822],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120824,120825],{},[1776,120826,120827],{"href":120827,"rel":120828},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25039],[765,120830,120831],{"start":201},[30,120832,120833],{},"再重启",[99,120835,120836],{"className":119698,"code":120802,"language":119700,"meta":104,"style":104},[106,120837,120838],{"__ignoreMap":104},[109,120839,120840,120842,120844,120846],{"class":111,"line":112},[109,120841,25751],{"class":211},[109,120843,120811],{"class":278},[109,120845,120814],{"class":133},[109,120847,120817],{"class":278},[14,120849,120851],{"id":120850},"_34-pip3源替换","3.4 pip3源替换",[19,120853,120854],{},"非Debian系发行版需要做。",[19,120856,120857],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120859,120860],{},"使用dnf的系统也可能不用做。",[99,120862,120864],{"className":118471,"code":120863,"language":118473,"meta":104,"style":104},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[106,120865,120866,120871,120878,120883,120888],{"__ignoreMap":104},[109,120867,120868],{"class":111,"line":112},[109,120869,120870],{"class":115},"# 检查是否已安装 pip\n",[109,120872,120873,120876],{"class":111,"line":119},[109,120874,120875],{"class":211},"pip3",[109,120877,27468],{"class":133},[109,120879,120880],{"class":111,"line":140},[109,120881,120882],{"class":115},"# 如果未安装，先安装 pip3（见下方）\n",[109,120884,120885],{"class":111,"line":154},[109,120886,120887],{"class":115},"# 配置 pip 使用清华源\n",[109,120889,120890,120892,120895,120898,120901],{"class":111,"line":161},[109,120891,120875],{"class":211},[109,120893,120894],{"class":278}," config",[109,120896,120897],{"class":278}," set",[109,120899,120900],{"class":278}," global.index-url",[109,120902,120903],{"class":278}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120905,120906],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120908,120909],{},[938,120910],{"alt":104,"src":120911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[99,120913,120915],{"className":118471,"code":120914,"language":118473,"meta":104,"style":104},"#安装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",[106,120916,120917,120922,120930,120941,120945,120950,120969,120973,120978,120990,120994,120999],{"__ignoreMap":104},[109,120918,120919],{"class":111,"line":112},[109,120920,120921],{"class":115},"#安装pip3\n",[109,120923,120924,120926,120928],{"class":111,"line":119},[109,120925,25751],{"class":211},[109,120927,118492],{"class":278},[109,120929,27417],{"class":278},[109,120931,120932,120934,120936,120938],{"class":111,"line":140},[109,120933,25751],{"class":211},[109,120935,27251],{"class":278},[109,120937,25008],{"class":278},[109,120939,120940],{"class":278}," python3-pip\n",[109,120942,120943],{"class":111,"line":154},[109,120944,158],{"emptyLinePlaceholder":157},[109,120946,120947],{"class":111,"line":161},[109,120948,120949],{"class":115},"#更新pip3\n",[109,120951,120952,120954,120956,120958,120960,120962,120965,120967],{"class":111,"line":167},[109,120953,102054],{"class":211},[109,120955,102057],{"class":133},[109,120957,102080],{"class":278},[109,120959,25008],{"class":278},[109,120961,27605],{"class":133},[109,120963,120964],{"class":278}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[109,120966,102085],{"class":133},[109,120968,102088],{"class":278},[109,120970,120971],{"class":111,"line":185},[109,120972,158],{"emptyLinePlaceholder":157},[109,120974,120975],{"class":111,"line":201},[109,120976,120977],{"class":115},"#设置pip源为清华源\n",[109,120979,120980,120982,120984,120986,120988],{"class":111,"line":206},[109,120981,120875],{"class":211},[109,120983,120894],{"class":278},[109,120985,120897],{"class":278},[109,120987,120900],{"class":278},[109,120989,120903],{"class":278},[109,120991,120992],{"class":111,"line":218},[109,120993,158],{"emptyLinePlaceholder":157},[109,120995,120996],{"class":111,"line":223},[109,120997,120998],{"class":115},"#测试\n",[109,121000,121001,121003,121005,121007,121009,121011],{"class":111,"line":229},[109,121002,102054],{"class":211},[109,121004,102057],{"class":133},[109,121006,102080],{"class":278},[109,121008,25008],{"class":278},[109,121010,102085],{"class":133},[109,121012,102088],{"class":278},[19,121014,121015],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121017,121018],{},[938,121019],{"alt":104,"src":121020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121022,121024],{"id":121023},"_35-显卡驱动安装","3.5 显卡驱动安装",[51,121026,121028],{"id":121027},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[99,121030,121032],{"className":119698,"code":121031,"language":119700,"meta":104,"style":104},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[106,121033,121034,121039,121054,121059],{"__ignoreMap":104},[109,121035,121036],{"class":111,"line":112},[109,121037,121038],{"class":115},"# 如果是使用apt安装的驱动\n",[109,121040,121041,121043,121045,121047,121049,121052],{"class":111,"line":119},[109,121042,25751],{"class":211},[109,121044,27251],{"class":278},[109,121046,27254],{"class":278},[109,121048,120333],{"class":133},[109,121050,121051],{"class":278}," nvidia",[109,121053,120423],{"class":133},[109,121055,121056],{"class":111,"line":140},[109,121057,121058],{"class":115},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[109,121060,121061,121063],{"class":111,"line":154},[109,121062,25751],{"class":211},[109,121064,121065],{"class":278}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[51,121067,121069],{"id":121068},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23171,121071,121073],{"id":121072},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24083,121075,121077],{"id":121076},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[99,121079,121081],{"className":119698,"code":121080,"language":119700,"meta":104,"style":104},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[106,121082,121083,121088,121099,121104,121114,121119],{"__ignoreMap":104},[109,121084,121085],{"class":111,"line":112},[109,121086,121087],{"class":115},"# 安装英伟达驱动\n",[109,121089,121090,121092,121094,121096],{"class":111,"line":119},[109,121091,25751],{"class":211},[109,121093,118492],{"class":278},[109,121095,25008],{"class":278},[109,121097,121098],{"class":278}," nvidia-driver-版本号\n",[109,121100,121101],{"class":111,"line":140},[109,121102,121103],{"class":115},"# 重启 \n",[109,121105,121106,121108,121110,121112],{"class":111,"line":154},[109,121107,25751],{"class":211},[109,121109,120811],{"class":278},[109,121111,120814],{"class":133},[109,121113,120817],{"class":278},[109,121115,121116],{"class":111,"line":161},[109,121117,121118],{"class":115},"# 检查驱动是否安装成功\n",[109,121120,121121],{"class":111,"line":167},[109,121122,121123],{"class":211},"nvidia-smi\n",[24083,121125,121127],{"id":121126},"_35212-debian","3.5.2.1.2 Debian",[99,121129,121131],{"className":119698,"code":121130,"language":119700,"meta":104,"style":104},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[106,121132,121133,121137,121151,121155,121165,121169],{"__ignoreMap":104},[109,121134,121135],{"class":111,"line":112},[109,121136,121087],{"class":115},[109,121138,121139,121141,121143,121145,121148],{"class":111,"line":119},[109,121140,25751],{"class":211},[109,121142,118492],{"class":278},[109,121144,25008],{"class":278},[109,121146,121147],{"class":278}," nvidia-driver",[109,121149,121150],{"class":278}," nvidia-settings\n",[109,121152,121153],{"class":111,"line":140},[109,121154,121103],{"class":115},[109,121156,121157,121159,121161,121163],{"class":111,"line":154},[109,121158,25751],{"class":211},[109,121160,120811],{"class":278},[109,121162,120814],{"class":133},[109,121164,120817],{"class":278},[109,121166,121167],{"class":111,"line":161},[109,121168,121118],{"class":115},[109,121170,121171],{"class":111,"line":167},[109,121172,121123],{"class":211},[23171,121174,121176],{"id":121175},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121178,121179,121180,121183],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[23,121181,121182],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121185,121186,121187],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24727,121188,121189],{},[23,121190,121191],{},"（也可以不禁用桌面环境，直接进行下一步。）",[99,121193,121195],{"className":119698,"code":121194,"language":119700,"meta":104,"style":104},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[106,121196,121197,121202,121212,121217,121230,121235],{"__ignoreMap":104},[109,121198,121199],{"class":111,"line":112},[109,121200,121201],{"class":115},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[109,121203,121204,121206,121209],{"class":111,"line":119},[109,121205,25751],{"class":211},[109,121207,121208],{"class":278}," telinit",[109,121210,121211],{"class":133}," 3\n",[109,121213,121214],{"class":111,"line":140},[109,121215,121216],{"class":115},"# ubuntu 使用下方命令\n",[109,121218,121219,121221,121224,121227],{"class":111,"line":154},[109,121220,25751],{"class":211},[109,121222,121223],{"class":278}," service",[109,121225,121226],{"class":278}," lightdm",[109,121228,121229],{"class":278}," stop\n",[109,121231,121232],{"class":111,"line":161},[109,121233,121234],{"class":115},"# Fedora 使用下方命令\n",[109,121236,121237,121239,121241,121244],{"class":111,"line":167},[109,121238,25751],{"class":211},[109,121240,27688],{"class":278},[109,121242,121243],{"class":278}," isolate",[109,121245,121246],{"class":278}," multi-user.target\n",[19,121248,121249],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[99,121251,121253],{"className":119698,"code":121252,"language":119700,"meta":104,"style":104},"# 编译环境+准备工作\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",[106,121254,121255,121260,121271,121276,121283,121288,121300,121305,121312,121317],{"__ignoreMap":104},[109,121256,121257],{"class":111,"line":112},[109,121258,121259],{"class":115},"# 编译环境+准备工作\n",[109,121261,121262,121264,121266,121268],{"class":111,"line":119},[109,121263,25751],{"class":211},[109,121265,118492],{"class":278},[109,121267,25008],{"class":278},[109,121269,121270],{"class":278}," build-essential\n",[109,121272,121273],{"class":111,"line":140},[109,121274,121275],{"class":115},"# 进入到.run目录中\n",[109,121277,121278,121280],{"class":111,"line":154},[109,121279,102451],{"class":133},[109,121281,121282],{"class":278}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[109,121284,121285],{"class":111,"line":161},[109,121286,121287],{"class":115},"# 给驱动文件增加可执行权限：\n",[109,121289,121290,121292,121294,121297],{"class":111,"line":167},[109,121291,25751],{"class":211},[109,121293,25754],{"class":278},[109,121295,121296],{"class":278}," a+x",[109,121298,121299],{"class":278}," NVIDIA-Linux-x86_64-550.107.02.run\n",[109,121301,121302],{"class":111,"line":185},[109,121303,121304],{"class":115},"# 然后执行安装：\n",[109,121306,121307,121309],{"class":111,"line":201},[109,121308,25751],{"class":211},[109,121310,121311],{"class":278}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[109,121313,121314],{"class":111,"line":206},[109,121315,121316],{"class":115},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[109,121318,121319,121321,121324],{"class":111,"line":218},[109,121320,25751],{"class":211},[109,121322,121323],{"class":278}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[109,121325,121326],{"class":133},"  --no-opengl-files\n",[19,121328,121329],{},"安装完毕重启即可",[99,121331,121333],{"className":119698,"code":121332,"language":119700,"meta":104,"style":104},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[106,121334,121335,121339,121345,121349],{"__ignoreMap":104},[109,121336,121337],{"class":111,"line":112},[109,121338,121103],{"class":115},[109,121340,121341,121343],{"class":111,"line":119},[109,121342,25751],{"class":211},[109,121344,27822],{"class":278},[109,121346,121347],{"class":111,"line":140},[109,121348,121118],{"class":115},[109,121350,121351],{"class":111,"line":154},[109,121352,121123],{"class":211},[51,121354,121356],{"id":121355},"_353-安装cuda","3.5.3 安装CUDA",[19,121358,121359],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121361,121362],{},[938,121363],{"alt":104,"src":121364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[765,121366,121367],{},[30,121368,121369],{},"先查看显卡驱动所支持的最高CUDA版本",[99,121371,121372],{"className":119698,"code":121123,"language":119700,"meta":104,"style":104},[106,121373,121374],{"__ignoreMap":104},[109,121375,121376],{"class":111,"line":112},[109,121377,121123],{"class":211},[19,121379,121380],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121382,121383],{},[938,121384],{"alt":104,"src":121385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[765,121387,121388],{"start":119},[30,121389,121390],{},"下载CUDA并安装CUDA",[19,121392,119477,121393],{},[1776,121394,119480],{"href":119480,"rel":121395},[25039],[19,121397,121398],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121400,121401],{},[938,121402],{"alt":104,"src":121403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121405,121406,121407,121412],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[1776,121408,121411],{"href":121409,"rel":121410},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25039],"Vinci机器人队单片机教程","）",[19,121414,121415],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121417,121418],{},[938,121419],{"alt":104,"src":121420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121422,121423],{},"将最下方框框里的命令敲入终端",[99,121425,121427],{"className":119698,"code":121426,"language":119700,"meta":104,"style":104},"# 在当前文件夹下创建一个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",[106,121428,121429,121434,121443,121448,121455,121460,121468,121473,121484,121489],{"__ignoreMap":104},[109,121430,121431],{"class":111,"line":112},[109,121432,121433],{"class":115},"# 在当前文件夹下创建一个ttt的子文件夹\n",[109,121435,121436,121438,121440],{"class":111,"line":119},[109,121437,102441],{"class":211},[109,121439,30391],{"class":133},[109,121441,121442],{"class":278}," .\u002Fttt\n",[109,121444,121445],{"class":111,"line":140},[109,121446,121447],{"class":115},"# 进入ttt文件夹\n",[109,121449,121450,121452],{"class":111,"line":154},[109,121451,102451],{"class":133},[109,121453,121454],{"class":278}," ttt\n",[109,121456,121457],{"class":111,"line":161},[109,121458,121459],{"class":115},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[109,121461,121462,121465],{"class":111,"line":167},[109,121463,121464],{"class":211},"wget",[109,121466,121467],{"class":278}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[109,121469,121470],{"class":111,"line":185},[109,121471,121472],{"class":115},"# 给予权限\n",[109,121474,121475,121477,121479,121481],{"class":111,"line":201},[109,121476,25751],{"class":211},[109,121478,25754],{"class":278},[109,121480,121296],{"class":278},[109,121482,121483],{"class":278}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[109,121485,121486],{"class":111,"line":206},[109,121487,121488],{"class":115},"# 运行脚本\n",[109,121490,121491,121493],{"class":111,"line":218},[109,121492,25751],{"class":211},[109,121494,121483],{"class":278},[19,121496,121497],{},[938,121498],{"alt":104,"src":121499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121501,121502],{},"正在安装中：",[19,121504,121505],{},[938,121506],{"alt":104,"src":121507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121509,121510],{},"输入accept接受即可",[19,121512,121513],{},[938,121514],{"alt":104,"src":121515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121517,121518],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121520,121521],{},[938,121522],{"alt":104,"src":121523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121525,121526],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121528,121529],{},[938,121530],{"alt":104,"src":121531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[765,121533,121534],{"start":140},[30,121535,121536],{},"配置环境",[19,121538,121539],{},"根据上方确认一下路径，比如我上面红色框起来的为",[99,121541,121543],{"className":119698,"code":121542,"language":119700,"meta":104,"style":104},"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",[106,121544,121545,121561,121576],{"__ignoreMap":104},[109,121546,121547,121550,121553,121556,121559],{"class":111,"line":112},[109,121548,121549],{"class":211},"Please",[109,121551,121552],{"class":278}," make",[109,121554,121555],{"class":278}," sure",[109,121557,121558],{"class":278}," that",[109,121560,4022],{"class":126},[109,121562,121563,121565,121568,121571,121574],{"class":111,"line":119},[109,121564,53446],{"class":211},[109,121566,121567],{"class":278},"   PATH",[109,121569,121570],{"class":278}," includes",[109,121572,121573],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[109,121575,4022],{"class":126},[109,121577,121578,121580,121583,121585,121588,121591,121593,121596,121599,121602,121605,121607,121610,121612],{"class":111,"line":140},[109,121579,53446],{"class":211},[109,121581,121582],{"class":278},"   LD_LIBRARY_PATH",[109,121584,121570],{"class":278},[109,121586,121587],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[109,121589,121590],{"class":278}," or,",[109,121592,6546],{"class":278},[109,121594,121595],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[109,121597,121598],{"class":278}," to",[109,121600,121601],{"class":278}," \u002Fetc\u002Fld.so.conf",[109,121603,121604],{"class":278}," and",[109,121606,28405],{"class":278},[109,121608,121609],{"class":278}," ldconfig",[109,121611,65779],{"class":278},[109,121613,121614],{"class":278}," root\n",[19,121616,121617],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[99,121619,121621],{"className":119698,"code":121620,"language":119700,"meta":104,"style":104},"which nvcc\n",[106,121622,121623],{"__ignoreMap":104},[109,121624,121625,121628],{"class":111,"line":112},[109,121626,121627],{"class":133},"which",[109,121629,121630],{"class":278}," nvcc\n",[19,121632,121633],{},[938,121634],{"alt":104,"src":121635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121637,121638],{},"所以我进行以下操作：",[99,121640,121642],{"className":119698,"code":121641,"language":119700,"meta":104,"style":104},"sudo vim ~\u002F.bashrc\n",[106,121643,121644],{"__ignoreMap":104},[109,121645,121646,121648,121650],{"class":111,"line":112},[109,121647,25751],{"class":211},[109,121649,119758],{"class":278},[109,121651,121652],{"class":278}," ~\u002F.bashrc\n",[19,121654,121655],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[99,121657,121659],{"className":119698,"code":121658,"language":119700,"meta":104,"style":104},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[106,121660,121661,121673],{"__ignoreMap":104},[109,121662,121663,121665,121668,121670],{"class":111,"line":112},[109,121664,26217],{"class":122},[109,121666,121667],{"class":126}," PATH",[109,121669,130],{"class":122},[109,121671,121672],{"class":126},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[109,121674,121675,121677,121680,121682],{"class":111,"line":119},[109,121676,26217],{"class":122},[109,121678,121679],{"class":126}," LD_LIBRARY_PATH",[109,121681,130],{"class":122},[109,121683,121684],{"class":126},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121686,121687],{},[938,121688],{"alt":104,"src":121689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[99,121691,121693],{"className":119698,"code":121692,"language":119700,"meta":104,"style":104},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[106,121694,121695,121700,121706,121711],{"__ignoreMap":104},[109,121696,121697],{"class":111,"line":112},[109,121698,121699],{"class":115},"# 刷新当前终端的环境变量\n",[109,121701,121702,121704],{"class":111,"line":119},[109,121703,102068],{"class":133},[109,121705,121652],{"class":278},[109,121707,121708],{"class":111,"line":140},[109,121709,121710],{"class":115},"# 验证CUDA是否安装成功\n",[109,121712,121713,121716],{"class":111,"line":154},[109,121714,121715],{"class":211},"nvcc",[109,121717,121718],{"class":133}," -V\n",[19,121720,121721],{},"出现下图这种则安装成功。",[19,121723,121724],{},[938,121725],{"alt":104,"src":121726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[51,121728,121730],{"id":121729},"_354-安装cudnn","3.5.4 安装cuDNN",[765,121732,121733],{},[30,121734,121735],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121737,121738,121739,121744],{},"前往 NVIDIA cuDNN 下载页面：",[1776,121740,121743],{"href":121741,"rel":121742},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25039],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121746,121747],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121749,121750],{},[938,121751],{"alt":104,"src":121752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121754,121755],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121757,121758],{},[938,121759],{"alt":104,"src":121760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121762,121763],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121765,121766],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121768,121769],{},[23,121770,121771],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121773,121774],{},"下载好的：",[19,121776,121777],{},[938,121778],{"alt":104,"src":121779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[765,121781,121782],{"start":119},[30,121783,121784],{},"安装cuDNN",[19,121786,121787],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121789,121790],{},[938,121791],{"alt":104,"src":121792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121794,121795],{},"解压文件，并复制到对应位置完成安装",[99,121797,121799],{"className":119698,"code":121798,"language":119700,"meta":104,"style":104},"# 解压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",[106,121800,121801,121806,121817,121822,121829,121834,121850,121864,121869,121880,121889,121893,121909],{"__ignoreMap":104},[109,121802,121803],{"class":111,"line":112},[109,121804,121805],{"class":115},"# 解压cuDNN文件\n",[109,121807,121808,121811,121814],{"class":111,"line":119},[109,121809,121810],{"class":211},"tar",[109,121812,121813],{"class":133}," -xvf",[109,121815,121816],{"class":278}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[109,121818,121819],{"class":111,"line":140},[109,121820,121821],{"class":115},"# cd进文件夹\n",[109,121823,121824,121826],{"class":111,"line":154},[109,121825,102451],{"class":133},[109,121827,121828],{"class":278}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[109,121830,121831],{"class":111,"line":161},[109,121832,121833],{"class":115},"# 复制cuDNN文件到CUDA目录\n",[109,121835,121836,121838,121840,121843,121845,121848],{"class":111,"line":167},[109,121837,25751],{"class":211},[109,121839,29036],{"class":278},[109,121841,121842],{"class":278}," include\u002Fcudnn",[109,121844,1988],{"class":133},[109,121846,121847],{"class":278},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[109,121849,4022],{"class":126},[109,121851,121852,121854,121856,121859,121861],{"class":111,"line":185},[109,121853,25751],{"class":211},[109,121855,29036],{"class":278},[109,121857,121858],{"class":278}," lib\u002Flibcudnn",[109,121860,1988],{"class":133},[109,121862,121863],{"class":278},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[109,121865,121866],{"class":111,"line":201},[109,121867,121868],{"class":115},"# 对比一下有没有缺文件\n",[109,121870,121871,121873,121876,121878],{"class":111,"line":206},[109,121872,27936],{"class":211},[109,121874,121875],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[109,121877,1988],{"class":133},[109,121879,4022],{"class":126},[109,121881,121882,121884,121887],{"class":111,"line":218},[109,121883,27936],{"class":211},[109,121885,121886],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[109,121888,120423],{"class":133},[109,121890,121891],{"class":111,"line":223},[109,121892,121472],{"class":115},[109,121894,121895,121897,121899,121902,121904,121906],{"class":111,"line":229},[109,121896,25751],{"class":211},[109,121898,25754],{"class":278},[109,121900,121901],{"class":278}," a+r",[109,121903,121875],{"class":278},[109,121905,1988],{"class":133},[109,121907,121908],{"class":126},"   \n",[109,121910,121911,121913,121915,121917,121919],{"class":111,"line":244},[109,121912,25751],{"class":211},[109,121914,25754],{"class":278},[109,121916,121901],{"class":278},[109,121918,121886],{"class":278},[109,121920,120423],{"class":133},[765,121922,121923],{"start":140},[30,121924,121925],{},"检查是否安装成功",[99,121927,121929],{"className":119698,"code":121928,"language":119700,"meta":104,"style":104},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[106,121930,121931,121936],{"__ignoreMap":104},[109,121932,121933],{"class":111,"line":112},[109,121934,121935],{"class":115},"# 检查cuDNN版本命令\n",[109,121937,121938,121941,121944,121946,121948,121951,121954],{"class":111,"line":119},[109,121939,121940],{"class":211},"cat",[109,121942,121943],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[109,121945,26284],{"class":122},[109,121947,31411],{"class":211},[109,121949,121950],{"class":278}," CUDNN_MAJOR",[109,121952,121953],{"class":133}," -A",[109,121955,48898],{"class":133},[19,121957,121958],{},"出现下图这样的就是安装成功了",[19,121960,121961],{},[938,121962],{"alt":104,"src":121963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[765,121965,121966],{"start":154},[30,121967,121968],{},"软链接(一般不需要)",[99,121970,121972],{"className":119698,"code":121971,"language":119700,"meta":104,"style":104},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[106,121973,121974,121979],{"__ignoreMap":104},[109,121975,121976],{"class":111,"line":112},[109,121977,121978],{"class":115},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[109,121980,121981,121983],{"class":111,"line":119},[109,121982,25751],{"class":211},[109,121984,121985],{"class":278}," ldconfig\n",[19,121987,121988],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[99,121990,121995],{"className":121991,"code":121992,"language":121993,"meta":121994,"style":104},"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",[106,121996,121997,122002,122007,122012,122017,122022,122027],{"__ignoreMap":104},[109,121998,121999],{"class":111,"line":112},[109,122000,122001],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[109,122003,122004],{"class":111,"line":119},[109,122005,122006],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[109,122008,122009],{"class":111,"line":140},[109,122010,122011],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[109,122013,122014],{"class":111,"line":154},[109,122015,122016],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[109,122018,122019],{"class":111,"line":161},[109,122020,122021],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[109,122023,122024],{"class":111,"line":167},[109,122025,122026],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[109,122028,122029],{"class":111,"line":185},[109,122030,122031],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122033,122034],{},"运行下方的命令",[99,122036,122038],{"className":119698,"code":122037,"language":119700,"meta":104,"style":104},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[106,122039,122040,122045,122052,122057],{"__ignoreMap":104},[109,122041,122042],{"class":111,"line":112},[109,122043,122044],{"class":115},"# cd进入CUDA路径\n",[109,122046,122047,122049],{"class":111,"line":119},[109,122048,102451],{"class":133},[109,122050,122051],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[109,122053,122054],{"class":111,"line":140},[109,122055,122056],{"class":115}," # 查看本路径下的需要软链接的文件名\n",[109,122058,122059],{"class":111,"line":154},[109,122060,122061],{"class":211}," ls\n",[19,122063,122064],{},[938,122065],{"alt":104,"src":122066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122068,122069,122070,19583,122073,19583,122076,122079],{},"如上图，我需要将",[106,122071,122072],{},"libcudnn_xxx_xxxxx.so.8.9.7",[106,122074,122075],{},"libcudnn_xxx_xxxxx.so.8",[106,122077,122078],{},"libcudnn_xxx_xxxxx.so","软链接",[99,122081,122083],{"className":119698,"code":122082,"language":119700,"meta":104,"style":104},"# 创建符号链接。对于每个 .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",[106,122084,122085,122090,122106,122120,122134,122148,122162,122176,122190,122195,122201,122206],{"__ignoreMap":104},[109,122086,122087],{"class":111,"line":112},[109,122088,122089],{"class":115},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[109,122091,122092,122094,122097,122100,122103],{"class":111,"line":119},[109,122093,25751],{"class":211},[109,122095,122096],{"class":278}," ln",[109,122098,122099],{"class":133}," -sf",[109,122101,122102],{"class":278}," libcudnn_cnn_train.so.8.9.7",[109,122104,122105],{"class":278}," libcudnn_cnn_train.so.8\n",[109,122107,122108,122110,122112,122114,122117],{"class":111,"line":140},[109,122109,25751],{"class":211},[109,122111,122096],{"class":278},[109,122113,122099],{"class":133},[109,122115,122116],{"class":278}," libcudnn_adv_infer.so.8.9.7",[109,122118,122119],{"class":278}," libcudnn_adv_infer.so.8\n",[109,122121,122122,122124,122126,122128,122131],{"class":111,"line":154},[109,122123,25751],{"class":211},[109,122125,122096],{"class":278},[109,122127,122099],{"class":133},[109,122129,122130],{"class":278}," libcudnn_adv_train.so.8.9.7",[109,122132,122133],{"class":278}," libcudnn_adv_train.so.8\n",[109,122135,122136,122138,122140,122142,122145],{"class":111,"line":161},[109,122137,25751],{"class":211},[109,122139,122096],{"class":278},[109,122141,122099],{"class":133},[109,122143,122144],{"class":278}," libcudnn_cnn_infer.so.8.9.7",[109,122146,122147],{"class":278}," libcudnn_cnn_infer.so.8\n",[109,122149,122150,122152,122154,122156,122159],{"class":111,"line":167},[109,122151,25751],{"class":211},[109,122153,122096],{"class":278},[109,122155,122099],{"class":133},[109,122157,122158],{"class":278}," libcudnn.so.8.9.7",[109,122160,122161],{"class":278}," libcudnn.so.8\n",[109,122163,122164,122166,122168,122170,122173],{"class":111,"line":185},[109,122165,25751],{"class":211},[109,122167,122096],{"class":278},[109,122169,122099],{"class":133},[109,122171,122172],{"class":278}," libcudnn_ops_infer.so.8.9.7",[109,122174,122175],{"class":278}," libcudnn_ops_infer.so.8\n",[109,122177,122178,122180,122182,122184,122187],{"class":111,"line":201},[109,122179,25751],{"class":211},[109,122181,122096],{"class":278},[109,122183,122099],{"class":133},[109,122185,122186],{"class":278}," libcudnn_ops_train.so.8.9.7",[109,122188,122189],{"class":278}," libcudnn_ops_train.so.8\n",[109,122191,122192],{"class":111,"line":206},[109,122193,122194],{"class":115},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[109,122196,122197,122199],{"class":111,"line":218},[109,122198,25751],{"class":211},[109,122200,121985],{"class":278},[109,122202,122203],{"class":111,"line":223},[109,122204,122205],{"class":115},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[109,122207,122208,122210,122213,122216,122218,122221],{"class":111,"line":229},[109,122209,27936],{"class":211},[109,122211,122212],{"class":133}," -l",[109,122214,122215],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[109,122217,1988],{"class":133},[109,122219,122220],{"class":278},".so",[109,122222,120423],{"class":133},[51,122224,122226],{"id":122225},"_355-常见问题","3.5.5 常见问题",[765,122228,122229],{},[30,122230,122231],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[99,122233,122235],{"className":119698,"code":122234,"language":119700,"meta":104,"style":104},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[106,122236,122237],{"__ignoreMap":104},[109,122238,122239,122241,122243],{"class":111,"line":112},[109,122240,25751],{"class":211},[109,122242,119758],{"class":278},[109,122244,122245],{"class":278}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122247,122248],{},"blacklist-nouveau.conf文件内容如下：",[99,122250,122252],{"className":119698,"code":122251,"language":119700,"meta":104,"style":104},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[106,122253,122254,122262,122269,122281,122291],{"__ignoreMap":104},[109,122255,122256,122259],{"class":111,"line":112},[109,122257,122258],{"class":211},"blacklist",[109,122260,122261],{"class":278}," nouveau\n",[109,122263,122264,122266],{"class":111,"line":119},[109,122265,122258],{"class":211},[109,122267,122268],{"class":278}," lbm-nouveau\n",[109,122270,122271,122273,122276,122279],{"class":111,"line":140},[109,122272,117105],{"class":211},[109,122274,122275],{"class":278}," nouveau",[109,122277,122278],{"class":278}," modeset=",[109,122280,4430],{"class":133},[109,122282,122283,122286,122288],{"class":111,"line":154},[109,122284,122285],{"class":133},"alias",[109,122287,122275],{"class":278},[109,122289,122290],{"class":278}," off\n",[109,122292,122293,122295,122298],{"class":111,"line":161},[109,122294,122285],{"class":133},[109,122296,122297],{"class":278}," lbm-nouveau",[109,122299,122290],{"class":278},[19,122301,122302],{},"接着运行下方命令",[99,122304,122306],{"className":119698,"code":122305,"language":119700,"meta":104,"style":104},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[106,122307,122308,122318,122323],{"__ignoreMap":104},[109,122309,122310,122312,122315],{"class":111,"line":112},[109,122311,25751],{"class":211},[109,122313,122314],{"class":278}," update-initramfs",[109,122316,122317],{"class":133}," -u\n",[109,122319,122320],{"class":111,"line":119},[109,122321,122322],{"class":211},"或者\n",[109,122324,122325,122327,122330],{"class":111,"line":140},[109,122326,25751],{"class":211},[109,122328,122329],{"class":278}," dracut",[109,122331,122332],{"class":133}," --force\n",[19,122334,122335],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[99,122337,122339],{"className":119698,"code":122338,"language":119700,"meta":104,"style":104},"lsmod | grep nouveau\n",[106,122340,122341],{"__ignoreMap":104},[109,122342,122343,122346,122348,122350],{"class":111,"line":112},[109,122344,122345],{"class":211},"lsmod",[109,122347,26284],{"class":122},[109,122349,31411],{"class":211},[109,122351,122261],{"class":278},[765,122353,122354],{"start":119},[30,122355,122356],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[99,122358,122360],{"className":119698,"code":122359,"language":119700,"meta":104,"style":104},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[106,122361,122362],{"__ignoreMap":104},[109,122363,122364,122366,122368],{"class":111,"line":112},[109,122365,25751],{"class":211},[109,122367,119758],{"class":278},[109,122369,122370],{"class":278}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122372,122373],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[99,122375,122377],{"className":119698,"code":122376,"language":119700,"meta":104,"style":104},"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",[106,122378,122379,122387,122395,122403,122410,122418,122428,122436],{"__ignoreMap":104},[109,122380,122381,122384],{"class":111,"line":112},[109,122382,122383],{"class":211},"Section",[109,122385,122386],{"class":278}," \"OutputClass\"\n",[109,122388,122389,122392],{"class":111,"line":119},[109,122390,122391],{"class":211},"   Identifier",[109,122393,122394],{"class":278}," \"nvidia\"\n",[109,122396,122397,122400],{"class":111,"line":140},[109,122398,122399],{"class":211},"   MatchDriver",[109,122401,122402],{"class":278}," \"nvidia-drm\"\n",[109,122404,122405,122408],{"class":111,"line":154},[109,122406,122407],{"class":211},"   Driver",[109,122409,122394],{"class":278},[109,122411,122412,122415],{"class":111,"line":161},[109,122413,122414],{"class":211},"   Option",[109,122416,122417],{"class":278}," \"AllowEmptyInitialConfiguration\"\n",[109,122419,122420,122422,122425],{"class":111,"line":167},[109,122421,122414],{"class":211},[109,122423,122424],{"class":278}," \"PrimaryGPU\"",[109,122426,122427],{"class":278}," \"yes\"\n",[109,122429,122430,122433],{"class":111,"line":185},[109,122431,122432],{"class":211},"   ModulePath",[109,122434,122435],{"class":278}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[109,122437,122438],{"class":111,"line":201},[109,122439,122440],{"class":211},"EndSection\n",[765,122442,122443],{"start":140},[30,122444,122445],{},"安装N卡驱动提示错误",[99,122447,122449],{"className":121991,"code":122448,"language":121993,"meta":121994,"style":104},"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",[106,122450,122451],{"__ignoreMap":104},[109,122452,122453],{"class":111,"line":112},[109,122454,122448],{},[765,122456,122457],{},[30,122458,122459],{},"检查当前运行的内核版本：",[19,122461,122462],{},"运行以下命令以查看你当前正在使用的内核版本：",[99,122464,122466],{"className":118471,"code":122465,"language":118473,"meta":104,"style":104},"uname -r\n",[106,122467,122468],{"__ignoreMap":104},[109,122469,122470,122472],{"class":111,"line":112},[109,122471,71379],{"class":211},[109,122473,122474],{"class":133}," -r\n",[765,122476,122477],{"start":119},[30,122478,122479],{},"安装内核开发文件：",[19,122481,122482,122483,122486],{},"确保你已经安装了与当前内核版本相匹配的 ",[106,122484,122485],{},"kernel-devel"," 包。运行以下命令来安装：",[99,122488,122490],{"className":118471,"code":122489,"language":118473,"meta":104,"style":104},"sudo dnf install kernel-devel-$(uname -r)\n",[106,122491,122492],{"__ignoreMap":104},[109,122493,122494,122496,122498,122500,122503,122505,122507,122509],{"class":111,"line":112},[109,122495,25751],{"class":211},[109,122497,27490],{"class":278},[109,122499,25008],{"class":278},[109,122501,122502],{"class":278}," kernel-devel-",[109,122504,26274],{"class":126},[109,122506,71379],{"class":211},[109,122508,120814],{"class":133},[109,122510,1330],{"class":126},[19,122512,122513],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[765,122515,122516],{"start":140},[30,122517,122518],{},"安装内核源代码（如果需要）：",[19,122520,122521],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[99,122523,122525],{"className":118471,"code":122524,"language":118473,"meta":104,"style":104},"sudo dnf install kernel-headers kernel-source\n",[106,122526,122527],{"__ignoreMap":104},[109,122528,122529,122531,122533,122535,122538],{"class":111,"line":112},[109,122530,25751],{"class":211},[109,122532,27490],{"class":278},[109,122534,25008],{"class":278},[109,122536,122537],{"class":278}," kernel-headers",[109,122539,122540],{"class":278}," kernel-source\n",[765,122542,122543],{"start":154},[30,122544,122545],{},"检查安装：",[19,122547,122548,122549,122552],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[106,122550,122551],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[99,122554,122556],{"className":118471,"code":122555,"language":118473,"meta":104,"style":104},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[106,122557,122558],{"__ignoreMap":104},[109,122559,122560,122562],{"class":111,"line":112},[109,122561,27936],{"class":211},[109,122563,122564],{"class":278}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122566,122567,122568,122571],{},"如果仍然遇到问题，可以通过 ",[106,122569,122570],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1467,122573,122574],{},"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":104,"searchDepth":119,"depth":119,"links":122576},[122577,122581,122591,122595,122596],{"id":119674,"depth":119,"text":119675,"children":122578},[122579,122580],{"id":119684,"depth":140,"text":119685},{"id":119694,"depth":140,"text":119695},{"id":119894,"depth":119,"text":119895,"children":122582},[122583,122584,122585,122586,122587,122588,122589,122590],{"id":119898,"depth":140,"text":119899},{"id":119968,"depth":140,"text":119969},{"id":120057,"depth":140,"text":120058},{"id":120302,"depth":140,"text":120303},{"id":120372,"depth":140,"text":120373},{"id":120439,"depth":140,"text":120440},{"id":120474,"depth":140,"text":120475},{"id":120529,"depth":140,"text":120530},{"id":120580,"depth":119,"text":120581,"children":122592},[122593,122594],{"id":120584,"depth":140,"text":120585},{"id":120664,"depth":140,"text":120665},{"id":120850,"depth":119,"text":120851},{"id":121023,"depth":119,"text":121024,"children":122597},[122598,122599,122600,122601,122602],{"id":121027,"depth":140,"text":121028},{"id":121068,"depth":140,"text":121069},{"id":121355,"depth":140,"text":121356},{"id":121729,"depth":140,"text":121730},{"id":122225,"depth":140,"text":122226},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119666,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122609,"title":122610,"body":122611,"description":24550,"extension":1476,"meta":122951,"navigation":157,"path":122952,"seo":122953,"stem":122954,"__hash__":122955},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122612,"toc":122949},[122613,122616,122621,122624,122870,122875,122878,122914,122917,122946],[10,122614,122610],{"id":122615},"_4-命令教程长期积累",[765,122617,122618],{},[30,122619,122620],{},"大多数命令",[19,122622,122623],{},"常用 Linux 命令速查：",[99,122625,122627],{"className":118471,"code":122626,"language":118473,"meta":104,"style":104},"# 文件与目录\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",[106,122628,122629,122634,122641,122648,122656,122663,122670,122678,122686,122693,122700,122708,122712,122717,122724,122732,122739,122743,122748,122755,122763,122771,122779,122787,122791,122796,122804,122811,122818,122826,122834,122838,122843,122852,122861],{"__ignoreMap":104},[109,122630,122631],{"class":111,"line":112},[109,122632,122633],{"class":115},"# 文件与目录\n",[109,122635,122636,122638],{"class":111,"line":119},[109,122637,27936],{"class":211},[109,122639,122640],{"class":115},"        # 列出目录内容\n",[109,122642,122643,122645],{"class":111,"line":140},[109,122644,102451],{"class":133},[109,122646,122647],{"class":115},"        # 切换目录\n",[109,122649,122650,122653],{"class":111,"line":154},[109,122651,122652],{"class":133},"pwd",[109,122654,122655],{"class":115},"       # 显示当前路径\n",[109,122657,122658,122660],{"class":111,"line":161},[109,122659,102441],{"class":211},[109,122661,122662],{"class":115},"     # 创建目录\n",[109,122664,122665,122667],{"class":111,"line":167},[109,122666,26497],{"class":211},[109,122668,122669],{"class":115},"        # 删除文件或目录\n",[109,122671,122672,122675],{"class":111,"line":185},[109,122673,122674],{"class":211},"cp",[109,122676,122677],{"class":115},"        # 复制文件或目录\n",[109,122679,122680,122683],{"class":111,"line":201},[109,122681,122682],{"class":211},"mv",[109,122684,122685],{"class":115},"        # 移动\u002F重命名文件或目录\n",[109,122687,122688,122690],{"class":111,"line":206},[109,122689,102458],{"class":211},[109,122691,122692],{"class":115},"     # 创建空文件\n",[109,122694,122695,122697],{"class":111,"line":218},[109,122696,121940],{"class":211},[109,122698,122699],{"class":115},"       # 查看文件内容\n",[109,122701,122702,122705],{"class":111,"line":223},[109,122703,122704],{"class":211},"head\u002Ftail",[109,122706,122707],{"class":115}," # 查看文件头部\u002F尾部\n",[109,122709,122710],{"class":111,"line":229},[109,122711,158],{"emptyLinePlaceholder":157},[109,122713,122714],{"class":111,"line":244},[109,122715,122716],{"class":115},"# 权限管理\n",[109,122718,122719,122721],{"class":111,"line":258},[109,122720,25786],{"class":211},[109,122722,122723],{"class":115},"     # 修改文件权限\n",[109,122725,122726,122729],{"class":111,"line":263},[109,122727,122728],{"class":211},"chown",[109,122730,122731],{"class":115},"     # 修改文件所有者\n",[109,122733,122734,122736],{"class":111,"line":269},[109,122735,25751],{"class":211},[109,122737,122738],{"class":115},"      # 以管理员身份执行\n",[109,122740,122741],{"class":111,"line":304},[109,122742,158],{"emptyLinePlaceholder":157},[109,122744,122745],{"class":111,"line":331},[109,122746,122747],{"class":115},"# 系统信息\n",[109,122749,122750,122752],{"class":111,"line":336},[109,122751,71379],{"class":211},[109,122753,122754],{"class":115},"     # 系统信息\n",[109,122756,122757,122760],{"class":111,"line":364},[109,122758,122759],{"class":211},"df",[109,122761,122762],{"class":115},"        # 磁盘使用情况\n",[109,122764,122765,122768],{"class":111,"line":391},[109,122766,122767],{"class":211},"free",[109,122769,122770],{"class":115},"      # 内存使用情况\n",[109,122772,122773,122776],{"class":111,"line":396},[109,122774,122775],{"class":211},"top\u002Fhtop",[109,122777,122778],{"class":115},"  # 进程监控\n",[109,122780,122781,122784],{"class":111,"line":402},[109,122782,122783],{"class":211},"ps",[109,122785,122786],{"class":115},"        # 查看进程\n",[109,122788,122789],{"class":111,"line":419},[109,122790,158],{"emptyLinePlaceholder":157},[109,122792,122793],{"class":111,"line":435},[109,122794,122795],{"class":115},"# 网络\n",[109,122797,122798,122801],{"class":111,"line":440},[109,122799,122800],{"class":211},"ping",[109,122802,122803],{"class":115},"      # 测试网络连通性\n",[109,122805,122806,122808],{"class":111,"line":467},[109,122807,28024],{"class":211},[109,122809,122810],{"class":115},"      # 发送 HTTP 请求\n",[109,122812,122813,122815],{"class":111,"line":494},[109,122814,121464],{"class":211},[109,122816,122817],{"class":115},"      # 下载文件\n",[109,122819,122820,122823],{"class":111,"line":499},[109,122821,122822],{"class":211},"ssh",[109,122824,122825],{"class":115},"       # 远程登录\n",[109,122827,122828,122831],{"class":111,"line":526},[109,122829,122830],{"class":211},"scp",[109,122832,122833],{"class":115},"       # 远程文件传输\n",[109,122835,122836],{"class":111,"line":552},[109,122837,158],{"emptyLinePlaceholder":157},[109,122839,122840],{"class":111,"line":557},[109,122841,122842],{"class":115},"# 包管理（Debian\u002FUbuntu）\n",[109,122844,122845,122847,122849],{"class":111,"line":584},[109,122846,118543],{"class":211},[109,122848,118522],{"class":278},[109,122850,122851],{"class":115},"   # 更新软件源\n",[109,122853,122854,122856,122858],{"class":111,"line":611},[109,122855,118543],{"class":211},[109,122857,25008],{"class":278},[109,122859,122860],{"class":115},"  # 安装软件包\n",[109,122862,122863,122865,122867],{"class":111,"line":616},[109,122864,118543],{"class":211},[109,122866,27254],{"class":278},[109,122868,122869],{"class":115},"   # 卸载软件包\n",[765,122871,122872],{"start":119},[30,122873,122874],{},"KDE Dolphin 以root打开",[19,122876,122877],{},"kde5",[99,122879,122881],{"className":118471,"code":122880,"language":118473,"meta":104,"style":104},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[106,122882,122883],{"__ignoreMap":104},[109,122884,122885,122888,122891,122894,122896,122898,122901,122904,122906,122909,122911],{"class":111,"line":112},[109,122886,122887],{"class":211},"pkexec",[109,122889,122890],{"class":278}," env",[109,122892,122893],{"class":278}," DISPLAY=",[109,122895,29318],{"class":126},[109,122897,29376],{"class":278},[109,122899,122900],{"class":126},"$XAUTHORITY ",[109,122902,122903],{"class":278},"KDE_SESSION_VERSION=",[109,122905,1856],{"class":133},[109,122907,122908],{"class":278}," KDE_FULL_SESSION=",[109,122910,2755],{"class":133},[109,122912,122913],{"class":278}," dolphin\n",[19,122915,122916],{},"kde6",[99,122918,122920],{"className":118471,"code":122919,"language":118473,"meta":104,"style":104},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[106,122921,122922],{"__ignoreMap":104},[109,122923,122924,122926,122928,122930,122932,122934,122936,122938,122940,122942,122944],{"class":111,"line":112},[109,122925,122887],{"class":211},[109,122927,122890],{"class":278},[109,122929,122893],{"class":278},[109,122931,29318],{"class":126},[109,122933,29376],{"class":278},[109,122935,122900],{"class":126},[109,122937,122903],{"class":278},[109,122939,1881],{"class":133},[109,122941,122908],{"class":278},[109,122943,2755],{"class":133},[109,122945,122913],{"class":278},[1467,122947,122948],{},"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":104,"searchDepth":119,"depth":119,"links":122950},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122610,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122957,"title":122958,"body":122959,"description":24550,"extension":1476,"meta":122973,"navigation":157,"path":122974,"seo":122975,"stem":122976,"__hash__":122977},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122960,"toc":122971},[122961,122964],[10,122962,122958],{"id":122963},"_5-各种环境配置",[19,122965,122966],{},[1776,122967,122970],{"href":122968,"rel":122969},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25039],"电控组环境搭建大全",{"title":104,"searchDepth":119,"depth":119,"links":122972},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122958,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122979,"title":122980,"body":122981,"description":24550,"extension":1476,"meta":123329,"navigation":157,"path":123330,"seo":123331,"stem":123332,"__hash__":123333},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122982,"toc":123321},[122983,122986,122990,122994,122998,123003,123010,123014,123307,123311,123318],[10,122984,122980],{"id":122985},"_6-拓展功能",[14,122987,122989],{"id":122988},"_61-wine","6.1 Wine",[14,122991,122993],{"id":122992},"_62-android","6.2 Android",[51,122995,122997],{"id":122996},"_621-i卡a卡","6.2.1 I卡、A卡",[765,122999,123000],{},[30,123001,123002],{},"Wayland-Waydroid(体验超级好)",[19,123004,123005,123006],{},"Waydroid 官网与安装指南：",[1776,123007,123008],{"href":123008,"rel":123009},"https:\u002F\u002Fwaydro.id\u002F",[25039],[51,123011,123013],{"id":123012},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[765,123015,123016],{},[30,123017,123018,123019,123021,123022,123026,123028,123031,123036,123233],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54891,123020],{},"BlissOS 官网下载：",[1776,123023,123024],{"href":123024,"rel":123025},"https:\u002F\u002Fblissos.org\u002F",[25039],[54891,123027],{},[938,123029],{"alt":104,"src":123030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[765,123032,123033],{"start":140},[30,123034,123035],{},"比较推荐的配置",[99,123037,123039],{"className":118471,"code":123038,"language":118473,"meta":104,"style":104},"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",[106,123040,123041,123048,123058,123068,123078,123090,123100,123107,123117,123126,123135,123145,123155,123164,123174,123184,123196,123206,123215,123225],{"__ignoreMap":104},[109,123042,123043,123046],{"class":111,"line":112},[109,123044,123045],{"class":211},"qemu-system-x86_64",[109,123047,25853],{"class":133},[109,123049,123050,123053,123056],{"class":111,"line":119},[109,123051,123052],{"class":133},"        -M",[109,123054,123055],{"class":278}," q35,vmport=off",[109,123057,25853],{"class":133},[109,123059,123060,123063,123066],{"class":111,"line":140},[109,123061,123062],{"class":133},"        -accel",[109,123064,123065],{"class":278}," kvm",[109,123067,25853],{"class":133},[109,123069,123070,123073,123076],{"class":111,"line":154},[109,123071,123072],{"class":133},"        -cpu",[109,123074,123075],{"class":278}," qemu64,+sse3,+sse4.2",[109,123077,25853],{"class":133},[109,123079,123080,123083,123086,123088],{"class":111,"line":161},[109,123081,123082],{"class":133},"        -smp",[109,123084,123085],{"class":278}," 8,cores=",[109,123087,1831],{"class":133},[109,123089,25853],{"class":133},[109,123091,123092,123095,123098],{"class":111,"line":167},[109,123093,123094],{"class":133},"        -m",[109,123096,123097],{"class":278}," 6G",[109,123099,25853],{"class":133},[109,123101,123102,123105],{"class":111,"line":185},[109,123103,123104],{"class":133},"        -usb",[109,123106,25853],{"class":133},[109,123108,123109,123112,123115],{"class":111,"line":201},[109,123110,123111],{"class":133},"        -device",[109,123113,123114],{"class":278}," virtio-tablet",[109,123116,25853],{"class":133},[109,123118,123119,123121,123124],{"class":111,"line":206},[109,123120,123111],{"class":133},[109,123122,123123],{"class":278}," virtio-keyboard",[109,123125,25853],{"class":133},[109,123127,123128,123130,123133],{"class":111,"line":218},[109,123129,123111],{"class":133},[109,123131,123132],{"class":278}," usb-tablet",[109,123134,25853],{"class":133},[109,123136,123137,123140,123143],{"class":111,"line":223},[109,123138,123139],{"class":133},"        -bios",[109,123141,123142],{"class":278}," OVMF-pure-efi64.fd",[109,123144,25853],{"class":133},[109,123146,123147,123150,123153],{"class":111,"line":229},[109,123148,123149],{"class":133},"        -net",[109,123151,123152],{"class":278}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[109,123154,25853],{"class":133},[109,123156,123157,123159,123162],{"class":111,"line":244},[109,123158,123149],{"class":133},[109,123160,123161],{"class":278}," nic,model=virtio",[109,123163,25853],{"class":133},[109,123165,123166,123169,123172],{"class":111,"line":258},[109,123167,123168],{"class":133},"        -audio",[109,123170,123171],{"class":278}," sdl,model=hda",[109,123173,25853],{"class":133},[109,123175,123176,123179,123182],{"class":111,"line":263},[109,123177,123178],{"class":133},"        -display",[109,123180,123181],{"class":278}," sdl,gl=on,show-cursor=on",[109,123183,25853],{"class":133},[109,123185,123186,123188,123191,123194],{"class":111,"line":269},[109,123187,123111],{"class":133},[109,123189,123190],{"class":278}," virtio-vga-gl,xres=1920,yres=",[109,123192,123193],{"class":133},"1080",[109,123195,25853],{"class":133},[109,123197,123198,123201,123204],{"class":111,"line":304},[109,123199,123200],{"class":133},"        -drive",[109,123202,123203],{"class":278}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[109,123205,25853],{"class":133},[109,123207,123208,123210,123213],{"class":111,"line":331},[109,123209,123200],{"class":133},[109,123211,123212],{"class":278}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[109,123214,25853],{"class":133},[109,123216,123217,123220,123223],{"class":111,"line":336},[109,123218,123219],{"class":133},"        -monitor",[109,123221,123222],{"class":278}," stdio",[109,123224,25853],{"class":133},[109,123226,123227,123230],{"class":111,"line":364},[109,123228,123229],{"class":133},"        -serial",[109,123231,123232],{"class":278}," none\n",[765,123234,123235],{"start":161},[30,123236,123237,123238],{},"常用操作：",[765,123239,123240,123243,123299],{},[30,123241,123242],{},"全屏：Ctrl+Alt+F",[30,123244,123245,123246,123251],{},"adb调试",[765,123247,123248],{},[30,123249,123250],{},"使Linux与Android用ADB连接。",[99,123252,123254],{"className":118471,"code":123253,"language":118473,"meta":104,"style":104},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[106,123255,123256,123261,123272,123277,123289,123294],{"__ignoreMap":104},[109,123257,123258],{"class":111,"line":112},[109,123259,123260],{"class":115},"# 连接安卓\n",[109,123262,123263,123266,123269],{"class":111,"line":119},[109,123264,123265],{"class":211},"adb",[109,123267,123268],{"class":278}," connect",[109,123270,123271],{"class":133}," 127.0.0.1\n",[109,123273,123274],{"class":111,"line":140},[109,123275,123276],{"class":115},"# 打开shell\n",[109,123278,123279,123281,123283,123286],{"class":111,"line":154},[109,123280,123265],{"class":211},[109,123282,28058],{"class":133},[109,123284,123285],{"class":278}," 127.0.0.1:5555",[109,123287,123288],{"class":278}," shell\n",[109,123290,123291],{"class":111,"line":161},[109,123292,123293],{"class":115},"# 使用root权限\n",[109,123295,123296],{"class":111,"line":167},[109,123297,123298],{"class":211},"su\n",[30,123300,123301,123302],{},"中文输入法",[765,123303,123304],{},[30,123305,123306],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123308,123310],{"id":123309},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123312,123313,123314],{},"rEFInd 官网与文档：",[1776,123315,123316],{"href":123316,"rel":123317},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25039],[1467,123319,123320],{},"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":104,"searchDepth":119,"depth":119,"links":123322},[123323,123324,123328],{"id":122988,"depth":119,"text":122989},{"id":122992,"depth":119,"text":122993,"children":123325},[123326,123327],{"id":122996,"depth":140,"text":122997},{"id":123012,"depth":140,"text":123013},{"id":123309,"depth":119,"text":123310},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122980,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123335,"title":123336,"body":123337,"description":24550,"extension":1476,"meta":126636,"navigation":157,"path":126637,"seo":126638,"stem":126639,"__hash__":126640},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123338,"toc":126610},[123339,123342,123346,123349,123356,123606,123609,123681,123684,123688,123692,123697,123700,123703,123706,123711,123714,123717,123720,123725,123728,123733,123736,123739,123744,123747,123752,123755,123759,123763,123766,123771,123774,123788,123791,123794,123803,123806,123815,123818,123821,123830,123833,123842,123845,123848,123857,123860,123863,123878,123881,123884,123893,123898,123901,123904,123913,123916,123925,123928,123937,123940,123949,123954,123957,123965,123970,123973,123982,123985,123993,123998,124001,124010,124013,124016,124020,124023,124028,124031,124036,124050,124055,124060,124071,124076,124082,124087,124102,124107,124110,124115,124120,124125,124133,124138,124145,124150,124161,124166,124169,124173,124176,124179,124184,124187,124206,124211,124214,124223,124228,124231,124253,124256,124286,124289,124294,124297,124311,124316,124335,124338,124341,124346,124358,124363,124368,124371,124376,124379,124394,124397,124402,124407,124411,124416,124456,124459,124463,124469,124475,124480,124483,124490,124495,124502,124505,124508,124515,124529,124532,124592,124595,124609,124621,124624,124627,124630,124694,124697,124700,124703,124723,124726,124731,124738,124742,124745,124749,124754,124759,124763,124766,124769,124811,124816,124819,124841,124856,124858,124863,124875,124935,124937,124939,124993,124995,124997,125003,125008,125011,125016,125020,125023,125085,125090,125093,125095,125099,125111,125193,125195,125197,125251,125257,125259,125263,125268,125270,125275,125279,125299,125334,125338,125341,125344,125347,125354,125357,125369,125372,125387,125390,125409,125457,125460,125477,125480,125494,125499,125502,125511,125526,125538,125576,125581,125590,125595,125600,125626,125635,125639,125643,125648,125651,125655,125659,125664,125667,125672,125675,125680,125683,125688,125691,125695,125700,125703,125708,125711,125715,125720,125723,125728,125731,125736,125739,125743,125748,125751,125756,125759,125764,125767,125771,125776,125779,125784,125787,125792,125795,125800,125803,125808,125811,125816,125819,125823,125828,125831,125836,125843,125847,125852,125855,125860,125863,125867,125872,125875,125878,125881,125884,125887,125891,125894,125904,125909,125914,125936,125941,125946,125953,125957,125962,125965,125968,125973,125976,125979,125982,125985,125988,125991,125994,125997,126000,126003,126006,126009,126014,126019,126024,126029,126034,126039,126044,126047,126051,126054,126058,126063,126068,126073,126078,126082,126088,126096,126101,126104,126109,126124,126127,126132,126166,126181,126184,126239,126265,126277,126280,126289,126292,126307,126312,126315,126321,126326,126329,126334,126337,126342,126347,126354,126357,126372,126375,126410,126415,126423,126461,126464,126467,126472,126475,126480,126491,126525,126530,126533,126542,126547,126553,126556,126561,126570,126575,126578,126581,126586,126594,126597,126602,126607],[10,123340,123336],{"id":123341},"_7-其他操作",[14,123343,123345],{"id":123344},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123347,123348],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123350,123351,123352,123355],{},"进入工控机的硬盘目录，进入",[106,123353,123354],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[99,123357,123361],{"className":123358,"code":123359,"language":123360,"meta":104,"style":104},"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",[106,123362,123363,123371,123382,123389,123396,123408,123415,123427,123438,123449,123456,123463,123470,123482,123494,123501,123513,123525,123532,123544,123556,123568,123579,123586,123597],{"__ignoreMap":104},[109,123364,123365,123368],{"class":111,"line":112},[109,123366,123367],{"class":52475},"network",[109,123369,123370],{"class":126},": \n",[109,123372,123373,123376,123378,123380],{"class":111,"line":119},[109,123374,123375],{"class":52475},"  version",[109,123377,52612],{"class":126},[109,123379,1618],{"class":133},[109,123381,4022],{"class":126},[109,123383,123384,123387],{"class":111,"line":140},[109,123385,123386],{"class":52475},"  wifis",[109,123388,123370],{"class":126},[109,123390,123391,123394],{"class":111,"line":154},[109,123392,123393],{"class":52475},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[109,123395,123370],{"class":126},[109,123397,123398,123401,123403,123406],{"class":111,"line":161},[109,123399,123400],{"class":52475},"      renderer",[109,123402,52612],{"class":126},[109,123404,123405],{"class":278},"NetworkManager",[109,123407,4022],{"class":126},[109,123409,123410,123413],{"class":111,"line":167},[109,123411,123412],{"class":52475},"      match",[109,123414,123370],{"class":126},[109,123416,123417,123420,123422,123425],{"class":111,"line":185},[109,123418,123419],{"class":52475},"        name",[109,123421,52612],{"class":126},[109,123423,123424],{"class":278},"\"wlan0\"",[109,123426,4022],{"class":126},[109,123428,123429,123432,123434,123436],{"class":111,"line":201},[109,123430,123431],{"class":52475},"      dhcp4",[109,123433,52612],{"class":126},[109,123435,2755],{"class":133},[109,123437,4022],{"class":126},[109,123439,123440,123443,123445,123447],{"class":111,"line":206},[109,123441,123442],{"class":52475},"      dhcp6",[109,123444,52612],{"class":126},[109,123446,2755],{"class":133},[109,123448,4022],{"class":126},[109,123450,123451,123454],{"class":111,"line":218},[109,123452,123453],{"class":52475},"      access-points",[109,123455,123370],{"class":126},[109,123457,123458,123461],{"class":111,"line":223},[109,123459,123460],{"class":278},"        \"EMIS_Vinci_Robocon_5G\"",[109,123462,123370],{"class":126},[109,123464,123465,123468],{"class":111,"line":229},[109,123466,123467],{"class":52475},"          auth",[109,123469,123370],{"class":126},[109,123471,123472,123475,123477,123480],{"class":111,"line":244},[109,123473,123474],{"class":52475},"            key-management",[109,123476,52612],{"class":126},[109,123478,123479],{"class":278},"\"psk\"",[109,123481,4022],{"class":126},[109,123483,123484,123487,123489,123492],{"class":111,"line":258},[109,123485,123486],{"class":52475},"            password",[109,123488,52612],{"class":126},[109,123490,123491],{"class":278},"\"vinci666\"",[109,123493,4022],{"class":126},[109,123495,123496,123499],{"class":111,"line":263},[109,123497,123498],{"class":52475},"          networkmanager",[109,123500,123370],{"class":126},[109,123502,123503,123506,123508,123511],{"class":111,"line":269},[109,123504,123505],{"class":52475},"            uuid",[109,123507,52612],{"class":126},[109,123509,123510],{"class":278},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[109,123512,4022],{"class":126},[109,123514,123515,123518,123520,123523],{"class":111,"line":304},[109,123516,123517],{"class":52475},"            name",[109,123519,52612],{"class":126},[109,123521,123522],{"class":278},"\"EMIS_Vinci_Robocon_5G\"",[109,123524,4022],{"class":126},[109,123526,123527,123530],{"class":111,"line":331},[109,123528,123529],{"class":52475},"            passthrough",[109,123531,123370],{"class":126},[109,123533,123534,123537,123539,123542],{"class":111,"line":336},[109,123535,123536],{"class":52475},"              wifi-security.auth-alg",[109,123538,52612],{"class":126},[109,123540,123541],{"class":278},"\"open\"",[109,123543,4022],{"class":126},[109,123545,123546,123549,123551,123554],{"class":111,"line":364},[109,123547,123548],{"class":52475},"              ipv6.addr-gen-mode",[109,123550,52612],{"class":126},[109,123552,123553],{"class":278},"\"default\"",[109,123555,4022],{"class":126},[109,123557,123558,123561,123563,123566],{"class":111,"line":391},[109,123559,123560],{"class":52475},"              ipv6.ip6-privacy",[109,123562,52612],{"class":126},[109,123564,123565],{"class":278},"\"-1\"",[109,123567,4022],{"class":126},[109,123569,123570,123573,123575,123577],{"class":111,"line":396},[109,123571,123572],{"class":52475},"              proxy._",[109,123574,52612],{"class":126},[109,123576,8978],{"class":278},[109,123578,4022],{"class":126},[109,123580,123581,123584],{"class":111,"line":402},[109,123582,123583],{"class":52475},"      networkmanager",[109,123585,123370],{"class":126},[109,123587,123588,123591,123593,123595],{"class":111,"line":419},[109,123589,123590],{"class":52475},"        uuid",[109,123592,52612],{"class":126},[109,123594,123510],{"class":278},[109,123596,4022],{"class":126},[109,123598,123599,123601,123603],{"class":111,"line":435},[109,123600,123419],{"class":52475},[109,123602,52612],{"class":126},[109,123604,123605],{"class":278},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123607,123608],{},"将其改为新wifi的名和密码：",[99,123610,123612],{"className":123358,"code":123611,"language":123360,"meta":104,"style":104},"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",[106,123613,123614,123620,123629,123635,123642,123651,123659,123665,123671],{"__ignoreMap":104},[109,123615,123616,123618],{"class":111,"line":112},[109,123617,123367],{"class":52475},[109,123619,5082],{"class":126},[109,123621,123622,123624,123626],{"class":111,"line":119},[109,123623,123375],{"class":52475},[109,123625,52612],{"class":126},[109,123627,123628],{"class":133},"2\n",[109,123630,123631,123633],{"class":111,"line":140},[109,123632,123386],{"class":52475},[109,123634,5082],{"class":126},[109,123636,123637,123640],{"class":111,"line":154},[109,123638,123639],{"class":52475},"    wlan0",[109,123641,5082],{"class":126},[109,123643,123644,123646,123648],{"class":111,"line":161},[109,123645,123431],{"class":52475},[109,123647,52612],{"class":126},[109,123649,123650],{"class":133},"true\n",[109,123652,123653,123655,123657],{"class":111,"line":167},[109,123654,123442],{"class":52475},[109,123656,52612],{"class":126},[109,123658,123650],{"class":133},[109,123660,123661,123663],{"class":111,"line":185},[109,123662,123453],{"class":52475},[109,123664,5082],{"class":126},[109,123666,123667,123669],{"class":111,"line":201},[109,123668,123460],{"class":278},[109,123670,5082],{"class":126},[109,123672,123673,123676,123678],{"class":111,"line":206},[109,123674,123675],{"class":52475},"          password",[109,123677,52612],{"class":126},[109,123679,123680],{"class":278},"\"vinci666\"\n",[19,123682,123683],{},"工控机开机即可连上网。",[14,123685,123687],{"id":123686},"_72-ssh远程开发","7.2 SSH远程开发",[51,123689,123691],{"id":123690},"_721-环境准备","7.2.1 环境准备",[19,123693,123694],{},[23,123695,123696],{},"1.硬件准备",[19,123698,123699],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123701,123702],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123704,123705],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123707,123708],{},[23,123709,123710],{},"2.设置固定IP",[19,123712,123713],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123715,123716],{},"1.进入设置界面",[19,123718,123719],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123721,123722],{},[938,123723],{"alt":104,"src":123724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123726,123727],{},"2.配置所连接的网络",[19,123729,123730],{},[938,123731],{"alt":104,"src":123732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123734,123735],{},"3.设置固定IP",[19,123737,123738],{},"查看当前IP地址。",[19,123740,123741],{},[938,123742],{"alt":104,"src":123743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123745,123746],{},"设置固定IP。",[19,123748,123749],{},[938,123750],{"alt":104,"src":123751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123753,123754],{},"至此，IP配置完毕。",[51,123756,123758],{"id":123757},"_722-环境搭建","7.2.2 环境搭建",[19,123760,123761],{},[23,123762,26928],{},[19,123764,123765],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123767,123768],{},[23,123769,123770],{},"实现",[19,123772,123773],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[765,123775,123776,123779,123782,123785],{},[30,123777,123778],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[30,123780,123781],{},"远程主机启动SSH服务；",[30,123783,123784],{},"本地主机登陆远程主机；",[30,123786,123787],{},"实现数据传输。",[19,123789,123790],{},"1.安装SSH客户端与服务端",[19,123792,123793],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[99,123795,123797],{"className":121991,"code":123796,"language":121993,"meta":121994,"style":104}," sudo apt install openssh-server\n",[106,123798,123799],{"__ignoreMap":104},[109,123800,123801],{"class":111,"line":112},[109,123802,123796],{},[19,123804,123805],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[99,123807,123809],{"className":121991,"code":123808,"language":121993,"meta":121994,"style":104},"sudo apt install openssh-client\n",[106,123810,123811],{"__ignoreMap":104},[109,123812,123813],{"class":111,"line":112},[109,123814,123808],{},[19,123816,123817],{},"2.远程主机启动SSH服务",[19,123819,123820],{},"远程主机启动 ssh 服务命令如下：",[99,123822,123824],{"className":121991,"code":123823,"language":121993,"meta":121994,"style":104},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[106,123825,123826],{"__ignoreMap":104},[109,123827,123828],{"class":111,"line":112},[109,123829,123823],{},[19,123831,123832],{},"启动后可使用如下命令查看服务是否正常运行：",[99,123834,123836],{"className":121991,"code":123835,"language":121993,"meta":121994,"style":104},"ps -e | grep ssh\n",[106,123837,123838],{"__ignoreMap":104},[109,123839,123840],{"class":111,"line":112},[109,123841,123835],{},[19,123843,123844],{},"如果启动成功，会包含 sshd 程序。",[19,123846,123847],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[99,123849,123851],{"className":121991,"code":123850,"language":121993,"meta":121994,"style":104},"sudo systemctl enable ssh\n",[106,123852,123853],{"__ignoreMap":104},[109,123854,123855],{"class":111,"line":112},[109,123856,123850],{},[19,123858,123859],{},"3.本地远程登录",[19,123861,123862],{},"登录远程主机可以调用如下命令:",[99,123864,123866],{"className":118471,"code":123865,"language":118473,"meta":104,"style":104},"ssh -X 用户名@ip地址\n",[106,123867,123868],{"__ignoreMap":104},[109,123869,123870,123872,123875],{"class":111,"line":112},[109,123871,122822],{"class":211},[109,123873,123874],{"class":133}," -X",[109,123876,123877],{"class":278}," 用户名@ip地址\n",[19,123879,123880],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123882,123883],{},"如果退出，可以调用exit命令：",[99,123885,123887],{"className":121991,"code":123886,"language":121993,"meta":121994,"style":104},"exit\n",[106,123888,123889],{"__ignoreMap":104},[109,123890,123891],{"class":111,"line":112},[109,123892,123886],{},[19,123894,123895],{},[23,123896,123897],{},"4.实现数据传输",[19,123899,123900],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123902,123903],{},"上传文件指令格式如下：",[99,123905,123907],{"className":121991,"code":123906,"language":121993,"meta":121994,"style":104},"scp 本地文件路径 账号@ip:路径\n",[106,123908,123909],{"__ignoreMap":104},[109,123910,123911],{"class":111,"line":112},[109,123912,123906],{},[19,123914,123915],{},"上传文件夹指令格式如下：",[99,123917,123919],{"className":121991,"code":123918,"language":121993,"meta":121994,"style":104},"scp -r 本地文件夹路径 账号@ip:路径\n",[106,123920,123921],{"__ignoreMap":104},[109,123922,123923],{"class":111,"line":112},[109,123924,123918],{},[19,123926,123927],{},"下载文件指令格式如下：",[99,123929,123931],{"className":121991,"code":123930,"language":121993,"meta":121994,"style":104},"scp 账号@ip:路径 本地文件夹路径\n",[106,123932,123933],{"__ignoreMap":104},[109,123934,123935],{"class":111,"line":112},[109,123936,123930],{},[19,123938,123939],{},"下载文件夹指令格式如下：",[99,123941,123943],{"className":121991,"code":123942,"language":121993,"meta":121994,"style":104},"scp -r 账号@ip:路径 本地文件夹路径\n",[106,123944,123945],{"__ignoreMap":104},[109,123946,123947],{"class":111,"line":112},[109,123948,123942],{},[19,123950,123951],{},[23,123952,123953],{},"优化",[19,123955,123956],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[765,123958,123959,123962],{},[30,123960,123961],{},"本地生成密钥对；",[30,123963,123964],{},"将公钥上传至远程主机。",[19,123966,123967],{},[23,123968,123969],{},"1.生成密钥对",[19,123971,123972],{},"本地客户端生成公私钥：（一路回车默认即可）",[99,123974,123976],{"className":121991,"code":123975,"language":121993,"meta":121994,"style":104},"ssh-keygen\n",[106,123977,123978],{"__ignoreMap":104},[109,123979,123980],{"class":111,"line":112},[109,123981,123975],{},[19,123983,123984],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[765,123986,123987,123990],{},[30,123988,123989],{},"id_rsa （私钥）；",[30,123991,123992],{},"id_rsa.pub (公钥)。",[19,123994,123995],{},[23,123996,123997],{},"2.公钥上传",[19,123999,124000],{},"上传指令如下：",[99,124002,124004],{"className":121991,"code":124003,"language":121993,"meta":121994,"style":104},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[106,124005,124006],{"__ignoreMap":104},[109,124007,124008],{"class":111,"line":112},[109,124009,124003],{},[19,124011,124012],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124014,124015],{},"以后再远程登录就无需录入密码了。",[51,124017,124019],{"id":124018},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124021,124022],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124024,124025],{},[23,124026,124027],{},"1.准备工作",[19,124029,124030],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124032,124033],{},[23,124034,124035],{},"2.为VScode安装远程开发插件",[19,124037,124038,124039,124042,124043,124046,124047,29560],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[106,124040,124041],{},"扩展：商店","的搜索栏输入",[106,124044,124045],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[106,124048,124049],{},"安装",[19,124051,124052],{},[938,124053],{"alt":104,"src":124054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124056,124057],{},[23,124058,124059],{},"3.配置远程连接",[19,124061,124062,124063,124066,124067,124070],{},"步骤1：使用快捷键",[106,124064,124065],{},"ctrl + shift + p","打开命令输入窗口，并输入",[106,124068,124069],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124072,124073],{},[938,124074],{"alt":104,"src":124075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124077,124078,124079,29560],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[106,124080,124081],{},"Add New SSH Host",[19,124083,124084],{},[938,124085],{"alt":104,"src":124086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124088,124089,124090,124093,124094,124097,124098,124101],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[106,124091,124092],{},"ssh +X ubuntu@192.168.43.164","，其中，",[106,124095,124096],{},"ubuntu","需要替换为你的登录用户名，",[106,124099,124100],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124103,124104],{},[938,124105],{"alt":104,"src":124106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124108,124109],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124111,124112],{},[938,124113],{"alt":104,"src":124114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124116,124117],{},[938,124118],{"alt":104,"src":124119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124121,124122],{},[23,124123,124124],{},"4.使用",[19,124126,124127,124128,124066,124130,124132],{},"步骤1：继续使用快捷键",[106,124129,124065],{},[106,124131,124069],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124134,124135],{},[938,124136],{"alt":104,"src":124137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124139,124140,124141,124144],{},"或者，也可以点击侧边栏的",[106,124142,124143],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124146,124147],{},[938,124148],{"alt":104,"src":124149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124151,124152,124153,124156,124157,124160],{},"步骤2：选择菜单栏的",[106,124154,124155],{},"文件","下的",[106,124158,124159],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124162,124163],{},[938,124164],{"alt":104,"src":124165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124167,124168],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124170,124172],{"id":124171},"_73-远程桌面","7.3 远程桌面",[19,124174,124175],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124177,124178],{},"我们选择使用VNC来看。",[765,124180,124181],{},[30,124182,124183],{},"安装VNC服务器：",[19,124185,124186],{},"这里以TigerVNC为例进行安装：",[99,124188,124190],{"className":118471,"code":124189,"language":118473,"meta":104,"style":104},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[106,124191,124192],{"__ignoreMap":104},[109,124193,124194,124196,124198,124200,124203],{"class":111,"line":112},[109,124195,25751],{"class":211},[109,124197,118492],{"class":278},[109,124199,25008],{"class":278},[109,124201,124202],{"class":278}," tigervnc-standalone-server",[109,124204,124205],{"class":278}," tigervnc-common\n",[765,124207,124208],{"start":119},[30,124209,124210],{},"设置VNC密码：",[19,124212,124213],{},"为VNC用户设置密码，运行以下命令：",[99,124215,124217],{"className":118471,"code":124216,"language":118473,"meta":104,"style":104},"vncpasswd\n",[106,124218,124219],{"__ignoreMap":104},[109,124220,124221],{"class":111,"line":112},[109,124222,124216],{"class":211},[765,124224,124225],{"start":140},[30,124226,124227],{},"配置VNC启动脚本:",[19,124229,124230],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[99,124232,124234],{"className":118471,"code":124233,"language":118473,"meta":104,"style":104},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[106,124235,124236,124245],{"__ignoreMap":104},[109,124237,124238,124240,124242],{"class":111,"line":112},[109,124239,102441],{"class":211},[109,124241,30391],{"class":133},[109,124243,124244],{"class":278}," ~\u002F.vnc\n",[109,124246,124247,124250],{"class":111,"line":119},[109,124248,124249],{"class":211},"nano",[109,124251,124252],{"class":278}," ~\u002F.vnc\u002Fxstartup\n",[19,124254,124255],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[99,124257,124259],{"className":118471,"code":124258,"language":118473,"meta":104,"style":104},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[106,124260,124261,124266,124274,124281],{"__ignoreMap":104},[109,124262,124263],{"class":111,"line":112},[109,124264,124265],{"class":115},"#!\u002Fbin\u002Fsh\n",[109,124267,124268,124271],{"class":111,"line":119},[109,124269,124270],{"class":133},"unset",[109,124272,124273],{"class":278}," SESSION_MANAGER\n",[109,124275,124276,124278],{"class":111,"line":140},[109,124277,124270],{"class":133},[109,124279,124280],{"class":278}," DBUS_SESSION_BUS_ADDRESS\n",[109,124282,124283],{"class":111,"line":154},[109,124284,124285],{"class":211},"gnome-session\n",[19,124287,124288],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[765,124290,124291],{"start":154},[30,124292,124293],{},"给予执行权限：",[19,124295,124296],{},"为xstartup文件设置执行权限：",[99,124298,124300],{"className":118471,"code":124299,"language":118473,"meta":104,"style":104},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[106,124301,124302],{"__ignoreMap":104},[109,124303,124304,124306,124309],{"class":111,"line":112},[109,124305,25786],{"class":211},[109,124307,124308],{"class":278}," +x",[109,124310,124252],{"class":278},[765,124312,124313],{"start":161},[30,124314,124315],{},"启动VNC服务器：",[99,124317,124319],{"className":118471,"code":124318,"language":118473,"meta":104,"style":104},"vncserver -geometry 1920x1080 -localhost=0\n",[106,124320,124321],{"__ignoreMap":104},[109,124322,124323,124326,124329,124332],{"class":111,"line":112},[109,124324,124325],{"class":211},"vncserver",[109,124327,124328],{"class":133}," -geometry",[109,124330,124331],{"class":278}," 1920x1080",[109,124333,124334],{"class":133}," -localhost=0\n",[19,124336,124337],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124339,124340],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[765,124342,124343],{"start":167},[30,124344,124345],{},"查看已开启的VNC服务器：",[99,124347,124349],{"className":118471,"code":124348,"language":118473,"meta":104,"style":104},"vncserver -list\n",[106,124350,124351],{"__ignoreMap":104},[109,124352,124353,124355],{"class":111,"line":112},[109,124354,124325],{"class":211},[109,124356,124357],{"class":133}," -list\n",[19,124359,124360],{},[938,124361],{"alt":104,"src":124362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[765,124364,124365],{"start":185},[30,124366,124367],{},"连接到VNC服务器：",[19,124369,124370],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[765,124372,124373],{"start":201},[30,124374,124375],{},"停止VNC服务器：",[19,124377,124378],{},"如果需要停止VNC服务器，可以使用以下命令：",[99,124380,124382],{"className":118471,"code":124381,"language":118473,"meta":104,"style":104},"vncserver -kill :1\n",[106,124383,124384],{"__ignoreMap":104},[109,124385,124386,124388,124391],{"class":111,"line":112},[109,124387,124325],{"class":211},[109,124389,124390],{"class":133}," -kill",[109,124392,124393],{"class":278}," :1\n",[19,124395,124396],{},"将:1替换为你实际使用的显示编号。",[19,124398,124399],{},[938,124400],{"alt":104,"src":124401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124403,124404],{},[938,124405],{"alt":104,"src":124406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124408,124410],{"id":124409},"_74-usb端口设置","7.4 USB端口设置",[19,124412,124413],{},[23,124414,124415],{},"首先先配置好权限",[99,124417,124419],{"className":118471,"code":124418,"language":118473,"meta":104,"style":104},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[106,124420,124421,124426,124439,124446,124451],{"__ignoreMap":104},[109,124422,124423],{"class":111,"line":112},[109,124424,124425],{"class":115},"# 将用户权限提高\n",[109,124427,124428,124430,124432,124434,124437],{"class":111,"line":119},[109,124429,25751],{"class":211},[109,124431,27749],{"class":278},[109,124433,27752],{"class":133},[109,124435,124436],{"class":278}," dialout",[109,124438,27757],{"class":126},[109,124440,124441,124443],{"class":111,"line":140},[109,124442,27776],{"class":211},[109,124444,124445],{"class":278}," dialout\n",[109,124447,124448],{"class":111,"line":154},[109,124449,124450],{"class":115},"# 查看下面命令是否输出dialout（若输出才正常）\n",[109,124452,124453],{"class":111,"line":161},[109,124454,124455],{"class":211},"groups\n",[19,124457,124458],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[51,124460,124462],{"id":124461},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124464,124465,124468],{},[23,124466,124467],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124470,124471,124474],{},[23,124472,124473],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124476,124477],{},[23,124478,124479],{},"流程如下：",[19,124481,124482],{},"（1）.查找设备idVendor和idProduct",[19,124484,124485,124486,124489],{},"接入两个USB设备，在终端调用指令",[106,124487,124488],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124491,124492],{},[938,124493],{"alt":104,"src":124494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124496,124497,124498,124501],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[106,124499,124500],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124503,124504],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124506,124507],{},"（2）.编写映射规则",[19,124509,124510,124511,124514],{},"在",[106,124512,124513],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[99,124516,124518],{"className":118471,"code":124517,"language":118473,"meta":104,"style":104},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[106,124519,124520],{"__ignoreMap":104},[109,124521,124522,124524,124526],{"class":111,"line":112},[109,124523,25751],{"class":211},[109,124525,119758],{"class":278},[109,124527,124528],{"class":278}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124530,124531],{},"输入如下内容：",[99,124533,124535],{"className":118471,"code":124534,"language":118473,"meta":104,"style":104},"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",[106,124536,124537,124567],{"__ignoreMap":104},[109,124538,124539,124542,124544,124547,124550,124553,124556,124558,124561,124564],{"class":111,"line":112},[109,124540,124541],{"class":126},"KERNEL",[109,124543,130],{"class":122},[109,124545,124546],{"class":278},"=\"ttyUSB*\",",[109,124548,124549],{"class":211}," ATTRS",[109,124551,124552],{"class":278},"{idVendor}==",[109,124554,124555],{"class":211},"\"10c4\"",[109,124557,1914],{"class":211},[109,124559,124560],{"class":278}," ATTRS{idProduct}==\"ea60\",",[109,124562,124563],{"class":278}," MODE:=\"0777\",",[109,124565,124566],{"class":278}," SYMLINK+=\"mylidar\"\n",[109,124568,124569,124571,124573,124575,124577,124579,124582,124584,124587,124589],{"class":111,"line":119},[109,124570,124541],{"class":126},[109,124572,130],{"class":122},[109,124574,124546],{"class":278},[109,124576,124549],{"class":211},[109,124578,124552],{"class":278},[109,124580,124581],{"class":211},"\"1a86\"",[109,124583,1914],{"class":211},[109,124585,124586],{"class":278}," ATTRS{idProduct}==\"7523\",",[109,124588,124563],{"class":278},[109,124590,124591],{"class":278}," SYMLINK+=\"mycar\"\n",[19,124593,124594],{},"代码解释：",[27,124596,124597,124600,124603,124606],{},[30,124598,124599],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[30,124601,124602],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[30,124604,124605],{},"SYMLINK是符号连接，即绑定的别名；",[30,124607,124608],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124610,124611,124612,124615,124618],{},"***小提示：***",[24727,124613,124614],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[106,124616,124617],{},"\u002Fetc\u002Fudev\u002Frule.d",[24727,124619,124620],{},"目录即可。",[19,124622,124623],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124625,124626],{},"（3）.使规则生效",[19,124628,124629],{},"在终端下输入如下指令：",[99,124631,124633],{"className":118471,"code":124632,"language":118473,"meta":104,"style":104},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[106,124634,124635,124640,124652,124663,124667,124672,124685],{"__ignoreMap":104},[109,124636,124637],{"class":111,"line":112},[109,124638,124639],{"class":115},"# Ubuntu用下方命令\n",[109,124641,124642,124644,124646,124649],{"class":111,"line":119},[109,124643,25751],{"class":211},[109,124645,121223],{"class":278},[109,124647,124648],{"class":278}," udev",[109,124650,124651],{"class":278}," reload\n",[109,124653,124654,124656,124658,124660],{"class":111,"line":140},[109,124655,25751],{"class":211},[109,124657,121223],{"class":278},[109,124659,124648],{"class":278},[109,124661,124662],{"class":278}," restart\n",[109,124664,124665],{"class":111,"line":154},[109,124666,158],{"emptyLinePlaceholder":157},[109,124668,124669],{"class":111,"line":161},[109,124670,124671],{"class":115},"#Fedora用下方命令\n",[109,124673,124674,124676,124679,124682],{"class":111,"line":167},[109,124675,25751],{"class":211},[109,124677,124678],{"class":278}," udevadm",[109,124680,124681],{"class":278}," control",[109,124683,124684],{"class":133}," --reload\n",[109,124686,124687,124689,124691],{"class":111,"line":185},[109,124688,25751],{"class":211},[109,124690,124678],{"class":278},[109,124692,124693],{"class":278}," trigger\n",[19,124695,124696],{},"再重新插拔设备即可。",[19,124698,124699],{},"（4）.测试",[19,124701,124702],{},"终端下输入如下指令",[99,124704,124706],{"className":118471,"code":124705,"language":118473,"meta":104,"style":104},"ll \u002Fdev | grep ttyUSB\n",[106,124707,124708],{"__ignoreMap":104},[109,124709,124710,124713,124716,124718,124720],{"class":111,"line":112},[109,124711,124712],{"class":211},"ll",[109,124714,124715],{"class":278}," \u002Fdev",[109,124717,26284],{"class":122},[109,124719,31411],{"class":211},[109,124721,124722],{"class":278}," ttyUSB\n",[19,124724,124725],{},"运行结果如下：",[19,124727,124728],{},[938,124729],{"alt":104,"src":124730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124732,124733,124734,124737],{},"也可以多次插拔USB设备，会发现设备端口",[106,124735,124736],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124739,124740],{},[23,124741,119139],{},[19,124743,124744],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[51,124746,124748],{"id":124747},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124750,124751,124753],{},[23,124752,124467],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124755,124756,124758],{},[23,124757,124473],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124760,124761],{},[23,124762,124479],{},[19,124764,124765],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124767,124768],{},"调用如下指令查看第一台雷达的USB信息：",[99,124770,124772],{"className":118471,"code":124771,"language":118473,"meta":104,"style":104},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[106,124773,124774,124794],{"__ignoreMap":104},[109,124775,124776,124779,124781,124784,124787,124789,124791],{"class":111,"line":112},[109,124777,124778],{"class":211},"udevadm",[109,124780,70996],{"class":278},[109,124782,124783],{"class":133}," --attribute-walk",[109,124785,124786],{"class":133}," --name=\u002Fdev\u002FttyUSB0",[109,124788,26284],{"class":122},[109,124790,31411],{"class":211},[109,124792,124793],{"class":278}," KERNELS\n",[109,124795,124796,124798,124800,124802,124805,124807,124809],{"class":111,"line":119},[109,124797,124778],{"class":211},[109,124799,70996],{"class":278},[109,124801,124783],{"class":133},[109,124803,124804],{"class":133}," --name=\u002Fdev\u002FttyACM0",[109,124806,26284],{"class":122},[109,124808,31411],{"class":211},[109,124810,124793],{"class":278},[19,124812,124813],{},[938,124814],{"alt":104,"src":124815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124817,124818],{},"调用如下指令查看第二台雷达的USB信息：",[99,124820,124822],{"className":118471,"code":124821,"language":118473,"meta":104,"style":104},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[106,124823,124824],{"__ignoreMap":104},[109,124825,124826,124828,124830,124832,124835,124837,124839],{"class":111,"line":112},[109,124827,124778],{"class":211},[109,124829,70996],{"class":278},[109,124831,124783],{"class":133},[109,124833,124834],{"class":133}," --name=\u002Fdev\u002FttyUSB1",[109,124836,26284],{"class":122},[109,124838,31411],{"class":211},[109,124840,124793],{"class":278},[19,124842,124843,124844,124847,124848,124851,124852,124855],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[106,124845,124846],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[106,124849,124850],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[23,124853,124854],{},"唯一性标识","”。",[19,124857,124507],{},[19,124859,124510,124860,124862],{},[106,124861,124513],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[99,124864,124865],{"className":118471,"code":124517,"language":118473,"meta":104,"style":104},[106,124866,124867],{"__ignoreMap":104},[109,124868,124869,124871,124873],{"class":111,"line":112},[109,124870,25751],{"class":211},[109,124872,119758],{"class":278},[109,124874,124528],{"class":278},[99,124876,124878],{"className":118471,"code":124877,"language":118473,"meta":104,"style":104},"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",[106,124879,124880,124909],{"__ignoreMap":104},[109,124881,124882,124884,124886,124888,124891,124893,124896,124899,124901,124904,124906],{"class":111,"line":112},[109,124883,124541],{"class":126},[109,124885,130],{"class":122},[109,124887,124546],{"class":278},[109,124889,124890],{"class":126}," KERNELS",[109,124892,130],{"class":122},[109,124894,124895],{"class":278},"=\"1-1.3:1.0\",",[109,124897,124898],{"class":211}," MODE:",[109,124900,130],{"class":278},[109,124902,124903],{"class":211},"\"0777\"",[109,124905,1914],{"class":211},[109,124907,124908],{"class":278}," SYMLINK+=\"rplidar_front\"\n",[109,124910,124911,124913,124915,124917,124919,124921,124924,124926,124928,124930,124932],{"class":111,"line":119},[109,124912,124541],{"class":126},[109,124914,130],{"class":122},[109,124916,124546],{"class":278},[109,124918,124890],{"class":126},[109,124920,130],{"class":122},[109,124922,124923],{"class":278},"=\"1-1.4:1.0\",",[109,124925,124898],{"class":211},[109,124927,130],{"class":278},[109,124929,124903],{"class":211},[109,124931,1914],{"class":211},[109,124933,124934],{"class":278}," SYMLINK+=\"rplidar_back\"\n",[19,124936,124626],{},[19,124938,124629],{},[99,124940,124941],{"className":118471,"code":124632,"language":118473,"meta":104,"style":104},[106,124942,124943,124947,124957,124967,124971,124975,124985],{"__ignoreMap":104},[109,124944,124945],{"class":111,"line":112},[109,124946,124639],{"class":115},[109,124948,124949,124951,124953,124955],{"class":111,"line":119},[109,124950,25751],{"class":211},[109,124952,121223],{"class":278},[109,124954,124648],{"class":278},[109,124956,124651],{"class":278},[109,124958,124959,124961,124963,124965],{"class":111,"line":140},[109,124960,25751],{"class":211},[109,124962,121223],{"class":278},[109,124964,124648],{"class":278},[109,124966,124662],{"class":278},[109,124968,124969],{"class":111,"line":154},[109,124970,158],{"emptyLinePlaceholder":157},[109,124972,124973],{"class":111,"line":161},[109,124974,124671],{"class":115},[109,124976,124977,124979,124981,124983],{"class":111,"line":167},[109,124978,25751],{"class":211},[109,124980,124678],{"class":278},[109,124982,124681],{"class":278},[109,124984,124684],{"class":133},[109,124986,124987,124989,124991],{"class":111,"line":185},[109,124988,25751],{"class":211},[109,124990,124678],{"class":278},[109,124992,124693],{"class":278},[19,124994,124696],{},[19,124996,124699],{},[19,124998,124702,124999,125002],{},[106,125000,125001],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125004,125005],{},[938,125006],{"alt":104,"src":125007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125009,125010],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125012,125013,125015],{},[23,125014,119139],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[51,125017,125019],{"id":125018},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125021,125022],{},"（1）.查看所连接的主机USB接口的信息",[99,125024,125026],{"className":118471,"code":125025,"language":118473,"meta":104,"style":104},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[106,125027,125028,125058],{"__ignoreMap":104},[109,125029,125030,125032,125034,125037,125039,125041,125043,125045,125048,125051,125053,125056],{"class":111,"line":112},[109,125031,124778],{"class":211},[109,125033,70996],{"class":278},[109,125035,125036],{"class":133}," -a",[109,125038,30391],{"class":133},[109,125040,29597],{"class":126},[109,125042,124778],{"class":211},[109,125044,70996],{"class":278},[109,125046,125047],{"class":133}," -q",[109,125049,125050],{"class":278}," path",[109,125052,26290],{"class":133},[109,125054,125055],{"class":278}," \u002Fdev\u002FttyACM0",[109,125057,1330],{"class":126},[109,125059,125060,125062,125064,125066,125068,125070,125072,125074,125076,125078,125080,125083],{"class":111,"line":119},[109,125061,124778],{"class":211},[109,125063,70996],{"class":278},[109,125065,125036],{"class":133},[109,125067,30391],{"class":133},[109,125069,29597],{"class":126},[109,125071,124778],{"class":211},[109,125073,70996],{"class":278},[109,125075,125047],{"class":133},[109,125077,125050],{"class":278},[109,125079,26290],{"class":133},[109,125081,125082],{"class":278}," \u002Fdev\u002FttyUSB0",[109,125084,1330],{"class":126},[19,125086,125087],{},[938,125088],{"alt":104,"src":125089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125091,125092],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125094,124507],{},[19,125096,124510,125097,124862],{},[106,125098,124513],{},[99,125100,125101],{"className":118471,"code":124517,"language":118473,"meta":104,"style":104},[106,125102,125103],{"__ignoreMap":104},[109,125104,125105,125107,125109],{"class":111,"line":112},[109,125106,25751],{"class":211},[109,125108,119758],{"class":278},[109,125110,124528],{"class":278},[99,125112,125114],{"className":118471,"code":125113,"language":118473,"meta":104,"style":104},"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",[106,125115,125116,125144,125170],{"__ignoreMap":104},[109,125117,125118,125120,125122,125125,125127,125129,125131,125133,125136,125139,125141],{"class":111,"line":112},[109,125119,124541],{"class":126},[109,125121,130],{"class":122},[109,125123,125124],{"class":278},"=\"ttyACM*\",",[109,125126,124549],{"class":211},[109,125128,124552],{"class":278},[109,125130,124581],{"class":211},[109,125132,1914],{"class":211},[109,125134,125135],{"class":278}," ATTRS{idProduct}==\"55d4\",",[109,125137,125138],{"class":278}," ATTRS{serial}==\"0001\",",[109,125140,124563],{"class":278},[109,125142,125143],{"class":278}," SYMLINK+=\"ttyACM_MCU\"\n",[109,125145,125146,125148,125150,125152,125154,125156,125158,125160,125162,125165,125167],{"class":111,"line":119},[109,125147,124541],{"class":126},[109,125149,130],{"class":122},[109,125151,125124],{"class":278},[109,125153,124549],{"class":211},[109,125155,124552],{"class":278},[109,125157,124581],{"class":211},[109,125159,1914],{"class":211},[109,125161,125135],{"class":278},[109,125163,125164],{"class":278}," ATTRS{serial}==\"0002\",",[109,125166,124563],{"class":278},[109,125168,125169],{"class":278}," SYMLINK+=\"ttyACM_Lidar\"\n",[109,125171,125172,125174,125176,125178,125180,125182,125184,125186,125188,125190],{"class":111,"line":140},[109,125173,124541],{"class":126},[109,125175,130],{"class":122},[109,125177,124546],{"class":278},[109,125179,124549],{"class":211},[109,125181,124552],{"class":278},[109,125183,124581],{"class":211},[109,125185,1914],{"class":211},[109,125187,124586],{"class":278},[109,125189,124563],{"class":278},[109,125191,125192],{"class":278}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125194,124626],{},[19,125196,124629],{},[99,125198,125199],{"className":118471,"code":124632,"language":118473,"meta":104,"style":104},[106,125200,125201,125205,125215,125225,125229,125233,125243],{"__ignoreMap":104},[109,125202,125203],{"class":111,"line":112},[109,125204,124639],{"class":115},[109,125206,125207,125209,125211,125213],{"class":111,"line":119},[109,125208,25751],{"class":211},[109,125210,121223],{"class":278},[109,125212,124648],{"class":278},[109,125214,124651],{"class":278},[109,125216,125217,125219,125221,125223],{"class":111,"line":140},[109,125218,25751],{"class":211},[109,125220,121223],{"class":278},[109,125222,124648],{"class":278},[109,125224,124662],{"class":278},[109,125226,125227],{"class":111,"line":154},[109,125228,158],{"emptyLinePlaceholder":157},[109,125230,125231],{"class":111,"line":161},[109,125232,124671],{"class":115},[109,125234,125235,125237,125239,125241],{"class":111,"line":167},[109,125236,25751],{"class":211},[109,125238,124678],{"class":278},[109,125240,124681],{"class":278},[109,125242,124684],{"class":133},[109,125244,125245,125247,125249],{"class":111,"line":185},[109,125246,25751],{"class":211},[109,125248,124678],{"class":278},[109,125250,124693],{"class":278},[19,125252,125253,125254],{},"再重新插拔设备即可，或者 ",[23,125255,125256],{},"直接重启系统。",[19,125258,124699],{},[19,125260,124702,125261,125002],{},[106,125262,125001],{},[19,125264,125265],{},[938,125266],{"alt":104,"src":125267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125269,125010],{},[19,125271,125272,125274],{},[23,125273,119139],{}," 一些设备可能没有串口号等。",[51,125276,125278],{"id":125277},"_744-其他注意事项","7.4.4 其他注意事项",[19,125280,125281,125282,125284,125285,125288,125289,19583,125292,125295,125296,125298],{},"并非所有的USB设备端口号都是",[106,125283,124736],{},"的格式，比如Arduino的端口号可能是",[106,125286,125287],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[106,125290,125291],{},"videon",[106,125293,125294],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[106,125297,125291],{},"端口，绑定时需要关联的也是该接口。",[19,125300,125301,125302,125305,125306,125309,125310,125312,125313,125316,125317,125320,125321,125324,125325,125324,125328,125324,125331,29560],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[106,125303,125304],{},"KERNEL==\"ttyUSB*\"","修改为",[106,125307,125308],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[106,125311,125304],{},"修改为类似于",[106,125314,125315],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[106,125318,125319],{},"video[0,2,4,6]","表示可以绑定的端口为",[106,125322,125323],{},"video0","或",[106,125326,125327],{},"video2",[106,125329,125330],{},"video4",[106,125332,125333],{},"video6",[14,125335,125337],{"id":125336},"_75-挂载内网网页","7.5 挂载内网网页",[19,125339,125340],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125342,125343],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125345,125346],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125348,125349,125350],{},"Termux 下载地址（F-Droid）：",[1776,125351,125352],{"href":125352,"rel":125353},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25039],[19,125355,125356],{},"首先打开app后，先更新软件缓存：",[99,125358,125360],{"className":118471,"code":125359,"language":118473,"meta":104,"style":104},"pkg update\n",[106,125361,125362],{"__ignoreMap":104},[109,125363,125364,125367],{"class":111,"line":112},[109,125365,125366],{"class":211},"pkg",[109,125368,27417],{"class":278},[19,125370,125371],{},"然后换源",[99,125373,125375],{"className":118471,"code":125374,"language":118473,"meta":104,"style":104},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[106,125376,125377],{"__ignoreMap":104},[109,125378,125379,125381,125384],{"class":111,"line":112},[109,125380,124249],{"class":211},[109,125382,125383],{"class":126}," $PREFIX",[109,125385,125386],{"class":278},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125388,125389],{},"将该文件内容替换为下面：",[99,125391,125393],{"className":118471,"code":125392,"language":118473,"meta":104,"style":104},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[106,125394,125395],{"__ignoreMap":104},[109,125396,125397,125400,125403,125406],{"class":111,"line":112},[109,125398,125399],{"class":211},"deb",[109,125401,125402],{"class":278}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[109,125404,125405],{"class":278}," stable",[109,125407,125408],{"class":278}," main\n",[27,125410,125411,125438],{},[30,125412,125413,125414,125416,125417],{},"如果你使用的是",[106,125415,124249],{},"编辑器：",[27,125418,125419,125426,125432],{},[30,125420,125421,125422,125425],{},"按 ",[106,125423,125424],{},"Ctrl+O"," 保存文件。",[30,125427,125421,125428,125431],{},[106,125429,125430],{},"Enter"," 确认文件名。",[30,125433,125421,125434,125437],{},[106,125435,125436],{},"Ctrl+X"," 退出编辑器。",[30,125439,125413,125440,125416,125443],{},[106,125441,125442],{},"vim",[27,125444,125445,125451],{},[30,125446,125421,125447,125450],{},[106,125448,125449],{},"Esc"," 退出编辑模式。",[30,125452,125453,125454,125456],{},"输入 ",[106,125455,120396],{}," 保存并退出。",[19,125458,125459],{},"接下来重新更新软件源：",[99,125461,125463],{"className":118471,"code":125462,"language":118473,"meta":104,"style":104},"pkg update && pkg upgrade\n",[106,125464,125465],{"__ignoreMap":104},[109,125466,125467,125469,125471,125473,125475],{"class":111,"line":112},[109,125468,125366],{"class":211},[109,125470,118522],{"class":278},[109,125472,27365],{"class":126},[109,125474,125366],{"class":211},[109,125476,118508],{"class":278},[19,125478,125479],{},"安装python：",[99,125481,125483],{"className":118471,"code":125482,"language":118473,"meta":104,"style":104},"pkg install python\n",[106,125484,125485],{"__ignoreMap":104},[109,125486,125487,125489,125491],{"class":111,"line":112},[109,125488,125366],{"class":211},[109,125490,25008],{"class":278},[109,125492,125493],{"class":278}," python\n",[19,125495,125496,27648],{},[23,125497,125498],{},"通过Termux访问设备存储",[19,125500,125501],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[99,125503,125505],{"className":118471,"code":125504,"language":118473,"meta":104,"style":104},"termux-setup-storage\n",[106,125506,125507],{"__ignoreMap":104},[109,125508,125509],{"class":111,"line":112},[109,125510,125504],{"class":211},[765,125512,125513],{},[30,125514,125515,27648,125518],{},[23,125516,125517],{},"进入HTML文件所在的目录",[765,125519,125520],{},[30,125521,125522,125523,125525],{},"使用",[106,125524,102451],{},"命令进入HTML文件所在的目录：",[99,125527,125529],{"className":118471,"code":125528,"language":118473,"meta":104,"style":104},"cd ~\u002Fyour_html_folder\n",[106,125530,125531],{"__ignoreMap":104},[109,125532,125533,125535],{"class":111,"line":112},[109,125534,102451],{"class":133},[109,125536,125537],{"class":278}," ~\u002Fyour_html_folder\n",[765,125539,125540],{"start":119},[30,125541,125542,27648,125545,125550,125567],{},[23,125543,125544],{},"启动Python HTTP服务器",[765,125546,125547],{},[30,125548,125549],{},"运行以下命令启动一个简单的HTTP服务器：",[99,125551,125553],{"className":118471,"code":125552,"language":118473,"meta":104,"style":104},"python -m http.server 8000\n",[106,125554,125555],{"__ignoreMap":104},[109,125556,125557,125559,125561,125564],{"class":111,"line":112},[109,125558,31555],{"class":211},[109,125560,102057],{"class":133},[109,125562,125563],{"class":278}," http.server",[109,125565,125566],{"class":133}," 8000\n",[765,125568,125569],{"start":140},[30,125570,125571,125572,125575],{},"这会在端口",[106,125573,125574],{},"8000","上启动一个Web服务器。",[27,125577,125578],{},[30,125579,125580],{},"启动服务器后，Termux会显示日志信息，例如：",[99,125582,125584],{"className":121991,"code":125583,"language":121993,"meta":121994,"style":104},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[106,125585,125586],{"__ignoreMap":104},[109,125587,125588],{"class":111,"line":112},[109,125589,125583],{},[27,125591,125592],{},[30,125593,125594],{},"这表示服务器已成功启动。",[19,125596,125597],{},[23,125598,125599],{},"在浏览器中访问HTML文件",[765,125601,125602],{},[30,125603,125604,27648,125607,125612],{},[23,125605,125606],{},"在同一设备上访问",[765,125608,125609],{},[30,125610,125611],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[99,125613,125616],{"className":125614,"code":125615,"language":72839,"meta":104,"style":104},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[106,125617,125618],{"__ignoreMap":104},[109,125619,125620,125623],{"class":111,"line":112},[109,125621,125622],{"class":126},"http:",[109,125624,125625],{"class":115},"\u002F\u002Flocalhost:8000\n",[27,125627,125628],{},[30,125629,125630,125631,125634],{},"如果HTML文件中有",[106,125632,125633],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125636,125638],{"id":125637},"_76-linux重点知识","7.6 Linux重点知识",[51,125640,125642],{"id":125641},"_761-关于点的说明","7.6.1 关于点的说明",[19,125644,125645],{},[938,125646],{"alt":104,"src":125647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125649,125650],{},"一点本目录，两点上目录",[51,125652,125654],{"id":125653},"_762-目录","7.6.2 目录",[23171,125656,125658],{"id":125657},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125660,125661],{},[23,125662,125663],{},"\u002Fboot:",[19,125665,125666],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125668,125669],{},[23,125670,125671],{},"\u002Fetc:",[19,125673,125674],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125676,125677],{},[23,125678,125679],{},"\u002Flib：",[19,125681,125682],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125684,125685],{},[23,125686,125687],{},"\u002Fsys:",[19,125689,125690],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23171,125692,125694],{"id":125693},"_7622-指令集合","7.6.2.2 指令集合",[19,125696,125697],{},[23,125698,125699],{},"\u002Fbin:",[19,125701,125702],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125704,125705],{},[23,125706,125707],{},"\u002Fsbin:",[19,125709,125710],{},"只有系统管理员才能使用的程序和指令",[23171,125712,125714],{"id":125713},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125716,125717],{},[23,125718,125719],{},"\u002Fdev:",[19,125721,125722],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125724,125725],{},[23,125726,125727],{},"\u002Fmedia:",[19,125729,125730],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125732,125733],{},[23,125734,125735],{},"\u002Fmnt:",[19,125737,125738],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23171,125740,125742],{"id":125741},"_7624-临时文件","7.6.2.4 临时文件",[19,125744,125745],{},[23,125746,125747],{},"\u002Frun:",[19,125749,125750],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125752,125753],{},[23,125754,125755],{},"\u002Flost+found:",[19,125757,125758],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125760,125761],{},[23,125762,125763],{},"\u002Ftmp:",[19,125765,125766],{},"这个目录是用来存放一些临时文件的",[23171,125768,125770],{"id":125769},"_7625-账户","7.6.2.5 账户",[19,125772,125773],{},[23,125774,125775],{},"\u002Froot：",[19,125777,125778],{},"系统管理员的用户主目录",[19,125780,125781,27648],{},[23,125782,125783],{},"\u002Fhome",[19,125785,125786],{},"用户的主目录，以用户的账号命名的",[19,125788,125789,27648],{},[23,125790,125791],{},"\u002Fusr",[19,125793,125794],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125796,125797],{},[23,125798,125799],{},"\u002Fusr\u002Fbin：",[19,125801,125802],{},"系统用户使用的应用程序与指令",[19,125804,125805],{},[23,125806,125807],{},"\u002Fusr\u002Fsbin：",[19,125809,125810],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125812,125813],{},[23,125814,125815],{},"\u002Fusr\u002Fsrc：",[19,125817,125818],{},"内核源代码默认的放置目录",[23171,125820,125822],{"id":125821},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125824,125825],{},[23,125826,125827],{},"\u002Fvar：",[19,125829,125830],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125832,125833],{},[23,125834,125835],{},"\u002Fproc:",[19,125837,125838,125839,125842],{},"管理 ",[23,125840,125841],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23171,125844,125846],{"id":125845},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125848,125849],{},[23,125850,125851],{},"\u002Fopt:",[19,125853,125854],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125856,125857],{},[23,125858,125859],{},"\u002Fsrv:",[19,125861,125862],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[51,125864,125866],{"id":125865},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125868,125869],{},[938,125870],{"alt":104,"src":125871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125873,125874],{},"windows-->linux:",[19,125876,125877],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125879,125880],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125882,125883],{},"linux传输文件到windows",[19,125885,125886],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[51,125888,125890],{"id":125889},"_764-易忘知识","7.6.4 易忘知识",[19,125892,125893],{},"操作系统内核查看",[99,125895,125896],{"className":118471,"code":122465,"language":118473,"meta":104,"style":104},[106,125897,125898],{"__ignoreMap":104},[109,125899,125900,125902],{"class":111,"line":112},[109,125901,71379],{"class":211},[109,125903,122474],{"class":133},[19,125905,125906],{},[938,125907],{"alt":104,"src":125908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125910,125911],{},[938,125912],{"alt":104,"src":125913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[99,125915,125917],{"className":118471,"code":125916,"language":118473,"meta":104,"style":104},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[106,125918,125919,125931],{"__ignoreMap":104},[109,125920,125921,125923,125926,125929],{"class":111,"line":112},[109,125922,122682],{"class":211},[109,125924,125925],{"class":278}," mvtest",[109,125927,125928],{"class":278}," mvtest2",[109,125930,4022],{"class":126},[109,125932,125933],{"class":111,"line":119},[109,125934,125935],{"class":211},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125937,125938],{},[938,125939],{"alt":104,"src":125940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125942,125943],{},[938,125944],{"alt":104,"src":125945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125947,125948,125949,125952],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[106,125950,125951],{},"du -a"," 可以快速查看磁盘使用细节。",[51,125954,125956],{"id":125955},"_765-vim","7.6.5 Vim",[19,125958,125959],{},[938,125960],{"alt":104,"src":125961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125963,125964],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125966,125967],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125969,125970],{},[23,125971,125972],{},"1.命令模式：",[19,125974,125975],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125977,125978],{},"x 删除当前光标所在处的字符",[19,125980,125981],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125983,125984],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125986,125987],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125989,125990],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125992,125993],{},"dd 剪切当前行",[19,125995,125996],{},"yy 复制当前行",[19,125998,125999],{},"p 粘贴剪贴板内容到光标下方",[19,126001,126002],{},"P 粘贴剪贴板内容到光标上方",[19,126004,126005],{},"u 撤销上一次操作",[19,126007,126008],{},"ctrl+r 重做上一次操作",[19,126010,126011,126013],{},[2327,126012],{}," 保存文件",[19,126015,126016,126018],{},[2177,126017],{}," 退出Vim编辑器",[19,126020,126021,126023],{},[2177,126022],{},"! 强制退出Vim编辑器，不保存修改",[19,126025,126026],{},[23,126027,126028],{},"2.输入模式：",[19,126030,126031],{},[938,126032],{"alt":104,"src":126033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126035,126036],{},[23,126037,126038],{},"3.底线命令模式：",[19,126040,126041],{},[938,126042],{"alt":104,"src":126043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126045,126046],{},"按下esc可以退出底线命令模式",[51,126048,126050],{"id":126049},"_766-apt","7.6.6 apt",[19,126052,126053],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[51,126055,126057],{"id":126056},"_767-home与root的区别","7.6.7 home与root的区别",[19,126059,126060],{},[938,126061],{"alt":104,"src":126062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126064,126065],{},[938,126066],{"alt":104,"src":126067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126069,126070],{},[938,126071],{"alt":104,"src":126072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126074,126075],{},[938,126076],{"alt":104,"src":126077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[51,126079,126081],{"id":126080},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126083,126084],{},[1776,126085,126086],{"href":126086,"rel":126087},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25039],[765,126089,126090,126093],{},[30,126091,126092],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[30,126094,126095],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126097,126098],{},[938,126099],{"alt":104,"src":126100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126102,126103],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126105,126106],{},[938,126107],{"alt":104,"src":126108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[99,126110,126112],{"className":121991,"code":126111,"language":121993,"meta":121994,"style":104},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[106,126113,126114,126119],{"__ignoreMap":104},[109,126115,126116],{"class":111,"line":112},[109,126117,126118],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[109,126120,126121],{"class":111,"line":119},[109,126122,126123],{},".\u002Fpycharm.sh\n",[19,126125,126126],{},"3️⃣创建.desktop文件",[19,126128,126129],{},[23,126130,126131],{},"原理：",[27,126133,126134,126144],{},[30,126135,126136,126137,126143],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[23,126138,126139,126142],{},[106,126140,126141],{},".desktop"," 文件"," 来识别应用。",[30,126145,126146,126148,126149],{},[106,126147,126141],{}," 文件相当于一个“应用注册表”，告诉系统：",[27,126150,126151,126154,126157,126160,126163],{},[30,126152,126153],{},"应用名字（Name）",[30,126155,126156],{},"图标（Icon）",[30,126158,126159],{},"执行命令（Exec）",[30,126161,126162],{},"分类（Categories）",[30,126164,126165],{},"是否需要终端（Terminal）",[99,126167,126169],{"className":121991,"code":126168,"language":121993,"meta":121994,"style":104},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[106,126170,126171,126176],{"__ignoreMap":104},[109,126172,126173],{"class":111,"line":112},[109,126174,126175],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[109,126177,126178],{"class":111,"line":119},[109,126179,126180],{},"nano pycharm.desktop\n",[19,126182,126183],{},"nano是一个命令行下的编辑器，也可以使用vim",[99,126185,126187],{"className":121991,"code":126186,"language":121993,"meta":121994,"style":104},"[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",[106,126188,126189,126194,126199,126204,126209,126214,126219,126224,126229,126234],{"__ignoreMap":104},[109,126190,126191],{"class":111,"line":112},[109,126192,126193],{},"[Desktop Entry]\n",[109,126195,126196],{"class":111,"line":119},[109,126197,126198],{},"Version=1.0\n",[109,126200,126201],{"class":111,"line":140},[109,126202,126203],{},"Type=Application\n",[109,126205,126206],{"class":111,"line":154},[109,126207,126208],{},"Name=PyCharm\n",[109,126210,126211],{"class":111,"line":161},[109,126212,126213],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[109,126215,126216],{"class":111,"line":167},[109,126217,126218],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[109,126220,126221],{"class":111,"line":185},[109,126222,126223],{},"Comment=JetBrains PyCharm IDE\n",[109,126225,126226],{"class":111,"line":201},[109,126227,126228],{},"Categories=Development;IDE;\n",[109,126230,126231],{"class":111,"line":206},[109,126232,126233],{},"Terminal=false\n",[109,126235,126236],{"class":111,"line":218},[109,126237,126238],{},"StartupWMClass=jetbrains-pycharm\n",[27,126240,126241,126247,126253,126259],{},[30,126242,126243,126246],{},[106,126244,126245],{},"Exec"," → 点击图标时执行的命令",[30,126248,126249,126252],{},[106,126250,126251],{},"Icon"," → 显示在菜单和桌面上的图标",[30,126254,126255,126258],{},[106,126256,126257],{},"Terminal=false"," → 不打开终端",[30,126260,126261,126264],{},[106,126262,126263],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126266,126267,126268],"blockquote",{},[19,126269,126270,126271,126273,126274],{},"可以理解成 ",[106,126272,126141],{}," 文件是 Linux 的 ",[23,126275,126276],{},"快捷方式配置文件",[19,126278,126279],{},"4️⃣设置可执行权限",[99,126281,126283],{"className":121991,"code":126282,"language":121993,"meta":121994,"style":104},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[106,126284,126285],{"__ignoreMap":104},[109,126286,126287],{"class":111,"line":112},[109,126288,126282],{},[19,126290,126291],{},"5️⃣桌面图标启动的话如下：",[99,126293,126295],{"className":121991,"code":126294,"language":121993,"meta":121994,"style":104},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[106,126296,126297,126302],{"__ignoreMap":104},[109,126298,126299],{"class":111,"line":112},[109,126300,126301],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[109,126303,126304],{"class":111,"line":119},[109,126305,126306],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[765,126308,126309],{"start":140},[30,126310,126311],{},"下载Appimage文件实现软件的安装",[19,126313,126314],{},"1️⃣先下载appimage",[19,126316,126317],{},[1776,126318,126319],{"href":126319,"rel":126320},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25039],[19,126322,126323],{},[938,126324],{"alt":104,"src":126325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126327,126328],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126330,126331],{},[938,126332],{"alt":104,"src":126333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126335,126336],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126338,126339],{},[938,126340],{"alt":104,"src":126341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126343,126344],{},[938,126345],{"alt":104,"src":126346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126348,126349,126350,126353],{},"3️⃣给他们放在",[106,126351,126352],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126355,126356],{},"4️⃣给软件执行权限",[99,126358,126360],{"className":121991,"code":126359,"language":121993,"meta":121994,"style":104},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[106,126361,126362,126367],{"__ignoreMap":104},[109,126363,126364],{"class":111,"line":112},[109,126365,126366],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[109,126368,126369],{"class":111,"line":119},[109,126370,126371],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126373,126374],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[99,126376,126378],{"className":118471,"code":126377,"language":118473,"meta":104,"style":104},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[106,126379,126380,126387,126394,126400],{"__ignoreMap":104},[109,126381,126382,126384],{"class":111,"line":112},[109,126383,102451],{"class":133},[109,126385,126386],{"class":278}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[109,126388,126389,126391],{"class":111,"line":119},[109,126390,102458],{"class":211},[109,126392,126393],{"class":278}," .\u002Fqqmusic.desktop\n",[109,126395,126396,126398],{"class":111,"line":140},[109,126397,125442],{"class":211},[109,126399,126393],{"class":278},[109,126401,126402,126404,126406,126408],{"class":111,"line":154},[109,126403,25751],{"class":211},[109,126405,25754],{"class":278},[109,126407,124308],{"class":278},[109,126409,126393],{"class":278},[19,126411,126412,126414],{},[106,126413,102458],{},"：一个 Linux 命令，主要功能是：",[27,126416,126417,126420],{},[30,126418,126419],{},"如果文件不存在，就创建一个新的空文件",[30,126421,126422],{},"如果文件已存在，就更新该文件的最后修改时间",[99,126424,126426],{"className":121991,"code":126425,"language":121993,"meta":121994,"style":104},"[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",[106,126427,126428,126432,126437,126442,126447,126451,126456],{"__ignoreMap":104},[109,126429,126430],{"class":111,"line":112},[109,126431,126193],{},[109,126433,126434],{"class":111,"line":119},[109,126435,126436],{},"Name=QQ音乐\n",[109,126438,126439],{"class":111,"line":140},[109,126440,126441],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[109,126443,126444],{"class":111,"line":154},[109,126445,126446],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[109,126448,126449],{"class":111,"line":161},[109,126450,126203],{},[109,126452,126453],{"class":111,"line":167},[109,126454,126455],{},"Categories=Audio;Music;Player;\n",[109,126457,126458],{"class":111,"line":185},[109,126459,126460],{},"Comment=QQ Music Client for Linux\n",[19,126462,126463],{},"将文件复制进去",[19,126465,126466],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126468,126469],{},[938,126470],{"alt":104,"src":126471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126473,126474],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126476,126477],{},[938,126478],{"alt":104,"src":126479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126481,126482,126483,126486,126487,126490],{},"如果你用的不是KDE，那么也可以直接修改",[106,126484,126485],{},"qqmuic.desktop","：在exec的末尾加上",[106,126488,126489],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[99,126492,126494],{"className":121991,"code":126493,"language":121993,"meta":121994,"style":104},"[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",[106,126495,126496,126500,126504,126509,126513,126517,126521],{"__ignoreMap":104},[109,126497,126498],{"class":111,"line":112},[109,126499,126193],{},[109,126501,126502],{"class":111,"line":119},[109,126503,126436],{},[109,126505,126506],{"class":111,"line":140},[109,126507,126508],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[109,126510,126511],{"class":111,"line":154},[109,126512,126446],{},[109,126514,126515],{"class":111,"line":161},[109,126516,126203],{},[109,126518,126519],{"class":111,"line":167},[109,126520,126455],{},[109,126522,126523],{"class":111,"line":185},[109,126524,126460],{},[19,126526,126527],{},[938,126528],{"alt":104,"src":126529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126531,126532],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[99,126534,126536],{"className":121991,"code":126535,"language":121993,"meta":121994,"style":104},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[106,126537,126538],{"__ignoreMap":104},[109,126539,126540],{"class":111,"line":112},[109,126541,126535],{},[765,126543,126544],{"start":154},[30,126545,126546],{},"去Flathub上安装软件",[19,126548,126549],{},[1776,126550,126551],{"href":126551,"rel":126552},"https:\u002F\u002Fflathub.org\u002F",[25039],[19,126554,126555],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126557,126558],{},[938,126559],{"alt":104,"src":126560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[99,126562,126564],{"className":121991,"code":126563,"language":121993,"meta":121994,"style":104},"flatpak install flathub com.obsproject.Studio\n",[106,126565,126566],{"__ignoreMap":104},[109,126567,126568],{"class":111,"line":112},[109,126569,126563],{},[19,126571,126572],{},[938,126573],{"alt":104,"src":126574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126576,126577],{},"2️⃣运行软件",[19,126579,126580],{},"a.官方方式：",[19,126582,126583],{},[938,126584],{"alt":104,"src":126585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[99,126587,126588],{"className":121991,"code":126563,"language":121993,"meta":121994,"style":104},[106,126589,126590],{"__ignoreMap":104},[109,126591,126592],{"class":111,"line":112},[109,126593,126563],{},[19,126595,126596],{},"b.当普通软件运行：",[19,126598,126599],{},[938,126600],{"alt":104,"src":126601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126603,126604],{},[938,126605],{"alt":104,"src":126606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1467,126608,126609],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":104,"searchDepth":119,"depth":119,"links":126611},[126612,126613,126618,126619,126625,126626],{"id":123344,"depth":119,"text":123345},{"id":123686,"depth":119,"text":123687,"children":126614},[126615,126616,126617],{"id":123690,"depth":140,"text":123691},{"id":123757,"depth":140,"text":123758},{"id":124018,"depth":140,"text":124019},{"id":124171,"depth":119,"text":124172},{"id":124409,"depth":119,"text":124410,"children":126620},[126621,126622,126623,126624],{"id":124461,"depth":140,"text":124462},{"id":124747,"depth":140,"text":124748},{"id":125018,"depth":140,"text":125019},{"id":125277,"depth":140,"text":125278},{"id":125336,"depth":119,"text":125337},{"id":125637,"depth":119,"text":125638,"children":126627},[126628,126629,126630,126631,126632,126633,126634,126635],{"id":125641,"depth":140,"text":125642},{"id":125653,"depth":140,"text":125654},{"id":125865,"depth":140,"text":125866},{"id":125889,"depth":140,"text":125890},{"id":125955,"depth":140,"text":125956},{"id":126049,"depth":140,"text":126050},{"id":126056,"depth":140,"text":126057},{"id":126080,"depth":140,"text":126081},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123336,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126642,"title":126643,"body":126644,"description":24550,"extension":1476,"meta":126648,"navigation":157,"path":126649,"seo":126650,"stem":126651,"__hash__":126652},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126645,"toc":126646},[],{"title":104,"searchDepth":119,"depth":119,"links":126647},[],{"category":31438},"\u002Fwiki\u002F2025-01-27-linux",{"title":126643,"description":24550},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126654,"title":126655,"body":126656,"description":126660,"extension":1476,"meta":127051,"navigation":157,"path":127052,"seo":127053,"stem":127054,"__hash__":127055},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126657,"toc":127049},[126658,126661,126665,126682,126685,126738,126742,126744,126784,126793,126797,126800,127041,127046],[19,126659,126660],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126662,126664],{"id":126663},"_1ubuntu环境配置","1.Ubuntu环境配置",[765,126666,126667,126670,126673,126676,126679],{},[30,126668,126669],{},"ubuntu环境换源",[30,126671,126672],{},"安装cuda",[30,126674,126675],{},"安装miniconda",[30,126677,126678],{},"安装pytorch",[30,126680,126681],{},"安装genesis",[19,126683,126684],{},"参考链接：",[99,126686,126688],{"className":24996,"code":126687,"language":24998,"meta":104,"style":104},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[106,126689,126690],{"__ignoreMap":104},[109,126691,126692,126695,126698,126701,126703,126706,126709,126711,126714,126717,126719,126722,126725,126727,126730,126733,126735],{"class":111,"line":112},[109,126693,126694],{"class":211},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[109,126696,126697],{"class":278},"=blogdetail",[109,126699,126700],{"class":126},"&sharetype",[109,126702,130],{"class":122},[109,126704,126705],{"class":278},"blogdetail",[109,126707,126708],{"class":126},"&sharerId",[109,126710,130],{"class":122},[109,126712,126713],{"class":278},"144728092",[109,126715,126716],{"class":126},"&sharerefer",[109,126718,130],{"class":122},[109,126720,126721],{"class":278},"PC",[109,126723,126724],{"class":126},"&sharesource",[109,126726,130],{"class":122},[109,126728,126729],{"class":278},"qq_69379513",[109,126731,126732],{"class":126},"&sharefrom",[109,126734,130],{"class":122},[109,126736,126737],{"class":278},"from_link\n",[10,126739,126741],{"id":126740},"_2genesis-报错issue","2.Genesis 报错issue",[19,126743,126684],{},[99,126745,126746],{"className":24996,"code":126687,"language":24998,"meta":104,"style":104},[106,126747,126748],{"__ignoreMap":104},[109,126749,126750,126752,126754,126756,126758,126760,126762,126764,126766,126768,126770,126772,126774,126776,126778,126780,126782],{"class":111,"line":112},[109,126751,126694],{"class":211},[109,126753,126697],{"class":278},[109,126755,126700],{"class":126},[109,126757,130],{"class":122},[109,126759,126705],{"class":278},[109,126761,126708],{"class":126},[109,126763,130],{"class":122},[109,126765,126713],{"class":278},[109,126767,126716],{"class":126},[109,126769,130],{"class":122},[109,126771,126721],{"class":278},[109,126773,126724],{"class":126},[109,126775,130],{"class":122},[109,126777,126729],{"class":278},[109,126779,126732],{"class":126},[109,126781,130],{"class":122},[109,126783,126737],{"class":278},[99,126785,126787],{"className":24996,"code":126786,"language":24998,"meta":104,"style":104},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[106,126788,126789],{"__ignoreMap":104},[109,126790,126791],{"class":111,"line":112},[109,126792,126786],{"class":211},[10,126794,126796],{"id":126795},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126798,126799],{},"hello_robot.py",[99,126801,126803],{"className":31553,"code":126802,"language":31555,"meta":104,"style":104},"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",[106,126804,126805,126811,126826,126830,126842,126854,126858,126871,126875,126894,126904,126914,126928,126932,126936,126941,126945,126955,126962,126976,126983,126993,126998,127002,127020,127025,127029,127036],{"__ignoreMap":104},[109,126806,126807,126809],{"class":111,"line":112},[109,126808,31567],{"class":122},[109,126810,46480],{"class":126},[109,126812,126813,126816,126819,126821,126823],{"class":111,"line":119},[109,126814,126815],{"class":126},"os.environ[",[109,126817,126818],{"class":278},"'PYOPENGL_PLATFORM'",[109,126820,5780],{"class":126},[109,126822,130],{"class":122},[109,126824,126825],{"class":278}," 'glx'\n",[109,126827,126828],{"class":111,"line":140},[109,126829,158],{"emptyLinePlaceholder":157},[109,126831,126832,126834,126837,126839],{"class":111,"line":154},[109,126833,31567],{"class":122},[109,126835,126836],{"class":126}," genesis ",[109,126838,32558],{"class":122},[109,126840,126841],{"class":126}," gs\n",[109,126843,126844,126846,126849,126851],{"class":111,"line":161},[109,126845,31912],{"class":122},[109,126847,126848],{"class":126}," pynput ",[109,126850,31567],{"class":122},[109,126852,126853],{"class":126}," keyboard\n",[109,126855,126856],{"class":111,"line":167},[109,126857,158],{"emptyLinePlaceholder":157},[109,126859,126860,126863,126866,126868],{"class":111,"line":185},[109,126861,126862],{"class":126},"gs.init(",[109,126864,126865],{"class":6553},"backend",[109,126867,130],{"class":122},[109,126869,126870],{"class":126},"gs.gpu)\n",[109,126872,126873],{"class":111,"line":201},[109,126874,158],{"emptyLinePlaceholder":157},[109,126876,126877,126880,126882,126885,126888,126890,126892],{"class":111,"line":206},[109,126878,126879],{"class":126},"scene ",[109,126881,130],{"class":122},[109,126883,126884],{"class":126}," gs.Scene(",[109,126886,126887],{"class":6553},"show_viewer",[109,126889,130],{"class":122},[109,126891,32651],{"class":133},[109,126893,1330],{"class":126},[109,126895,126896,126899,126901],{"class":111,"line":218},[109,126897,126898],{"class":126},"plane ",[109,126900,130],{"class":122},[109,126902,126903],{"class":126}," scene.add_entity(gs.morphs.Plane())\n",[109,126905,126906,126909,126911],{"class":111,"line":223},[109,126907,126908],{"class":126},"franka ",[109,126910,130],{"class":122},[109,126912,126913],{"class":126}," scene.add_entity(\n",[109,126915,126916,126919,126921,126923,126926],{"class":111,"line":229},[109,126917,126918],{"class":126},"    gs.morphs.MJCF(",[109,126920,46529],{"class":6553},[109,126922,130],{"class":122},[109,126924,126925],{"class":278},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[109,126927,39222],{"class":126},[109,126929,126930],{"class":111,"line":244},[109,126931,1330],{"class":126},[109,126933,126934],{"class":111,"line":258},[109,126935,158],{"emptyLinePlaceholder":157},[109,126937,126938],{"class":111,"line":263},[109,126939,126940],{"class":126},"scene.build()\n",[109,126942,126943],{"class":111,"line":269},[109,126944,158],{"emptyLinePlaceholder":157},[109,126946,126947,126949,126952],{"class":111,"line":304},[109,126948,33122],{"class":122},[109,126950,126951],{"class":211}," on_press",[109,126953,126954],{"class":126},"(key):\n",[109,126956,126957,126960],{"class":111,"line":331},[109,126958,126959],{"class":122},"    try",[109,126961,5082],{"class":126},[109,126963,126964,126966,126969,126971,126974],{"class":111,"line":336},[109,126965,3852],{"class":122},[109,126967,126968],{"class":126}," key.char ",[109,126970,4296],{"class":122},[109,126972,126973],{"class":278}," 'q'",[109,126975,5082],{"class":126},[109,126977,126978,126980],{"class":111,"line":364},[109,126979,16905],{"class":122},[109,126981,126982],{"class":133}," False\n",[109,126984,126985,126988,126991],{"class":111,"line":391},[109,126986,126987],{"class":122},"    except",[109,126989,126990],{"class":133}," AttributeError",[109,126992,5082],{"class":126},[109,126994,126995],{"class":111,"line":396},[109,126996,126997],{"class":122},"        pass\n",[109,126999,127000],{"class":111,"line":402},[109,127001,158],{"emptyLinePlaceholder":157},[109,127003,127004,127007,127009,127012,127015,127017],{"class":111,"line":419},[109,127005,127006],{"class":126},"listener ",[109,127008,130],{"class":122},[109,127010,127011],{"class":126}," keyboard.Listener(",[109,127013,127014],{"class":6553},"on_press",[109,127016,130],{"class":122},[109,127018,127019],{"class":126},"on_press)\n",[109,127021,127022],{"class":111,"line":435},[109,127023,127024],{"class":126},"listener.start()\n",[109,127026,127027],{"class":111,"line":440},[109,127028,158],{"emptyLinePlaceholder":157},[109,127030,127031,127033],{"class":111,"line":467},[109,127032,109838],{"class":122},[109,127034,127035],{"class":126}," listener.running:\n",[109,127037,127038],{"class":111,"line":494},[109,127039,127040],{"class":126},"    scene.step()\n",[19,127042,127043],{},[938,127044],{"alt":104,"src":127045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1467,127047,127048],{},"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":104,"searchDepth":119,"depth":119,"links":127050},[],{"category":24552},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126655,"description":126660},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127057,"title":127058,"body":127059,"description":24550,"extension":1476,"meta":127074,"navigation":157,"path":127075,"seo":127076,"stem":127077,"__hash__":127078},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127060,"toc":127071},[127061,127064,127068],[10,127062,127058],{"id":127063},"_1-基础知识",[14,127065,127067],{"id":127066},"_11-js的组成","1.1 js的组成",[19,127069,127070],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":104,"searchDepth":119,"depth":119,"links":127072},[127073],{"id":127066,"depth":119,"text":127067},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127058,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127080,"title":127081,"body":127082,"description":24550,"extension":1476,"meta":127221,"navigation":157,"path":127222,"seo":127223,"stem":127224,"__hash__":127225},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127083,"toc":127209},[127084,127087,127091,127094,127098,127108,127112,127115,127118,127121,127125,127132,127138,127142,127148,127159,127163,127166,127170,127173,127177,127180,127184,127187,127191,127194,127197,127200,127203,127206],[10,127085,127081],{"id":127086},"_2-vscode必备内容",[14,127088,127090],{"id":127089},"_21-标签分类","2.1 标签分类",[19,127092,127093],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127095,127097],{"id":127096},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127099,127100,127101,127103,127104,127107],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[106,127102,1764],{}," 然后按 ",[106,127105,127106],{},"Tab","，快速自动生成基本结构。",[14,127109,127111],{"id":127110},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127113,127114],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127116,127117],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127119,127120],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127122,127124],{"id":127123},"_24-视图缩放","2.4 视图缩放",[19,127126,127127,127128,127131],{},"缩放视图 ",[106,127129,127130],{},"ctrl+"," 可实现代码增大。",[19,127133,127134,127137],{},[106,127135,127136],{},"ctrl-"," 可实现代码减小。",[14,127139,127141],{"id":127140},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127143,127144,127145,29560],{},"VSCode 新建文件快捷键为 ",[106,127146,127147],{},"ctrl+N",[19,127149,127150,127151,127154,127155,127158],{},"保存快捷键为 ",[106,127152,127153],{},"ctrl+S","，将文本保存为 ",[106,127156,127157],{},".html"," 文件。",[14,127160,127162],{"id":127161},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127164,127165],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127167,127169],{"id":127168},"_27-vscode-icons","2.7 vscode-icons",[19,127171,127172],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127174,127176],{"id":127175},"_28-easy-less","2.8 Easy LESS",[19,127178,127179],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127181,127183],{"id":127182},"_29-会了吧插件","2.9 会了吧插件",[19,127185,127186],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127188,127190],{"id":127189},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127192,127193],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127195,127196],{},"②选定多个相同的单词:ctrl+D",[19,127198,127199],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127201,127202],{},"④全局替换某些单词:ctrl+h",[19,127204,127205],{},"⑤快速定位到某一行:ctrl+g",[19,127207,127208],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":104,"searchDepth":119,"depth":119,"links":127210},[127211,127212,127213,127214,127215,127216,127217,127218,127219,127220],{"id":127089,"depth":119,"text":127090},{"id":127096,"depth":119,"text":127097},{"id":127110,"depth":119,"text":127111},{"id":127123,"depth":119,"text":127124},{"id":127140,"depth":119,"text":127141},{"id":127161,"depth":119,"text":127162},{"id":127168,"depth":119,"text":127169},{"id":127175,"depth":119,"text":127176},{"id":127182,"depth":119,"text":127183},{"id":127189,"depth":119,"text":127190},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127081,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127227,"title":127228,"body":127229,"description":24550,"extension":1476,"meta":127388,"navigation":157,"path":127389,"seo":127390,"stem":127391,"__hash__":127392},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127230,"toc":127380},[127231,127234,127238,127248,127254,127260,127264,127273,127277,127282,127285,127288,127292,127295,127305,127314,127323,127332,127342,127349,127354,127359,127372],[10,127232,127228],{"id":127233},"_3-html文本与容器标签",[14,127235,127237],{"id":127236},"_31-标题标签","3.1 标题标签",[19,127239,127240,127243,127244,127247],{},[106,127241,127242],{},"\u003Ch1>","我是一级标签",[106,127245,127246],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127249,127250,127243,127252],{},[106,127251,127242],{},[106,127253,127246],{},[19,127255,124510,127256,127259],{},[106,127257,127258],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127261,127263],{"id":127262},"_32-段落标签","3.2 段落标签",[19,127265,127266,127269,127270],{},[106,127267,127268],{},"\u003Cp>","....",[106,127271,127272],{},"\u003C\u002Fp>",[14,127274,127276],{"id":127275},"_33-换行标签","3.3 换行标签",[19,127278,127279],{},[106,127280,127281],{},"\u003Cbr \u002F>",[19,127283,127284],{},"具有强制换行的作用",[19,127286,127287],{},"单标签",[14,127289,127291],{"id":127290},"_34-文本格式化标签","3.4 文本格式化标签",[19,127293,127294],{},"提供粗体、斜体和下划线等效果",[19,127296,127297,127298,83714,127301,127304],{},"加粗：",[106,127299,127300],{},"\u003Cstrong>...\u003C\u002Fstrong>",[106,127302,127303],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127306,127307,127308,83714,127311,127304],{},"斜体：",[106,127309,127310],{},"\u003Cem>...\u003C\u002Fem>",[106,127312,127313],{},"\u003Ci>...\u003C\u002Fi>",[19,127315,127316,127317,83714,127320,127304],{},"删除线：",[106,127318,127319],{},"\u003Cdel>...\u003C\u002Fdel>",[106,127321,127322],{},"\u003Cs>...\u003C\u002Fs>",[19,127324,127325,127326,83714,127329,127304],{},"下划线：",[106,127327,127328],{},"\u003Cins>...\u003C\u002Fins>",[106,127330,127331],{},"\u003Cu>...\u003C\u002Fu>",[14,127333,127335,127336,19583,127339,103868],{"id":127334},"_35-div和span标签","3.5 ",[106,127337,127338],{},"\u003Cdiv>",[106,127340,127341],{},"\u003Cspan>",[19,127343,127344,102193,127346,127348],{},[106,127345,127338],{},[106,127347,127341],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127350,127351],{},[106,127352,127353],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127355,127356],{},[106,127357,127358],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127360,127361,127362,127364,127365,127367,127368,127371],{},"两者特点：①",[106,127363,127338],{}," 标签用来布局，但一行通常只放一个 ",[106,127366,127338],{},"。可以理解为一个大盒子，独占一行，在 ",[106,127369,127370],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127373,78424,127374,127376,127377,127379],{},[106,127375,127341],{}," 标签也可用于布局，一行可以放多个 ",[106,127378,127341],{},"，可理解为小盒子。",{"title":104,"searchDepth":119,"depth":119,"links":127381},[127382,127383,127384,127385,127386],{"id":127236,"depth":119,"text":127237},{"id":127262,"depth":119,"text":127263},{"id":127275,"depth":119,"text":127276},{"id":127290,"depth":119,"text":127291},{"id":127334,"depth":119,"text":127387},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127228,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127394,"title":127395,"body":127396,"description":24550,"extension":1476,"meta":127593,"navigation":157,"path":127594,"seo":127595,"stem":127596,"__hash__":127597},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127397,"toc":127585},[127398,127401,127405,127408,127414,127421,127427,127433,127436,127439,127442,127445,127448,127451,127454,127458,127461,127464,127467,127473,127479,127485,127492,127496,127502,127508,127511,127514,127520,127526,127532,127535,127538,127542,127545,127555,127561,127565,127574,127578,127581],[10,127399,127395],{"id":127400},"_4-html图像与链接",[14,127402,127404],{"id":127403},"_41-图像标签","4.1 图像标签",[19,127406,127407],{},"（1）标签",[19,127409,127410,127413],{},[106,127411,127412],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127415,127416,127417,127420],{},"src是",[106,127418,127419],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127422,127423,127424],{},"alt:文本，替换文本。图像不能显示的文字 ",[106,127425,127426],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127428,127429,127430],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[106,127431,127432],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127434,127435],{},"width:像素，设置图像的宽度",[19,127437,127438],{},"height:像素，设置图像的高度",[19,127440,127441],{},"border：像素，设置图像的边框粗细",[19,127443,127444],{},"（2）图像标签属性的注意点：",[19,127446,127447],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127449,127450],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127452,127453],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127455,127457],{"id":127456},"_42-路径注意要点","4.2 路径注意要点：",[19,127459,127460],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127462,127463],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127465,127466],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127468,127469,127470],{},"①同一级路径：图像文件位于HTML文件同一级，如",[106,127471,127472],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127474,127475,127476],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[106,127477,127478],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127480,127481,127482],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[106,127483,127484],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127486,127487,127488,1789],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[1776,127489,127490],{"href":127490,"rel":127491},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25039],[14,127493,127495],{"id":127494},"_43-超链接标签","4.3 超链接标签",[19,127497,127498,127501],{},[106,127499,127500],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127503,127504,127505],{},"①语法格式：",[106,127506,127507],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127509,127510],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127512,127513],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127515,127516,127517],{},"③链接分类：外部链接：",[106,127518,127519],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127521,127522,127523],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[106,127524,127525],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127527,127528,127529],{},"空链接：如果当时没有确定链接目标时，",[106,127530,127531],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127533,127534],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127536,127537],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127539,127541],{"id":127540},"_44-锚点链接","4.4 锚点链接",[19,127543,127544],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127546,127547,127548,127551,127552],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[106,127549,127550],{},"\u003Ca href=\"#two\">","第二级",[106,127553,127554],{},"\u003C\u002Fa>",[19,127556,127557,127558],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[106,127559,127560],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127562,127564],{"id":127563},"_45-注释标签","4.5 注释标签",[19,127566,127567,127570,127571],{},[106,127568,127569],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[106,127572,127573],{},"ctrl+\u002F",[14,127575,127577],{"id":127576},"_46-特殊字符","4.6 特殊字符",[19,127579,127580],{},"可以实现添加多个空格",[938,127582],{"style":127583,"src":127584},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":104,"searchDepth":119,"depth":119,"links":127586},[127587,127588,127589,127590,127591,127592],{"id":127403,"depth":119,"text":127404},{"id":127456,"depth":119,"text":127457},{"id":127494,"depth":119,"text":127495},{"id":127540,"depth":119,"text":127541},{"id":127563,"depth":119,"text":127564},{"id":127576,"depth":119,"text":127577},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127395,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127599,"title":127600,"body":127601,"description":24550,"extension":1476,"meta":127894,"navigation":157,"path":127895,"seo":127896,"stem":127897,"__hash__":127898},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127602,"toc":127885},[127603,127606,127610,127613,127616,127619,127622,127625,127628,127631,127634,127637,127657,127663,127667,127670,127673,127676,127679,127682,127685,127689,127692,127695,127698,127701,127714,127719,127722,127725,127740,127743,127746,127749,127752,127755,127759,127762,127769,127772,127775,127778,127781,127784,127790,127793,127796,127802,127805,127808,127811,127817,127820,127823,127837,127844,127847,127850,127857,127866,127869,127872,127875,127879,127882],[10,127604,127600],{"id":127605},"_5-html表格列表与表单",[14,127607,127609],{"id":127608},"_51-表格标签","5.1 表格标签",[19,127611,127612],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127614,127615],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127617,127618],{},"②表格基本语法：",[938,127620],{"style":127583,"src":127621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127623,127624],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[938,127626],{"style":127583,"src":127627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127629,127630],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[938,127632],{"style":127583,"src":127633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127635,127636],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127638,127639,127642,127643,127645,127646,127649,127650,127652,127653,127656],{},[106,127640,127641],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[106,127644,127641],{},"内部必须拥有",[106,127647,127648],{},"\u003Ctr>","标签，一般位于第一行，",[106,127651,127641],{},"比",[106,127654,127655],{},"\u003Cth>","范围广",[19,127658,127659,127662],{},[106,127660,127661],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127664,127666],{"id":127665},"_52-合并单元格","5.2 合并单元格",[19,127668,127669],{},"（1）合并单元格方式：",[19,127671,127672],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127674,127675],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127677,127678],{},"（2）目标单元格：",[19,127680,127681],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127683,127684],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127686,127688],{"id":127687},"_53-列表标签","5.3 列表标签",[19,127690,127691],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127693,127694],{},"①无序列表：",[938,127696],{"style":127583,"src":127697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127699,127700],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127702,127703,127706,127707,127710,127711,127713],{},[106,127704,127705],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[106,127708,127709],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[106,127712,127705],{},"中输入其他标签或文字是不对的",[19,127715,127716,127718],{},[106,127717,127709],{},"之间相当于一个容器，可以容纳所有元素",[19,127720,127721],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127723,127724],{},"在css中去除前边的小圆点采用如下代码:",[99,127726,127730],{"className":127727,"code":127728,"language":127729,"meta":104,"style":104},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[106,127731,127732],{"__ignoreMap":104},[109,127733,127734,127737],{"class":111,"line":112},[109,127735,127736],{"class":52475},"list-style",[109,127738,127739],{"class":126},": none;\n",[19,127741,127742],{},"②有序列表：",[938,127744],{"style":127583,"src":127745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127747,127748],{},"③自定义列表：",[938,127750],{"style":127583,"src":127751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[938,127753],{"style":127583,"src":127754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127756,127758],{"id":127757},"_54-表单标签","5.4 表单标签",[19,127760,127761],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127763,127764,127765,127768],{},"（1）表单域：包含单元素的区域，",[106,127766,127767],{},"\u003Cform>","标签可以实现信息的收集和传递。",[938,127770],{"style":127583,"src":127771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127773,127774],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127776,127777],{},"表单元素提交必须有name属性",[19,127779,127780],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127782,127783],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127785,78401,127786,127789],{},[106,127787,127788],{},"\u003Cinput>","输入表单元素",[938,127791],{"style":127583,"src":127792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[938,127794],{"style":127583,"src":127795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127797,127798,127799],{},"单选按钮：",[106,127800,127801],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[938,127803],{"style":127583,"src":127804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127806,127807],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[938,127809],{"style":127583,"src":127810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127812,127813,127816],{},[23,127814,127815],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127818,127819],{},"②select下拉表单元素：可以节约页面控件",[938,127821],{"style":127583,"src":127822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127824,127825,14968,127827,127830,127831,127833,127834,127836],{},[23,127826,1574],{},[106,127828,127829],{},"\u003Cselect>","中至少包含一对",[106,127832,103889],{},"；在",[106,127835,103889],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127838,127839,127840,127843],{},"③",[106,127841,127842],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[938,127845],{"style":127583,"src":127846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127848,127849],{},"3行20列",[14,127851,127853,127854,103868],{"id":127852},"_55-lable标签","5.5 ",[106,127855,127856],{},"\u003Clable>",[19,127858,127859,127860,127862,127863,127865],{},"它不是表单标签，但常常与表单标签搭配使用，",[106,127861,127856],{},"标签用于绑定一个表单标签，当点击",[106,127864,127856],{},"标签内的文本",[19,127867,127868],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[938,127870],{"style":127583,"src":127871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[938,127873],{"style":127583,"src":127874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127876,127878],{"id":127877},"_56-实例","5.6 实例",[938,127880],{"style":127583,"src":127881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1467,127883,127884],{},"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":104,"searchDepth":119,"depth":119,"links":127886},[127887,127888,127889,127890,127891,127893],{"id":127608,"depth":119,"text":127609},{"id":127665,"depth":119,"text":127666},{"id":127687,"depth":119,"text":127688},{"id":127757,"depth":119,"text":127758},{"id":127852,"depth":119,"text":127892},"5.5 \u003Clable>标签",{"id":127877,"depth":119,"text":127878},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127600,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127900,"title":127901,"body":127902,"description":24550,"extension":1476,"meta":128451,"navigation":157,"path":128452,"seo":128453,"stem":128454,"__hash__":128455},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127903,"toc":128426},[127904,127907,127911,127914,127917,127921,127924,127927,127930,127933,127936,127939,127942,127946,127949,127953,127956,127959,127962,127966,127969,127972,127975,127981,127984,127987,127990,127993,127996,127999,128002,128035,128039,128042,128045,128048,128052,128055,128058,128061,128064,128067,128071,128074,128077,128080,128084,128087,128091,128094,128098,128101,128106,128110,128113,128117,128120,128123,128126,128129,128156,128159,128163,128166,128169,128174,128177,128180,128184,128187,128192,128195,128198,128201,128205,128208,128211,128214,128218,128221,128224,128227,128231,128235,128238,128278,128281,128285,128292,128295,128299,128302,128348,128352,128355,128358,128361,128389,128393,128396,128423],[10,127905,127901],{"id":127906},"_6-css语法与文本样式",[14,127908,127910],{"id":127909},"_61-css语法规范","6.1 css语法规范",[19,127912,127913],{},"由两部分组成，选择器及一条或多条声明",[938,127915],{"style":127583,"src":127916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127918,127919],{},[23,127920,1574],{},[19,127922,127923],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127925,127926],{},"②属性与属性值以“键值对”的形式出现",[19,127928,127929],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127931,127932],{},"④属性和属性值之间用英文“;”分开",[938,127934],{"style":127583,"src":127935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[938,127937],{"style":127583,"src":127938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[938,127940],{"style":127583,"src":127941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127943,127945],{"id":127944},"_62-css选择器","6.2 css选择器",[19,127947,127948],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[51,127950,127952],{"id":127951},"_621-标签选择器","6.2.1 标签选择器",[19,127954,127955],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127957,127958],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[938,127960],{"style":127583,"src":127961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[51,127963,127965],{"id":127964},"_622-类选择器","6.2.2 类选择器",[19,127967,127968],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127970,127971],{},"②样例",[938,127973],{"style":127583,"src":127974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127976,127977,127978,127980],{},"③ ",[23,127979,127815],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127982,127983],{},"可以理解为给这个标签起了个名字，来表示；",[19,127985,127986],{},"长名称或词组可以使用横线来为选择器命名；",[19,127988,127989],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127991,127992],{},"命名要有意义；",[938,127994],{"style":127583,"src":127995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127997,127998],{},"类选择器也可以指定特殊的元素p.center{}",[19,128000,128001],{},"p.center和.center都对",[99,128003,128005],{"className":127727,"code":128004,"language":127729,"meta":104,"style":104},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[106,128006,128007,128012,128021,128031],{"__ignoreMap":104},[109,128008,128009],{"class":111,"line":112},[109,128010,128011],{"class":115},"\u002F* 类选择器指定特殊元素 *\u002F\n",[109,128013,128014,128016,128019],{"class":111,"line":119},[109,128015,19],{"class":52475},[109,128017,128018],{"class":211},".center",[109,128020,16745],{"class":126},[109,128022,128023,128025,128027,128029],{"class":111,"line":140},[109,128024,71701],{"class":133},[109,128026,52612],{"class":126},[109,128028,52767],{"class":133},[109,128030,137],{"class":126},[109,128032,128033],{"class":111,"line":154},[109,128034,742],{"class":126},[51,128036,128038],{"id":128037},"_623-多类名使用","6.2.3 多类名使用",[19,128040,128041],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[938,128043],{"style":127583,"src":128044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128046,128047],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[51,128049,128051],{"id":128050},"_624-id选择器","6.2.4 id选择器",[19,128053,128054],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128056,128057],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[938,128059],{"style":127583,"src":128060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128062,128063],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128065,128066],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[51,128068,128070],{"id":128069},"_625-通配符选择器","6.2.5 通配符选择器",[19,128072,128073],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128075,128076],{},"* {",[19,128078,128079],{},"color=\"red\"}",[51,128081,128083],{"id":128082},"_626-总结","6.2.6 总结",[938,128085],{"style":127583,"src":128086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128088,128090],{"id":128089},"_63-css字体属性","6.3 css字体属性",[19,128092,128093],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[51,128095,128097],{"id":128096},"_631-字体系列","6.3.1 字体系列",[19,128099,128100],{},"font-family: '宋体';",[19,128102,128103,128105],{},[23,128104,1574],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[51,128107,128109],{"id":128108},"_632-字体大小","6.3.2 字体大小",[19,128111,128112],{},"font-size: 20px",[19,128114,128115,27648],{},[23,128116,127815],{},[19,128118,128119],{},"①px（像素）大小是网页的最常用单位",[19,128121,128122],{},"②谷歌浏览器默认为16px",[19,128124,128125],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128127,128128],{},"④可以给body指定整个页面的大小：会自动引用",[99,128130,128132],{"className":127727,"code":128131,"language":127729,"meta":104,"style":104},"body {\n  font-size: 16px;\n}\n",[106,128133,128134,128140,128152],{"__ignoreMap":104},[109,128135,128136,128138],{"class":111,"line":112},[109,128137,52975],{"class":52475},[109,128139,16745],{"class":126},[109,128141,128142,128144,128146,128148,128150],{"class":111,"line":119},[109,128143,71801],{"class":133},[109,128145,52612],{"class":126},[109,128147,2133],{"class":133},[109,128149,52667],{"class":122},[109,128151,137],{"class":126},[109,128153,128154],{"class":111,"line":140},[109,128155,742],{"class":126},[19,128157,128158],{},"⑤标题标签比较特殊，需要单独指定大小",[51,128160,128162],{"id":128161},"_633-字体粗细","6.3.3 字体粗细",[19,128164,128165],{},"font-weight: bold;",[19,128167,128168],{},"font-weight: 100；",[19,128170,128171,128173],{},[23,128172,1574],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128175,128176],{},"font-weight= 400;",[19,128178,128179],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[51,128181,128183],{"id":128182},"_634-文字样式","6.3.4 文字样式",[19,128185,128186],{},"font-style: normal；",[19,128188,128189,27648],{},[23,128190,128191],{},"属性值",[19,128193,128194],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128196,128197],{},"②italic：浏览器会显示斜体的字体样式",[938,128199],{"style":127583,"src":128200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[51,128202,128204],{"id":128203},"_635-字体符合属性","6.3.5 字体符合属性",[938,128206],{"style":127583,"src":128207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[938,128209],{"style":127583,"src":128210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128212,128213],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128215,128216,27648],{},[23,128217,127815],{},[19,128219,128220],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128222,128223],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128225,128226],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128228,128230],{"id":128229},"_64-css-test文本属性","6.4 css test文本属性",[51,128232,128234],{"id":128233},"_641-文本颜色","6.4.1 文本颜色",[19,128236,128237],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[99,128239,128241],{"className":127727,"code":128240,"language":127729,"meta":104,"style":104},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[106,128242,128243,128248,128254,128264,128269,128274],{"__ignoreMap":104},[109,128244,128245],{"class":111,"line":112},[109,128246,128247],{"class":115},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[109,128249,128250,128252],{"class":111,"line":119},[109,128251,19],{"class":52475},[109,128253,16745],{"class":126},[109,128255,128256,128258,128260,128262],{"class":111,"line":140},[109,128257,72080],{"class":133},[109,128259,52612],{"class":126},[109,128261,58596],{"class":133},[109,128263,137],{"class":126},[109,128265,128266],{"class":111,"line":154},[109,128267,128268],{"class":115},"  \u002F* color: #ff0000; *\u002F\n",[109,128270,128271],{"class":111,"line":161},[109,128272,128273],{"class":115},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[109,128275,128276],{"class":111,"line":167},[109,128277,742],{"class":126},[938,128279],{"style":127583,"src":128280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[51,128282,128284],{"id":128283},"_642-对齐文本","6.4.2 对齐文本",[19,128286,128287,128288,128291],{},"text-align属于用于设置元素内文本内容的 ",[23,128289,128290],{},"水平对齐"," 方式",[19,128293,128294],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[51,128296,128298],{"id":128297},"_643-装饰文本","6.4.3 装饰文本",[19,128300,128301],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[99,128303,128305],{"className":127727,"code":128304,"language":127729,"meta":104,"style":104},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[106,128306,128307,128313,128323,128327,128333,128344],{"__ignoreMap":104},[109,128308,128309,128311],{"class":111,"line":112},[109,128310,1776],{"class":52475},[109,128312,16745],{"class":126},[109,128314,128315,128317,128319,128321],{"class":111,"line":119},[109,128316,71677],{"class":133},[109,128318,52612],{"class":126},[109,128320,55912],{"class":133},[109,128322,137],{"class":126},[109,128324,128325],{"class":111,"line":140},[109,128326,742],{"class":126},[109,128328,128329,128331],{"class":111,"line":154},[109,128330,19],{"class":52475},[109,128332,16745],{"class":126},[109,128334,128335,128337,128339,128342],{"class":111,"line":161},[109,128336,71677],{"class":133},[109,128338,52612],{"class":126},[109,128340,128341],{"class":133},"underline",[109,128343,137],{"class":126},[109,128345,128346],{"class":111,"line":167},[109,128347,742],{"class":126},[51,128349,128351],{"id":128350},"_644-文本缩进","6.4.4 文本缩进",[19,128353,128354],{},"实现文本的第一行首行缩进自己指定的距离",[19,128356,128357],{},"20px往右边走；-20px往左边走",[19,128359,128360],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[99,128362,128364],{"className":127727,"code":128363,"language":127729,"meta":104,"style":104},"p {\n  text-indent: 2em;\n}\n",[106,128365,128366,128372,128385],{"__ignoreMap":104},[109,128367,128368,128370],{"class":111,"line":112},[109,128369,19],{"class":52475},[109,128371,16745],{"class":126},[109,128373,128374,128377,128379,128381,128383],{"class":111,"line":119},[109,128375,128376],{"class":133},"  text-indent",[109,128378,52612],{"class":126},[109,128380,1618],{"class":133},[109,128382,24727],{"class":122},[109,128384,137],{"class":126},[109,128386,128387],{"class":111,"line":140},[109,128388,742],{"class":126},[51,128390,128392],{"id":128391},"_645-行间距","6.4.5 行间距",[19,128394,128395],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[99,128397,128399],{"className":127727,"code":128398,"language":127729,"meta":104,"style":104},"p {\n  line-height: 1.6;\n}\n",[106,128400,128401,128407,128419],{"__ignoreMap":104},[109,128402,128403,128405],{"class":111,"line":112},[109,128404,19],{"class":52475},[109,128406,16745],{"class":126},[109,128408,128409,128412,128414,128417],{"class":111,"line":119},[109,128410,128411],{"class":133},"  line-height",[109,128413,52612],{"class":126},[109,128415,128416],{"class":133},"1.6",[109,128418,137],{"class":126},[109,128420,128421],{"class":111,"line":140},[109,128422,742],{"class":126},[1467,128424,128425],{},"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":104,"searchDepth":119,"depth":119,"links":128427},[128428,128429,128437,128444],{"id":127909,"depth":119,"text":127910},{"id":127944,"depth":119,"text":127945,"children":128430},[128431,128432,128433,128434,128435,128436],{"id":127951,"depth":140,"text":127952},{"id":127964,"depth":140,"text":127965},{"id":128037,"depth":140,"text":128038},{"id":128050,"depth":140,"text":128051},{"id":128069,"depth":140,"text":128070},{"id":128082,"depth":140,"text":128083},{"id":128089,"depth":119,"text":128090,"children":128438},[128439,128440,128441,128442,128443],{"id":128096,"depth":140,"text":128097},{"id":128108,"depth":140,"text":128109},{"id":128161,"depth":140,"text":128162},{"id":128182,"depth":140,"text":128183},{"id":128203,"depth":140,"text":128204},{"id":128229,"depth":119,"text":128230,"children":128445},[128446,128447,128448,128449,128450],{"id":128233,"depth":140,"text":128234},{"id":128283,"depth":140,"text":128284},{"id":128297,"depth":140,"text":128298},{"id":128350,"depth":140,"text":128351},{"id":128391,"depth":140,"text":128392},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127901,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128457,"title":128458,"body":128459,"description":24550,"extension":1476,"meta":129108,"navigation":157,"path":129109,"seo":129110,"stem":129111,"__hash__":129112},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128460,"toc":129089},[128461,128464,128468,128472,128532,128536,128546,128549,128552,128556,128581,128585,128588,128591,128594,128597,128600,128604,128607,128610,128652,128655,128681,128687,128690,128694,128698,128704,128707,128710,128713,128716,128719,128722,128767,128771,128774,128777,128781,128785,128814,128817,128822,128825,128828,128831,128834,128838,128842,128845,128847,128850,128854,128857,128861,128864,128867,128870,128874,128878,128884,128894,128897,128900,128903,128906,128909,129032,129040,129048,129086],[10,128462,128458],{"id":128463},"_7-css引入方式与选择器进阶",[14,128465,128467],{"id":128466},"_71-css引入方式","7.1 css引入方式",[51,128469,128471],{"id":128470},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[99,128473,128477],{"className":128474,"code":128475,"language":128476,"meta":104,"style":104},"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",[106,128478,128479,128487,128494,128506,128519,128524],{"__ignoreMap":104},[109,128480,128481,128483,128485],{"class":111,"line":112},[109,128482,1320],{"class":126},[109,128484,1467],{"class":52475},[109,128486,52482],{"class":126},[109,128488,128489,128492],{"class":111,"line":119},[109,128490,128491],{"class":52475},"  h1",[109,128493,16745],{"class":126},[109,128495,128496,128499,128501,128504],{"class":111,"line":140},[109,128497,128498],{"class":133},"    color",[109,128500,52612],{"class":126},[109,128502,128503],{"class":133},"blue",[109,128505,137],{"class":126},[109,128507,128508,128511,128513,128515,128517],{"class":111,"line":154},[109,128509,128510],{"class":133},"    font-size",[109,128512,52612],{"class":126},[109,128514,2332],{"class":133},[109,128516,52667],{"class":122},[109,128518,137],{"class":126},[109,128520,128521],{"class":111,"line":161},[109,128522,128523],{"class":126},"  }\n",[109,128525,128526,128528,128530],{"class":111,"line":167},[109,128527,52960],{"class":126},[109,128529,1467],{"class":52475},[109,128531,52482],{"class":126},[19,128533,128534,27648],{},[23,128535,127815],{},[19,128537,78401,128538,128541,128542,128545],{},[106,128539,128540],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[106,128543,128544],{},"\u003Chead>","标签中",[19,128547,128548],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128550,128551],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[51,128553,128555],{"id":128554},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[99,128557,128559],{"className":128474,"code":128558,"language":128476,"meta":104,"style":104},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[106,128560,128561],{"__ignoreMap":104},[109,128562,128563,128565,128567,128569,128571,128574,128577,128579],{"class":111,"line":112},[109,128564,1320],{"class":126},[109,128566,19],{"class":52475},[109,128568,63801],{"class":211},[109,128570,130],{"class":126},[109,128572,128573],{"class":278},"\"color: red; font-size: 16px;\"",[109,128575,128576],{"class":126},">这是一个段落\u003C\u002F",[109,128578,19],{"class":52475},[109,128580,52482],{"class":126},[19,128582,128583,27648],{},[23,128584,127815],{},[19,128586,128587],{},"①style其实就是标签的属性",[19,128589,128590],{},"②在双引号中间，写法要符合css规范",[19,128592,128593],{},"③可以控制当前的标签设置样式",[19,128595,128596],{},"④书写繁琐，简单时才用",[19,128598,128599],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[51,128601,128603],{"id":128602},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128605,128606],{},"使用最多，单独建一个css文件，然后html引用",[19,128608,128609],{},"①css文件部分： style.css",[99,128611,128613],{"className":127727,"code":128612,"language":127729,"meta":104,"style":104},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[106,128614,128615,128620,128626,128636,128648],{"__ignoreMap":104},[109,128616,128617],{"class":111,"line":112},[109,128618,128619],{"class":115},"\u002F* style.css *\u002F\n",[109,128621,128622,128624],{"class":111,"line":119},[109,128623,10],{"class":52475},[109,128625,16745],{"class":126},[109,128627,128628,128630,128632,128634],{"class":111,"line":140},[109,128629,72080],{"class":133},[109,128631,52612],{"class":126},[109,128633,128503],{"class":133},[109,128635,137],{"class":126},[109,128637,128638,128640,128642,128644,128646],{"class":111,"line":154},[109,128639,71801],{"class":133},[109,128641,52612],{"class":126},[109,128643,2332],{"class":133},[109,128645,52667],{"class":122},[109,128647,137],{"class":126},[109,128649,128650],{"class":111,"line":161},[109,128651,742],{"class":126},[19,128653,128654],{},"②html部分",[99,128656,128658],{"className":128474,"code":128657,"language":128476,"meta":104,"style":104},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[106,128659,128660],{"__ignoreMap":104},[109,128661,128662,128664,128666,128668,128670,128672,128674,128676,128679],{"class":111,"line":112},[109,128663,1320],{"class":126},[109,128665,70180],{"class":52475},[109,128667,70183],{"class":211},[109,128669,130],{"class":126},[109,128671,70188],{"class":278},[109,128673,62232],{"class":211},[109,128675,130],{"class":126},[109,128677,128678],{"class":278},"\"style.css\"",[109,128680,52482],{"class":126},[19,128682,128683,128686],{},[106,128684,128685],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128688,128689],{},"ctrl+0回到页面原来大小",[14,128691,128693],{"id":128692},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[51,128695,128697],{"id":128696},"_721-快速生成html","7.2.1 快速生成html",[19,128699,128700,128701],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[106,128702,128703],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128705,128706],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128708,128709],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128711,128712],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128714,128715],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128717,128718],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128720,128721],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[99,128723,128725],{"className":128474,"code":128724,"language":128476,"meta":104,"style":104},"\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",[106,128726,128727,128732,128737,128742,128747,128752,128757,128762],{"__ignoreMap":104},[109,128728,128729],{"class":111,"line":112},[109,128730,128731],{"class":115},"\u003C!-- Emmet 语法示例 -->\n",[109,128733,128734],{"class":111,"line":119},[109,128735,128736],{"class":115},"\u003C!-- div*3        → 生成3个div -->\n",[109,128738,128739],{"class":111,"line":140},[109,128740,128741],{"class":115},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[109,128743,128744],{"class":111,"line":154},[109,128745,128746],{"class":115},"\u003C!-- div+p        → 兄弟div和p -->\n",[109,128748,128749],{"class":111,"line":161},[109,128750,128751],{"class":115},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[109,128753,128754],{"class":111,"line":167},[109,128755,128756],{"class":115},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[109,128758,128759],{"class":111,"line":185},[109,128760,128761],{"class":115},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[109,128763,128764],{"class":111,"line":201},[109,128765,128766],{"class":115},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[51,128768,128770],{"id":128769},"_722-快速生成css","7.2.2 快速生成css",[19,128772,128773],{},"简写开头",[19,128775,128776],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128778,128780],{"id":128779},"_73-css复合选择器","7.3 css复合选择器",[51,128782,128784],{"id":128783},"_731-后代选择器","7.3.1 后代选择器",[99,128786,128788],{"className":127727,"code":128787,"language":127729,"meta":104,"style":104},".parent .child {\n  color: blue;\n}\n",[106,128789,128790,128800,128810],{"__ignoreMap":104},[109,128791,128792,128795,128798],{"class":111,"line":112},[109,128793,128794],{"class":211},".parent",[109,128796,128797],{"class":211}," .child",[109,128799,16745],{"class":126},[109,128801,128802,128804,128806,128808],{"class":111,"line":119},[109,128803,72080],{"class":133},[109,128805,52612],{"class":126},[109,128807,128503],{"class":133},[109,128809,137],{"class":126},[109,128811,128812],{"class":111,"line":140},[109,128813,742],{"class":126},[19,128815,128816],{},"元素1 元素2 {样式声明}",[19,128818,128819],{},[23,128820,128821],{},"注意点:",[19,128823,128824],{},"①元素1和元素2中间用空格隔开",[19,128826,128827],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128829,128830],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128832,128833],{},"④元素1和元素2可以是任意基础选择器",[51,128835,128837],{"id":128836},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128839,128840],{},[23,128841,128821],{},[19,128843,128844],{},"①元素1和元素2中间用大于号隔开",[19,128846,128827],{},[19,128848,128849],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[51,128851,128853],{"id":128852},"_733-并集选择器","7.3.3 并集选择器",[19,128855,128856],{},"元素1，元素2 {样式声明}",[19,128858,128859],{},[23,128860,128821],{},[19,128862,128863],{},"①元素1和元素2中间用逗号隔开",[19,128865,128866],{},"②逗号可以理解为和的意思",[19,128868,128869],{},"③并集选择器通常用于集体声明",[51,128871,128873],{"id":128872},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128875,128876],{},[23,128877,128821],{},[19,128879,128880,128881,128883],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70180,128882],{},"－:visited－:hover－:active。",[19,128885,128886,128887,128890,128891,26915],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128888,128889],"hover",{}," 、 ",[128892,128893],"first-child",{},[19,128895,128896],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128898,128899],{},"link对没访问的进行设置",[19,128901,128902],{},"vistied对已访问的进行改变",[19,128904,128905],{},"hover鼠标经过就会变",[19,128907,128908],{},"active常按(点)就会变",[99,128910,128912],{"className":127727,"code":128911,"language":127729,"meta":104,"style":104},"\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",[106,128913,128914,128919,128928,128938,128948,128952,128961,128972,128976,128984,128994,129004,129008,129017,129028],{"__ignoreMap":104},[109,128915,128916],{"class":111,"line":112},[109,128917,128918],{"class":115},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[109,128920,128921,128923,128926],{"class":111,"line":119},[109,128922,1776],{"class":52475},[109,128924,128925],{"class":211},":link",[109,128927,16745],{"class":126},[109,128929,128930,128932,128934,128936],{"class":111,"line":140},[109,128931,72080],{"class":133},[109,128933,52612],{"class":126},[109,128935,63544],{"class":133},[109,128937,137],{"class":126},[109,128939,128940,128942,128944,128946],{"class":111,"line":154},[109,128941,71677],{"class":133},[109,128943,52612],{"class":126},[109,128945,55912],{"class":133},[109,128947,137],{"class":126},[109,128949,128950],{"class":111,"line":161},[109,128951,742],{"class":126},[109,128953,128954,128956,128959],{"class":111,"line":167},[109,128955,1776],{"class":52475},[109,128957,128958],{"class":211},":visited",[109,128960,16745],{"class":126},[109,128962,128963,128965,128967,128970],{"class":111,"line":185},[109,128964,72080],{"class":133},[109,128966,52612],{"class":126},[109,128968,128969],{"class":133},"purple",[109,128971,137],{"class":126},[109,128973,128974],{"class":111,"line":201},[109,128975,742],{"class":126},[109,128977,128978,128980,128982],{"class":111,"line":206},[109,128979,1776],{"class":52475},[109,128981,62115],{"class":211},[109,128983,16745],{"class":126},[109,128985,128986,128988,128990,128992],{"class":111,"line":218},[109,128987,72080],{"class":133},[109,128989,52612],{"class":126},[109,128991,56064],{"class":133},[109,128993,137],{"class":126},[109,128995,128996,128998,129000,129002],{"class":111,"line":223},[109,128997,71677],{"class":133},[109,128999,52612],{"class":126},[109,129001,128341],{"class":133},[109,129003,137],{"class":126},[109,129005,129006],{"class":111,"line":229},[109,129007,742],{"class":126},[109,129009,129010,129012,129015],{"class":111,"line":244},[109,129011,1776],{"class":52475},[109,129013,129014],{"class":211},":active",[109,129016,16745],{"class":126},[109,129018,129019,129021,129023,129026],{"class":111,"line":258},[109,129020,72080],{"class":133},[109,129022,52612],{"class":126},[109,129024,129025],{"class":133},"green",[109,129027,137],{"class":126},[109,129029,129030],{"class":111,"line":263},[109,129031,742],{"class":126},[51,129033,129035,129036,129039],{"id":129034},"_735-伪类选择器","7.3.5 ",[129037,129038],"focus",{},"伪类选择器",[19,129041,129042,129044,129045,129047],{},[129037,129043],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[106,129046,127788],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[99,129049,129051],{"className":127727,"code":129050,"language":127729,"meta":104,"style":104},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[106,129052,129053,129061,129072,129082],{"__ignoreMap":104},[109,129054,129055,129057,129059],{"class":111,"line":112},[109,129056,54996],{"class":52475},[109,129058,63075],{"class":211},[109,129060,16745],{"class":126},[109,129062,129063,129066,129068,129070],{"class":111,"line":119},[109,129064,129065],{"class":133},"  border-color",[109,129067,52612],{"class":126},[109,129069,56064],{"class":133},[109,129071,137],{"class":126},[109,129073,129074,129076,129078,129080],{"class":111,"line":140},[109,129075,71973],{"class":133},[109,129077,52612],{"class":126},[109,129079,55912],{"class":133},[109,129081,137],{"class":126},[109,129083,129084],{"class":111,"line":154},[109,129085,742],{"class":126},[1467,129087,129088],{},"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":104,"searchDepth":119,"depth":119,"links":129090},[129091,129096,129100],{"id":128466,"depth":119,"text":128467,"children":129092},[129093,129094,129095],{"id":128470,"depth":140,"text":128471},{"id":128554,"depth":140,"text":128555},{"id":128602,"depth":140,"text":128603},{"id":128692,"depth":119,"text":128693,"children":129097},[129098,129099],{"id":128696,"depth":140,"text":128697},{"id":128769,"depth":140,"text":128770},{"id":128779,"depth":119,"text":128780,"children":129101},[129102,129103,129104,129105,129106],{"id":128783,"depth":140,"text":128784},{"id":128836,"depth":140,"text":128837},{"id":128852,"depth":140,"text":128853},{"id":128872,"depth":140,"text":128873},{"id":129034,"depth":140,"text":129107},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128458,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129114,"title":129115,"body":129116,"description":24550,"extension":1476,"meta":131039,"navigation":157,"path":131040,"seo":131041,"stem":131042,"__hash__":131043},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129117,"toc":131013},[129118,129121,129125,129134,129138,129164,129169,129172,129175,129178,129181,129185,129188,129198,129206,129210,129245,129250,129253,129256,129259,129262,129266,129269,129278,129282,129295,129300,129303,129306,129309,129313,129316,129320,129323,129378,129381,129412,129415,129469,129473,129476,129642,129765,129768,129771,129774,129777,129781,129784,129788,129791,129794,129798,129801,129832,129859,129887,129890,129894,129920,129963,129967,130061,130064,130091,130094,130097,130100,130103,130106,130109,130112,130115,130118,130122,130179,130206,130210,130258,130262,130303,130305,130308,130311,130314,130317,130321,130413,130416,130419,130422,130426,130549,130750,130754,130758,130761,130764,130767,130771,130774,130777,130802,130805,130808,130811,130814,130817,130821,130829,130891,130894,130952,130955,130958,130961,130964,130967,130970,130973,131010],[10,129119,129115],{"id":129120},"_8-css显示模式与背景特性",[14,129122,129124],{"id":129123},"_81-css元素显示模式","8.1 css元素显示模式",[19,129126,129127,129128,129130,129131,129133],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[106,129129,127338],{},"自己占一行，比如一行可以放多个",[106,129132,127341],{},"，HTML 元素一般分为块元素和行内元素两种类型",[51,129135,129137],{"id":129136},"_811-块元素","8.1.1 块元素",[19,129139,129140,129141,129143,129144,1750,129147,1750,129149,1750,129151,1750,129154,1750,129157,129160,129161,129163],{},"常见的块元素有",[106,129142,127242],{},"~",[106,129145,129146],{},"\u003Ch6>",[106,129148,127268],{},[106,129150,127338],{},[106,129152,129153],{},"\u003Cul>",[106,129155,129156],{},"\u003Col>",[106,129158,129159],{},"\u003Cli>","等，其中 ",[106,129162,127338],{}," 标签是最典型的块元素",[19,129165,129166],{},[23,129167,129168],{},"块级元素的特点：",[19,129170,129171],{},"① 比较霸道，自己独占一行。",[19,129173,129174],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129176,129177],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129179,129180],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129182,129183],{},[23,129184,1574],{},[19,129186,129187],{},"①文字类的元素内不能使用块级元素",[19,129189,78424,129190,129192,129193,129195,129196],{},[106,129191,127268],{}," 标签主要用于存放文字，因此 ",[106,129194,127268],{}," 里面不能放块级元素，特别是不能放",[106,129197,127338],{},[19,129199,129200,129201,129143,129203,129205],{},"⑥同理， ",[106,129202,127242],{},[106,129204,129146],{},"等都是文字类块级标签，里面也不能放其他块级元素",[51,129207,129209],{"id":129208},"_812-行内元素","8.1.2 行内元素",[19,129211,129212,129213,1750,129215,1750,129218,1750,129221,1750,129224,1750,129227,1750,129230,1750,129233,1750,129236,1750,129239,129241,129242,129244],{},"常见的行内元素有 ",[106,129214,127500],{},[106,129216,129217],{},"\u003Cstrong>",[106,129219,129220],{},"\u003Cb>",[106,129222,129223],{},"\u003Cem>",[106,129225,129226],{},"\u003Ci>",[106,129228,129229],{},"\u003Cdel>",[106,129231,129232],{},"\u003Cs>",[106,129234,129235],{},"\u003Cins>",[106,129237,129238],{},"\u003Cu>",[106,129240,127341],{}," 等，其中 ",[106,129243,127341],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129246,129247],{},[23,129248,129249],{},"特点：",[19,129251,129252],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129254,129255],{},"② 高、宽直接设置是无效的。",[19,129257,129258],{},"③ 默认宽度就是它本身内容的宽度。",[19,129260,129261],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129263,129264],{},[23,129265,1574],{},[19,129267,129268],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129270,129271,129272,129274,129275,129277],{},"②特殊情况链接 ",[106,129273,127500],{}," 里面可以放块级元素，但是给 ",[106,129276,127500],{}," 转换一下块级模式最安全",[51,129279,129281],{"id":129280},"_813-行内块元素","8.1.3 行内块元素",[19,129283,129284,129285,1750,129288,1750,129291,129294],{},"在行内元素中有几个特殊的标签 —— ",[106,129286,129287],{},"\u003Cimg \u002F>",[106,129289,129290],{},"\u003Cinput \u002F>",[106,129292,129293],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129296,129297],{},[23,129298,129299],{},"行内块元素的特点：",[19,129301,129302],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129304,129305],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129307,129308],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[51,129310,129312],{"id":129311},"_814-总结","8.1.4 总结",[938,129314],{"style":127583,"src":129315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[51,129317,129319],{"id":129318},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129321,129322],{},"①转换为块元素：display:block;",[99,129324,129326],{"className":127727,"code":129325,"language":127729,"meta":104,"style":104},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[106,129327,129328,129333,129339,129350,129362,129374],{"__ignoreMap":104},[109,129329,129330],{"class":111,"line":112},[109,129331,129332],{"class":115},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[109,129334,129335,129337],{"class":111,"line":119},[109,129336,1776],{"class":52475},[109,129338,16745],{"class":126},[109,129340,129341,129344,129346,129348],{"class":111,"line":140},[109,129342,129343],{"class":133},"  display",[109,129345,52612],{"class":126},[109,129347,62044],{"class":133},[109,129349,137],{"class":126},[109,129351,129352,129354,129356,129358,129360],{"class":111,"line":154},[109,129353,71743],{"class":133},[109,129355,52612],{"class":126},[109,129357,1351],{"class":133},[109,129359,52667],{"class":122},[109,129361,137],{"class":126},[109,129363,129364,129366,129368,129370,129372],{"class":111,"line":161},[109,129365,71963],{"class":133},[109,129367,52612],{"class":126},[109,129369,1937],{"class":133},[109,129371,52667],{"class":122},[109,129373,137],{"class":126},[109,129375,129376],{"class":111,"line":167},[109,129377,742],{"class":126},[19,129379,129380],{},"②转换为行内元素：display:inline;",[99,129382,129384],{"className":127727,"code":129383,"language":127729,"meta":104,"style":104},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[106,129385,129386,129391,129397,129408],{"__ignoreMap":104},[109,129387,129388],{"class":111,"line":112},[109,129389,129390],{"class":115},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[109,129392,129393,129395],{"class":111,"line":119},[109,129394,52786],{"class":52475},[109,129396,16745],{"class":126},[109,129398,129399,129401,129403,129406],{"class":111,"line":140},[109,129400,129343],{"class":133},[109,129402,52612],{"class":126},[109,129404,129405],{"class":133},"inline",[109,129407,137],{"class":126},[109,129409,129410],{"class":111,"line":154},[109,129411,742],{"class":126},[19,129413,129414],{},"③转换为行内块：display:inline-block;",[99,129416,129418],{"className":127727,"code":129417,"language":127729,"meta":104,"style":104},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[106,129419,129420,129425,129431,129441,129453,129465],{"__ignoreMap":104},[109,129421,129422],{"class":111,"line":112},[109,129423,129424],{"class":115},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[109,129426,129427,129429],{"class":111,"line":119},[109,129428,109],{"class":52475},[109,129430,16745],{"class":126},[109,129432,129433,129435,129437,129439],{"class":111,"line":140},[109,129434,129343],{"class":133},[109,129436,52612],{"class":126},[109,129438,73558],{"class":133},[109,129440,137],{"class":126},[109,129442,129443,129445,129447,129449,129451],{"class":111,"line":154},[109,129444,71743],{"class":133},[109,129446,52612],{"class":126},[109,129448,2144],{"class":133},[109,129450,52667],{"class":122},[109,129452,137],{"class":126},[109,129454,129455,129457,129459,129461,129463],{"class":111,"line":161},[109,129456,71963],{"class":133},[109,129458,52612],{"class":126},[109,129460,2481],{"class":133},[109,129462,52667],{"class":122},[109,129464,137],{"class":126},[109,129466,129467],{"class":111,"line":167},[109,129468,742],{"class":126},[51,129470,129472],{"id":129471},"_816-小米侧边栏","8.1.6 小米侧边栏",[938,129474],{"style":127583,"src":129475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[99,129477,129479],{"className":128474,"code":129478,"language":128476,"meta":104,"style":104},"\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",[106,129480,129481,129486,129501,129520,129539,129558,129577,129596,129615,129634],{"__ignoreMap":104},[109,129482,129483],{"class":111,"line":112},[109,129484,129485],{"class":115},"\u003C!-- 小米侧边栏案例 -->\n",[109,129487,129488,129490,129492,129494,129496,129499],{"class":111,"line":119},[109,129489,1320],{"class":126},[109,129491,52786],{"class":52475},[109,129493,54661],{"class":211},[109,129495,130],{"class":126},[109,129497,129498],{"class":278},"\"sidebar\"",[109,129500,52482],{"class":126},[109,129502,129503,129505,129507,129509,129511,129513,129516,129518],{"class":111,"line":140},[109,129504,53319],{"class":126},[109,129506,1776],{"class":52475},[109,129508,62232],{"class":211},[109,129510,130],{"class":126},[109,129512,62237],{"class":278},[109,129514,129515],{"class":126},">手机 电话卡\u003C\u002F",[109,129517,1776],{"class":52475},[109,129519,52482],{"class":126},[109,129521,129522,129524,129526,129528,129530,129532,129535,129537],{"class":111,"line":154},[109,129523,53319],{"class":126},[109,129525,1776],{"class":52475},[109,129527,62232],{"class":211},[109,129529,130],{"class":126},[109,129531,62237],{"class":278},[109,129533,129534],{"class":126},">电视 盒子\u003C\u002F",[109,129536,1776],{"class":52475},[109,129538,52482],{"class":126},[109,129540,129541,129543,129545,129547,129549,129551,129554,129556],{"class":111,"line":161},[109,129542,53319],{"class":126},[109,129544,1776],{"class":52475},[109,129546,62232],{"class":211},[109,129548,130],{"class":126},[109,129550,62237],{"class":278},[109,129552,129553],{"class":126},">笔记本 平板\u003C\u002F",[109,129555,1776],{"class":52475},[109,129557,52482],{"class":126},[109,129559,129560,129562,129564,129566,129568,129570,129573,129575],{"class":111,"line":167},[109,129561,53319],{"class":126},[109,129563,1776],{"class":52475},[109,129565,62232],{"class":211},[109,129567,130],{"class":126},[109,129569,62237],{"class":278},[109,129571,129572],{"class":126},">出行 穿戴\u003C\u002F",[109,129574,1776],{"class":52475},[109,129576,52482],{"class":126},[109,129578,129579,129581,129583,129585,129587,129589,129592,129594],{"class":111,"line":185},[109,129580,53319],{"class":126},[109,129582,1776],{"class":52475},[109,129584,62232],{"class":211},[109,129586,130],{"class":126},[109,129588,62237],{"class":278},[109,129590,129591],{"class":126},">智能 路由器\u003C\u002F",[109,129593,1776],{"class":52475},[109,129595,52482],{"class":126},[109,129597,129598,129600,129602,129604,129606,129608,129611,129613],{"class":111,"line":201},[109,129599,53319],{"class":126},[109,129601,1776],{"class":52475},[109,129603,62232],{"class":211},[109,129605,130],{"class":126},[109,129607,62237],{"class":278},[109,129609,129610],{"class":126},">健康 儿童\u003C\u002F",[109,129612,1776],{"class":52475},[109,129614,52482],{"class":126},[109,129616,129617,129619,129621,129623,129625,129627,129630,129632],{"class":111,"line":206},[109,129618,53319],{"class":126},[109,129620,1776],{"class":52475},[109,129622,62232],{"class":211},[109,129624,130],{"class":126},[109,129626,62237],{"class":278},[109,129628,129629],{"class":126},">耳机 音响\u003C\u002F",[109,129631,1776],{"class":52475},[109,129633,52482],{"class":126},[109,129635,129636,129638,129640],{"class":111,"line":218},[109,129637,52960],{"class":126},[109,129639,52786],{"class":52475},[109,129641,52482],{"class":126},[99,129643,129645],{"className":127727,"code":129644,"language":127729,"meta":104,"style":104},".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",[106,129646,129647,129656,129666,129679,129691,129703,129715,129725,129736,129740,129750,129761],{"__ignoreMap":104},[109,129648,129649,129652,129654],{"class":111,"line":112},[109,129650,129651],{"class":211},".sidebar",[109,129653,2791],{"class":52475},[109,129655,16745],{"class":126},[109,129657,129658,129660,129662,129664],{"class":111,"line":119},[109,129659,129343],{"class":133},[109,129661,52612],{"class":126},[109,129663,62044],{"class":133},[109,129665,137],{"class":126},[109,129667,129668,129670,129672,129675,129677],{"class":111,"line":140},[109,129669,71743],{"class":133},[109,129671,52612],{"class":126},[109,129673,129674],{"class":133},"234",[109,129676,52667],{"class":122},[109,129678,137],{"class":126},[109,129680,129681,129683,129685,129687,129689],{"class":111,"line":154},[109,129682,71963],{"class":133},[109,129684,52612],{"class":126},[109,129686,1985],{"class":133},[109,129688,52667],{"class":122},[109,129690,137],{"class":126},[109,129692,129693,129695,129697,129699,129701],{"class":111,"line":161},[109,129694,128411],{"class":133},[109,129696,52612],{"class":126},[109,129698,1985],{"class":133},[109,129700,52667],{"class":122},[109,129702,137],{"class":126},[109,129704,129705,129707,129709,129711,129713],{"class":111,"line":167},[109,129706,71998],{"class":133},[109,129708,52612],{"class":126},[109,129710,2481],{"class":133},[109,129712,52667],{"class":122},[109,129714,137],{"class":126},[109,129716,129717,129719,129721,129723],{"class":111,"line":185},[109,129718,72080],{"class":133},[109,129720,52612],{"class":126},[109,129722,62017],{"class":133},[109,129724,137],{"class":126},[109,129726,129727,129729,129731,129734],{"class":111,"line":201},[109,129728,72053],{"class":133},[109,129730,52612],{"class":126},[109,129732,129733],{"class":133},"#55585a",[109,129735,137],{"class":126},[109,129737,129738],{"class":111,"line":206},[109,129739,742],{"class":126},[109,129741,129742,129744,129746,129748],{"class":111,"line":218},[109,129743,129651],{"class":211},[109,129745,2791],{"class":52475},[109,129747,62115],{"class":211},[109,129749,16745],{"class":126},[109,129751,129752,129754,129756,129759],{"class":111,"line":223},[109,129753,72053],{"class":133},[109,129755,52612],{"class":126},[109,129757,129758],{"class":133},"#ff6700",[109,129760,137],{"class":126},[109,129762,129763],{"class":111,"line":229},[109,129764,742],{"class":126},[938,129766],{"style":127583,"src":129767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129769,129770],{},"行高=盒子高度：实现文字的垂直居中",[19,129772,129773],{},"原理讲解：",[938,129775],{"style":127583,"src":129776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129778,129780],{"id":129779},"_82-css背景","8.2 css背景",[19,129782,129783],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[51,129785,129787],{"id":129786},"_821-背景颜色","8.2.1 背景颜色",[19,129789,129790],{},"background-color:颜色值;",[19,129792,129793],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[51,129795,129797],{"id":129796},"_822-背景图片","8.2.2 背景图片",[19,129799,129800],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[99,129802,129804],{"className":127727,"code":129803,"language":127729,"meta":104,"style":104},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[106,129805,129806,129812,129828],{"__ignoreMap":104},[109,129807,129808,129810],{"class":111,"line":112},[109,129809,52786],{"class":52475},[109,129811,16745],{"class":126},[109,129813,129814,129817,129819,129821,129823,129826],{"class":111,"line":119},[109,129815,129816],{"class":133},"  background-image",[109,129818,52612],{"class":126},[109,129820,62901],{"class":133},[109,129822,714],{"class":126},[109,129824,129825],{"class":6553},"images\u002Fbg.png",[109,129827,720],{"class":126},[109,129829,129830],{"class":111,"line":140},[109,129831,742],{"class":126},[1677,129833,129834,129843],{},[1680,129835,129836],{},[1683,129837,129838,129841],{},[1686,129839,129840],{"align":24910},"参数值",[1686,129842,103871],{"align":24910},[1723,129844,129845,129852],{},[1683,129846,129847,129849],{},[1728,129848,55912],{"align":24910},[1728,129850,129851],{"align":24910},"无背景图（默认的）",[1683,129853,129854,129856],{},[1728,129855,62901],{"align":24910},[1728,129857,129858],{"align":24910},"使用绝对或相对地址指定背景图像",[99,129860,129861],{"className":127727,"code":129803,"language":127729,"meta":104,"style":104},[106,129862,129863,129869,129883],{"__ignoreMap":104},[109,129864,129865,129867],{"class":111,"line":112},[109,129866,52786],{"class":52475},[109,129868,16745],{"class":126},[109,129870,129871,129873,129875,129877,129879,129881],{"class":111,"line":119},[109,129872,129816],{"class":133},[109,129874,52612],{"class":126},[109,129876,62901],{"class":133},[109,129878,714],{"class":126},[109,129880,129825],{"class":6553},[109,129882,720],{"class":126},[109,129884,129885],{"class":111,"line":140},[109,129886,742],{"class":126},[19,129888,129889],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[51,129891,129893],{"id":129892},"_823-背景平铺","8.2.3 背景平铺",[99,129895,129897],{"className":127727,"code":129896,"language":127729,"meta":104,"style":104},"div {\n  background-repeat: no-repeat;\n}\n",[106,129898,129899,129905,129916],{"__ignoreMap":104},[109,129900,129901,129903],{"class":111,"line":112},[109,129902,52786],{"class":52475},[109,129904,16745],{"class":126},[109,129906,129907,129910,129912,129914],{"class":111,"line":119},[109,129908,129909],{"class":133},"  background-repeat",[109,129911,52612],{"class":126},[109,129913,62911],{"class":133},[109,129915,137],{"class":126},[109,129917,129918],{"class":111,"line":140},[109,129919,742],{"class":126},[1677,129921,129922,129930],{},[1680,129923,129924],{},[1683,129925,129926,129928],{},[1686,129927,129840],{"align":24910},[1686,129929,103871],{"align":24910},[1723,129931,129932,129940,129947,129955],{},[1683,129933,129934,129937],{},[1728,129935,129936],{"align":24910},"repeat",[1728,129938,129939],{"align":24910},"背景图像在纵向和横向上平铺（默认的）",[1683,129941,129942,129944],{},[1728,129943,62911],{"align":24910},[1728,129945,129946],{"align":24910},"背景图像不平铺",[1683,129948,129949,129952],{},[1728,129950,129951],{"align":24910},"repeat-x",[1728,129953,129954],{"align":24910},"背景图像在横向上平铺",[1683,129956,129957,129960],{},[1728,129958,129959],{"align":24910},"repeat-y",[1728,129961,129962],{"align":24910},"背景图像在纵向平铺",[51,129964,129966],{"id":129965},"_824-背景图片位置","8.2.4 背景图片位置",[99,129968,129970],{"className":127727,"code":129969,"language":127729,"meta":104,"style":104},"\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",[106,129971,129972,129977,129983,129997,130001,130006,130012,130028,130032,130037,130043,130057],{"__ignoreMap":104},[109,129973,129974],{"class":111,"line":112},[109,129975,129976],{"class":115},"\u002F* 方位名词 *\u002F\n",[109,129978,129979,129981],{"class":111,"line":119},[109,129980,52786],{"class":52475},[109,129982,16745],{"class":126},[109,129984,129985,129988,129990,129992,129995],{"class":111,"line":140},[109,129986,129987],{"class":133},"  background-position",[109,129989,52612],{"class":126},[109,129991,52767],{"class":133},[109,129993,129994],{"class":133}," top",[109,129996,137],{"class":126},[109,129998,129999],{"class":111,"line":154},[109,130000,742],{"class":126},[109,130002,130003],{"class":111,"line":161},[109,130004,130005],{"class":115},"\u002F* 精确单位 *\u002F\n",[109,130007,130008,130010],{"class":111,"line":167},[109,130009,52786],{"class":52475},[109,130011,16745],{"class":126},[109,130013,130014,130016,130018,130020,130022,130024,130026],{"class":111,"line":185},[109,130015,129987],{"class":133},[109,130017,52612],{"class":126},[109,130019,2232],{"class":133},[109,130021,52667],{"class":122},[109,130023,58679],{"class":133},[109,130025,52667],{"class":122},[109,130027,137],{"class":126},[109,130029,130030],{"class":111,"line":201},[109,130031,742],{"class":126},[109,130033,130034],{"class":111,"line":206},[109,130035,130036],{"class":115},"\u002F* 混合单位 *\u002F\n",[109,130038,130039,130041],{"class":111,"line":218},[109,130040,52786],{"class":52475},[109,130042,16745],{"class":126},[109,130044,130045,130047,130049,130051,130053,130055],{"class":111,"line":223},[109,130046,129987],{"class":133},[109,130048,52612],{"class":126},[109,130050,2232],{"class":133},[109,130052,52667],{"class":122},[109,130054,18317],{"class":133},[109,130056,137],{"class":126},[109,130058,130059],{"class":111,"line":229},[109,130060,742],{"class":126},[19,130062,130063],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1677,130065,130066,130074],{},[1680,130067,130068],{},[1683,130069,130070,130072],{},[1686,130071,129840],{"align":24910},[1686,130073,27044],{"align":24910},[1723,130075,130076,130083],{},[1683,130077,130078,130080],{},[1728,130079,53143],{"align":24910},[1728,130081,130082],{"align":24910},"百分数|由浮点数和单位标识符组成的长度值",[1683,130084,130085,130088],{},[1728,130086,130087],{"align":24910},"position",[1728,130089,130090],{"align":24910},"top|center|bottom|left|center|right 方位名词",[19,130092,130093],{},"其他说明：",[19,130095,130096],{},"①参数是方位名词",[19,130098,130099],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130101,130102],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130104,130105],{},"②参数是精确单位",[19,130107,130108],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130110,130111],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130113,130114],{},"③参数是混合单位",[19,130116,130117],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[51,130119,130121],{"id":130120},"_825-背景图片固定","8.2.5 背景图片固定",[99,130123,130125],{"className":127727,"code":130124,"language":127729,"meta":104,"style":104},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[106,130126,130127,130132,130138,130150,130154,130159,130165,130175],{"__ignoreMap":104},[109,130128,130129],{"class":111,"line":112},[109,130130,130131],{"class":115},"\u002F* 背景滚动（默认） *\u002F\n",[109,130133,130134,130136],{"class":111,"line":119},[109,130135,52786],{"class":52475},[109,130137,16745],{"class":126},[109,130139,130140,130143,130145,130148],{"class":111,"line":140},[109,130141,130142],{"class":133},"  background-attachment",[109,130144,52612],{"class":126},[109,130146,130147],{"class":133},"scroll",[109,130149,137],{"class":126},[109,130151,130152],{"class":111,"line":154},[109,130153,742],{"class":126},[109,130155,130156],{"class":111,"line":161},[109,130157,130158],{"class":115},"\u002F* 背景固定 *\u002F\n",[109,130160,130161,130163],{"class":111,"line":167},[109,130162,52786],{"class":52475},[109,130164,16745],{"class":126},[109,130166,130167,130169,130171,130173],{"class":111,"line":185},[109,130168,130142],{"class":133},[109,130170,52612],{"class":126},[109,130172,87408],{"class":133},[109,130174,137],{"class":126},[109,130176,130177],{"class":111,"line":201},[109,130178,742],{"class":126},[1677,130180,130181,130190],{},[1680,130182,130183],{},[1683,130184,130185,130188],{},[1686,130186,130187],{"align":24910},"参数",[1686,130189,103871],{"align":24910},[1723,130191,130192,130199],{},[1683,130193,130194,130196],{},[1728,130195,130147],{"align":24910},[1728,130197,130198],{"align":24910},"背景图像是随对象内容滚动",[1683,130200,130201,130203],{},[1728,130202,87408],{"align":24910},[1728,130204,130205],{"align":24910},"背景图像固定",[51,130207,130209],{"id":130208},"_826-背景样式合写","8.2.6 背景样式合写",[99,130211,130213],{"className":127727,"code":130212,"language":127729,"meta":104,"style":104},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[106,130214,130215,130220,130226,130254],{"__ignoreMap":104},[109,130216,130217],{"class":111,"line":112},[109,130218,130219],{"class":115},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[109,130221,130222,130224],{"class":111,"line":119},[109,130223,52786],{"class":52475},[109,130225,16745],{"class":126},[109,130227,130228,130230,130232,130234,130237,130239,130241,130243,130245,130248,130250,130252],{"class":111,"line":140},[109,130229,71786],{"class":133},[109,130231,52612],{"class":126},[109,130233,62017],{"class":133},[109,130235,130236],{"class":133}," url",[109,130238,714],{"class":126},[109,130240,129825],{"class":6553},[109,130242,14887],{"class":126},[109,130244,62911],{"class":133},[109,130246,130247],{"class":133}," fixed",[109,130249,18317],{"class":133},[109,130251,129994],{"class":133},[109,130253,137],{"class":126},[109,130255,130256],{"class":111,"line":154},[109,130257,742],{"class":126},[51,130259,130261],{"id":130260},"_827-背景色半透明","8.2.7 背景色半透明",[99,130263,130265],{"className":127727,"code":130264,"language":127729,"meta":104,"style":104},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[106,130266,130267,130273,130299],{"__ignoreMap":104},[109,130268,130269,130271],{"class":111,"line":112},[109,130270,52786],{"class":52475},[109,130272,16745],{"class":126},[109,130274,130275,130277,130279,130281,130283,130285,130287,130289,130291,130293,130295,130297],{"class":111,"line":119},[109,130276,71786],{"class":133},[109,130278,52612],{"class":126},[109,130280,56285],{"class":133},[109,130282,714],{"class":126},[109,130284,1314],{"class":133},[109,130286,13608],{"class":126},[109,130288,1314],{"class":133},[109,130290,13608],{"class":126},[109,130292,1314],{"class":133},[109,130294,13608],{"class":126},[109,130296,101696],{"class":133},[109,130298,720],{"class":126},[109,130300,130301],{"class":111,"line":140},[109,130302,742],{"class":126},[19,130304,100571],{},[19,130306,130307],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130309,130310],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130312,130313],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130315,130316],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[51,130318,130320],{"id":130319},"_828-总结","8.2.8 总结",[1677,130322,130323,130334],{},[1680,130324,130325],{},[1683,130326,130327,130330,130332],{},[1686,130328,130329],{"align":24910},"属性",[1686,130331,103871],{"align":24910},[1686,130333,1691],{"align":24910},[1723,130335,130336,130347,130358,130369,130380,130391,130402],{},[1683,130337,130338,130341,130344],{},[1728,130339,130340],{"align":24910},"background-color",[1728,130342,130343],{"align":24910},"背景颜色",[1728,130345,130346],{"align":24910},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1683,130348,130349,130352,130355],{},[1728,130350,130351],{"align":24910},"background-image",[1728,130353,130354],{"align":24910},"背景图片",[1728,130356,130357],{"align":24910},"url(图片路径)",[1683,130359,130360,130363,130366],{},[1728,130361,130362],{"align":24910},"background-repeat",[1728,130364,130365],{"align":24910},"是否平铺",[1728,130367,130368],{"align":24910},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1683,130370,130371,130374,130377],{},[1728,130372,130373],{"align":24910},"background-position",[1728,130375,130376],{"align":24910},"背景位置",[1728,130378,130379],{"align":24910},"length\u002Fposition 分别是x和y坐标",[1683,130381,130382,130385,130388],{},[1728,130383,130384],{"align":24910},"background-attachment",[1728,130386,130387],{"align":24910},"背景附着",[1728,130389,130390],{"align":24910},"scroll(背景滚动) \u002Ffixed (背景固定)",[1683,130392,130393,130396,130399],{},[1728,130394,130395],{"align":24910},"背景简写",[1728,130397,130398],{"align":24910},"书写更简单",[1728,130400,130401],{"align":24910},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1683,130403,130404,130407,130410],{},[1728,130405,130406],{"align":24910},"背景半透明",[1728,130408,130409],{"align":24910},"背景颜色半透明",[1728,130411,130412],{"align":24910},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130414,130415],{},"颜色渐变：",[938,130417],{"style":127583,"src":130418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[938,130420],{"style":127583,"src":130421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[51,130423,130425],{"id":130424},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[99,130427,130429],{"className":128474,"code":130428,"language":128476,"meta":104,"style":104},"\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",[106,130430,130431,130446,130465,130484,130503,130522,130541],{"__ignoreMap":104},[109,130432,130433,130435,130437,130439,130441,130444],{"class":111,"line":112},[109,130434,1320],{"class":126},[109,130436,52786],{"class":52475},[109,130438,54661],{"class":211},[109,130440,130],{"class":126},[109,130442,130443],{"class":278},"\"nav\"",[109,130445,52482],{"class":126},[109,130447,130448,130450,130452,130454,130456,130458,130461,130463],{"class":111,"line":119},[109,130449,53319],{"class":126},[109,130451,1776],{"class":52475},[109,130453,62232],{"class":211},[109,130455,130],{"class":126},[109,130457,62237],{"class":278},[109,130459,130460],{"class":126},">五彩导航1\u003C\u002F",[109,130462,1776],{"class":52475},[109,130464,52482],{"class":126},[109,130466,130467,130469,130471,130473,130475,130477,130480,130482],{"class":111,"line":140},[109,130468,53319],{"class":126},[109,130470,1776],{"class":52475},[109,130472,62232],{"class":211},[109,130474,130],{"class":126},[109,130476,62237],{"class":278},[109,130478,130479],{"class":126},">五彩导航2\u003C\u002F",[109,130481,1776],{"class":52475},[109,130483,52482],{"class":126},[109,130485,130486,130488,130490,130492,130494,130496,130499,130501],{"class":111,"line":154},[109,130487,53319],{"class":126},[109,130489,1776],{"class":52475},[109,130491,62232],{"class":211},[109,130493,130],{"class":126},[109,130495,62237],{"class":278},[109,130497,130498],{"class":126},">五彩导航3\u003C\u002F",[109,130500,1776],{"class":52475},[109,130502,52482],{"class":126},[109,130504,130505,130507,130509,130511,130513,130515,130518,130520],{"class":111,"line":161},[109,130506,53319],{"class":126},[109,130508,1776],{"class":52475},[109,130510,62232],{"class":211},[109,130512,130],{"class":126},[109,130514,62237],{"class":278},[109,130516,130517],{"class":126},">五彩导航4\u003C\u002F",[109,130519,1776],{"class":52475},[109,130521,52482],{"class":126},[109,130523,130524,130526,130528,130530,130532,130534,130537,130539],{"class":111,"line":167},[109,130525,53319],{"class":126},[109,130527,1776],{"class":52475},[109,130529,62232],{"class":211},[109,130531,130],{"class":126},[109,130533,62237],{"class":278},[109,130535,130536],{"class":126},">五彩导航5\u003C\u002F",[109,130538,1776],{"class":52475},[109,130540,52482],{"class":126},[109,130542,130543,130545,130547],{"class":111,"line":185},[109,130544,52960],{"class":126},[109,130546,52786],{"class":52475},[109,130548,52482],{"class":126},[99,130550,130552],{"className":127727,"code":130551,"language":127729,"meta":104,"style":104},".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",[106,130553,130554,130563,130573,130585,130597,130607,130619,130629,130633,130658,130681,130704,130727],{"__ignoreMap":104},[109,130555,130556,130559,130561],{"class":111,"line":112},[109,130557,130558],{"class":211},".nav",[109,130560,2791],{"class":52475},[109,130562,16745],{"class":126},[109,130564,130565,130567,130569,130571],{"class":111,"line":119},[109,130566,129343],{"class":133},[109,130568,52612],{"class":126},[109,130570,73558],{"class":133},[109,130572,137],{"class":126},[109,130574,130575,130577,130579,130581,130583],{"class":111,"line":140},[109,130576,71743],{"class":133},[109,130578,52612],{"class":126},[109,130580,2349],{"class":133},[109,130582,52667],{"class":122},[109,130584,137],{"class":126},[109,130586,130587,130589,130591,130593,130595],{"class":111,"line":154},[109,130588,71963],{"class":133},[109,130590,52612],{"class":126},[109,130592,2388],{"class":133},[109,130594,52667],{"class":122},[109,130596,137],{"class":126},[109,130598,130599,130601,130603,130605],{"class":111,"line":161},[109,130600,71701],{"class":133},[109,130602,52612],{"class":126},[109,130604,52767],{"class":133},[109,130606,137],{"class":126},[109,130608,130609,130611,130613,130615,130617],{"class":111,"line":167},[109,130610,128411],{"class":133},[109,130612,52612],{"class":126},[109,130614,2388],{"class":133},[109,130616,52667],{"class":122},[109,130618,137],{"class":126},[109,130620,130621,130623,130625,130627],{"class":111,"line":185},[109,130622,72080],{"class":133},[109,130624,52612],{"class":126},[109,130626,62017],{"class":133},[109,130628,137],{"class":126},[109,130630,130631],{"class":111,"line":201},[109,130632,742],{"class":126},[109,130634,130635,130637,130639,130642,130644,130646,130649,130651,130653,130655],{"class":111,"line":206},[109,130636,130558],{"class":211},[109,130638,2791],{"class":52475},[109,130640,130641],{"class":211},":nth-child",[109,130643,714],{"class":126},[109,130645,1755],{"class":133},[109,130647,130648],{"class":126},") { ",[109,130650,130340],{"class":133},[109,130652,52612],{"class":126},[109,130654,129758],{"class":133},[109,130656,130657],{"class":126},"; }\n",[109,130659,130660,130662,130664,130666,130668,130670,130672,130674,130676,130679],{"class":111,"line":218},[109,130661,130558],{"class":211},[109,130663,2791],{"class":52475},[109,130665,130641],{"class":211},[109,130667,714],{"class":126},[109,130669,1618],{"class":133},[109,130671,130648],{"class":126},[109,130673,130340],{"class":133},[109,130675,52612],{"class":126},[109,130677,130678],{"class":133},"#ff0000",[109,130680,130657],{"class":126},[109,130682,130683,130685,130687,130689,130691,130693,130695,130697,130699,130702],{"class":111,"line":223},[109,130684,130558],{"class":211},[109,130686,2791],{"class":52475},[109,130688,130641],{"class":211},[109,130690,714],{"class":126},[109,130692,1612],{"class":133},[109,130694,130648],{"class":126},[109,130696,130340],{"class":133},[109,130698,52612],{"class":126},[109,130700,130701],{"class":133},"#00a4ff",[109,130703,130657],{"class":126},[109,130705,130706,130708,130710,130712,130714,130716,130718,130720,130722,130725],{"class":111,"line":229},[109,130707,130558],{"class":211},[109,130709,2791],{"class":52475},[109,130711,130641],{"class":211},[109,130713,714],{"class":126},[109,130715,1831],{"class":133},[109,130717,130648],{"class":126},[109,130719,130340],{"class":133},[109,130721,52612],{"class":126},[109,130723,130724],{"class":133},"#ff00ff",[109,130726,130657],{"class":126},[109,130728,130729,130731,130733,130735,130737,130739,130741,130743,130745,130748],{"class":111,"line":244},[109,130730,130558],{"class":211},[109,130732,2791],{"class":52475},[109,130734,130641],{"class":211},[109,130736,714],{"class":126},[109,130738,1856],{"class":133},[109,130740,130648],{"class":126},[109,130742,130340],{"class":133},[109,130744,52612],{"class":126},[109,130746,130747],{"class":133},"#00ff00",[109,130749,130657],{"class":126},[14,130751,130753],{"id":130752},"_83-css三大特性","8.3 css三大特性",[51,130755,130757],{"id":130756},"_831-层叠性","8.3.1 层叠性",[19,130759,130760],{},"为了解决样式冲突问题",[19,130762,130763],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130765,130766],{},"   ②样式不冲突，不会层叠",[51,130768,130770],{"id":130769},"_832-继承性","8.3.2 继承性",[19,130772,130773],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130775,130776],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[99,130778,130780],{"className":127727,"code":130779,"language":127729,"meta":104,"style":104},"p {\n  color: #333;\n}\n",[106,130781,130782,130788,130798],{"__ignoreMap":104},[109,130783,130784,130786],{"class":111,"line":112},[109,130785,19],{"class":52475},[109,130787,16745],{"class":126},[109,130789,130790,130792,130794,130796],{"class":111,"line":119},[109,130791,72080],{"class":133},[109,130793,52612],{"class":126},[109,130795,63544],{"class":133},[109,130797,137],{"class":126},[109,130799,130800],{"class":111,"line":140},[109,130801,742],{"class":126},[938,130803],{"style":127583,"src":130804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130806,130807],{},"解释：①行高可以跟单位也可以不跟单位",[19,130809,130810],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130812,130813],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130815,130816],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[51,130818,130820],{"id":130819},"_833-优先级","8.3.3 优先级",[765,130822,130823,130826],{},[30,130824,130825],{},"选择器相同，则执行层叠性",[30,130827,130828],{},"选择器不同，则根据选择器权重执行",[1677,130830,130831,130841],{},[1680,130832,130833],{},[1683,130834,130835,130838],{},[1686,130836,130837],{"align":24910},"选择器",[1686,130839,130840],{"align":24910},"选择器权重",[1723,130842,130843,130851,130859,130867,130875,130883],{},[1683,130844,130845,130848],{},[1728,130846,130847],{"align":24910},"继承 或者*",[1728,130849,130850],{"align":24910},"0，0，0，0",[1683,130852,130853,130856],{},[1728,130854,130855],{"align":24910},"标签选择器",[1728,130857,130858],{"align":24910},"0，0，0，1",[1683,130860,130861,130864],{},[1728,130862,130863],{"align":24910},"类选择器，伪类选择器",[1728,130865,130866],{"align":24910},"0，0，1，0",[1683,130868,130869,130872],{},[1728,130870,130871],{"align":24910},"ID选择器",[1728,130873,130874],{"align":24910},"0，1，0，0",[1683,130876,130877,130880],{},[1728,130878,130879],{"align":24910},"行内样式",[1728,130881,130882],{"align":24910},"1，0，0，0",[1683,130884,130885,130888],{},[1728,130886,130887],{"align":24910},"！important",[1728,130889,130890],{"align":24910},"无穷大",[19,130892,130893],{},"! important用法：",[99,130895,130897],{"className":127727,"code":130896,"language":127729,"meta":104,"style":104},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[106,130898,130899,130904,130910,130923,130927,130932,130938,130948],{"__ignoreMap":104},[109,130900,130901],{"class":111,"line":112},[109,130902,130903],{"class":115},"\u002F* !important 拥有最高优先级 *\u002F\n",[109,130905,130906,130908],{"class":111,"line":119},[109,130907,52786],{"class":52475},[109,130909,16745],{"class":126},[109,130911,130912,130914,130916,130918,130921],{"class":111,"line":140},[109,130913,72080],{"class":133},[109,130915,52612],{"class":126},[109,130917,52820],{"class":133},[109,130919,130920],{"class":122}," !important",[109,130922,137],{"class":126},[109,130924,130925],{"class":111,"line":154},[109,130926,742],{"class":126},[109,130928,130929],{"class":111,"line":161},[109,130930,130931],{"class":115},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[109,130933,130934,130936],{"class":111,"line":167},[109,130935,52786],{"class":52475},[109,130937,16745],{"class":126},[109,130939,130940,130942,130944,130946],{"class":111,"line":185},[109,130941,72080],{"class":133},[109,130943,52612],{"class":126},[109,130945,58596],{"class":133},[109,130947,137],{"class":126},[109,130949,130950],{"class":111,"line":201},[109,130951,742],{"class":126},[19,130953,130954],{},"优先级注意点：",[19,130956,130957],{},"①权重是有4组数字组成,但是不会有进位",[19,130959,130960],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130962,130963],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130965,130966],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130968,130969],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130971,130972],{},"⑥复合选择器",[1677,130974,130975,130985],{},[1680,130976,130977],{},[1683,130978,130979,130982],{},[1686,130980,130981],{"align":24910},"div ul li",[1686,130983,130984],{"align":24910},"0,0,0,3",[1723,130986,130987,130995,131003],{},[1683,130988,130989,130992],{},[1728,130990,130991],{"align":24910},".nav ul li",[1728,130993,130994],{"align":24910},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1683,130996,130997,131000],{},[1728,130998,130999],{"align":24910},"a:hover",[1728,131001,131002],{"align":24910},"0,0,1,1",[1683,131004,131005,131008],{},[1728,131006,131007],{"align":24910},".nav a",[1728,131009,131002],{"align":24910},[1467,131011,131012],{},"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":104,"searchDepth":119,"depth":119,"links":131014},[131015,131023,131034],{"id":129123,"depth":119,"text":129124,"children":131016},[131017,131018,131019,131020,131021,131022],{"id":129136,"depth":140,"text":129137},{"id":129208,"depth":140,"text":129209},{"id":129280,"depth":140,"text":129281},{"id":129311,"depth":140,"text":129312},{"id":129318,"depth":140,"text":129319},{"id":129471,"depth":140,"text":129472},{"id":129779,"depth":119,"text":129780,"children":131024},[131025,131026,131027,131028,131029,131030,131031,131032,131033],{"id":129786,"depth":140,"text":129787},{"id":129796,"depth":140,"text":129797},{"id":129892,"depth":140,"text":129893},{"id":129965,"depth":140,"text":129966},{"id":130120,"depth":140,"text":130121},{"id":130208,"depth":140,"text":130209},{"id":130260,"depth":140,"text":130261},{"id":130319,"depth":140,"text":130320},{"id":130424,"depth":140,"text":130425},{"id":130752,"depth":119,"text":130753,"children":131035},[131036,131037,131038],{"id":130756,"depth":140,"text":130757},{"id":130769,"depth":140,"text":130770},{"id":130819,"depth":140,"text":130820},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129115,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131045,"title":131046,"body":131047,"description":24550,"extension":1476,"meta":132637,"navigation":157,"path":132638,"seo":132639,"stem":132640,"__hash__":132641},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131048,"toc":132616},[131049,131052,131056,131059,131062,131065,131068,131071,131074,131077,131081,131089,131126,131162,131165,131179,131184,131218,131221,131314,131319,131322,131352,131355,131360,131368,131372,131379,131425,131469,131474,131477,131480,131483,131486,131489,131492,131494,131497,131501,131506,131550,131555,131558,131561,131598,131603,131606,131609,131612,131615,131647,131650,131653,131656,131688,131691,131694,131697,131701,131704,131736,131739,131743,131763,131766,131774,131777,131781,131786,131789,131821,131826,131829,131867,131871,131876,131879,131882,131913,131916,131933,131938,131990,132050,132055,132109,132147,132151,132155,132158,132162,132170,132173,132175,132186,132191,132239,132273,132276,132279,132282,132285,132329,132332,132335,132338,132341,132344,132347,132391,132394,132397,132400,132403,132406,132409,132415,132418,132462,132465,132468,132471,132474,132477,132521,132524,132526,132529,132533,132537,132575,132579,132582,132585,132589,132597,132601,132604,132607,132610,132613],[10,131050,131046],{"id":131051},"_9-css盒模型浮动与切图",[14,131053,131055],{"id":131054},"_91-盒子模型","9.1 盒子模型",[19,131057,131058],{},"利用盒子来设计网页",[19,131060,131061],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131063,131064],{},"网页布局设置：",[19,131066,131067],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131069,131070],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131072,131073],{},"③往盒子里装内容",[938,131075],{"style":127583,"src":131076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[51,131078,131080],{"id":131079},"_911-边框border","9.1.1 边框（border）",[765,131082,131083,131086],{},[30,131084,131085],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[30,131087,131088],{},"语法",[99,131090,131092],{"className":127727,"code":131091,"language":127729,"meta":104,"style":104},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[106,131093,131094,131099,131105,131122],{"__ignoreMap":104},[109,131095,131096],{"class":111,"line":112},[109,131097,131098],{"class":115},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[109,131100,131101,131103],{"class":111,"line":119},[109,131102,52786],{"class":52475},[109,131104,16745],{"class":126},[109,131106,131107,131109,131111,131113,131115,131117,131120],{"class":111,"line":140},[109,131108,72071],{"class":133},[109,131110,52612],{"class":126},[109,131112,1755],{"class":133},[109,131114,52667],{"class":122},[109,131116,52696],{"class":133},[109,131118,131119],{"class":133}," #ccc",[109,131121,137],{"class":126},[109,131123,131124],{"class":111,"line":154},[109,131125,742],{"class":126},[1677,131127,131128,131136],{},[1680,131129,131130],{},[1683,131131,131132,131134],{},[1686,131133,130329],{"align":24910},[1686,131135,103871],{"align":24910},[1723,131137,131138,131146,131154],{},[1683,131139,131140,131143],{},[1728,131141,131142],{"align":24910},"border-width",[1728,131144,131145],{"align":24910},"定义边框粗细，单位是px",[1683,131147,131148,131151],{},[1728,131149,131150],{"align":24910},"border-style",[1728,131152,131153],{"align":24910},"边框的样式",[1683,131155,131156,131159],{},[1728,131157,131158],{"align":24910},"border-color",[1728,131160,131161],{"align":24910},"边框的颜色",[19,131163,131164],{},"边框样式 border-style 可以设置如下值：",[27,131166,131167,131170,131173,131176],{},[30,131168,131169],{},"none：没有边框即忽略所有边框的宽度（默认值）",[30,131171,131172],{},"solid：边框为单实线(最为常用的)",[30,131174,131175],{},"dashed：边框为虚线",[30,131177,131178],{},"dotted：边框为点线",[765,131180,131181],{"start":140},[30,131182,131183],{},"边框的合写分写",[99,131185,131186],{"className":127727,"code":131091,"language":127729,"meta":104,"style":104},[106,131187,131188,131192,131198,131214],{"__ignoreMap":104},[109,131189,131190],{"class":111,"line":112},[109,131191,131098],{"class":115},[109,131193,131194,131196],{"class":111,"line":119},[109,131195,52786],{"class":52475},[109,131197,16745],{"class":126},[109,131199,131200,131202,131204,131206,131208,131210,131212],{"class":111,"line":140},[109,131201,72071],{"class":133},[109,131203,52612],{"class":126},[109,131205,1755],{"class":133},[109,131207,52667],{"class":122},[109,131209,52696],{"class":133},[109,131211,131119],{"class":133},[109,131213,137],{"class":126},[109,131215,131216],{"class":111,"line":154},[109,131217,742],{"class":126},[19,131219,131220],{},"边框分开写法：",[99,131222,131224],{"className":127727,"code":131223,"language":127729,"meta":104,"style":104},"\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",[106,131225,131226,131231,131237,131255,131273,131292,131310],{"__ignoreMap":104},[109,131227,131228],{"class":111,"line":112},[109,131229,131230],{"class":115},"\u002F* 边框分开写法 *\u002F\n",[109,131232,131233,131235],{"class":111,"line":119},[109,131234,52786],{"class":52475},[109,131236,16745],{"class":126},[109,131238,131239,131242,131244,131246,131248,131250,131253],{"class":111,"line":140},[109,131240,131241],{"class":133},"  border-top",[109,131243,52612],{"class":126},[109,131245,1755],{"class":133},[109,131247,52667],{"class":122},[109,131249,52696],{"class":133},[109,131251,131252],{"class":133}," #000",[109,131254,137],{"class":126},[109,131256,131257,131260,131262,131264,131266,131268,131271],{"class":111,"line":154},[109,131258,131259],{"class":133},"  border-right",[109,131261,52612],{"class":126},[109,131263,1618],{"class":133},[109,131265,52667],{"class":122},[109,131267,63416],{"class":133},[109,131269,131270],{"class":133}," #333",[109,131272,137],{"class":126},[109,131274,131275,131278,131280,131282,131284,131287,131290],{"class":111,"line":161},[109,131276,131277],{"class":133},"  border-bottom",[109,131279,52612],{"class":126},[109,131281,1612],{"class":133},[109,131283,52667],{"class":122},[109,131285,131286],{"class":133}," dotted",[109,131288,131289],{"class":133}," #666",[109,131291,137],{"class":126},[109,131293,131294,131297,131299,131301,131303,131305,131308],{"class":111,"line":167},[109,131295,131296],{"class":133},"  border-left",[109,131298,52612],{"class":126},[109,131300,1755],{"class":133},[109,131302,52667],{"class":122},[109,131304,52696],{"class":133},[109,131306,131307],{"class":133}," #999",[109,131309,137],{"class":126},[109,131311,131312],{"class":111,"line":185},[109,131313,742],{"class":126},[765,131315,131316],{"start":154},[30,131317,131318],{},"表格的细线边框",[19,131320,131321],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[99,131323,131325],{"className":127727,"code":131324,"language":127729,"meta":104,"style":104},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[106,131326,131327,131332,131338,131348],{"__ignoreMap":104},[109,131328,131329],{"class":111,"line":112},[109,131330,131331],{"class":115},"\u002F* 表格细线边框合并 *\u002F\n",[109,131333,131334,131336],{"class":111,"line":119},[109,131335,1677],{"class":52475},[109,131337,16745],{"class":126},[109,131339,131340,131342,131344,131346],{"class":111,"line":140},[109,131341,71753],{"class":133},[109,131343,52612],{"class":126},[109,131345,66210],{"class":133},[109,131347,137],{"class":126},[109,131349,131350],{"class":111,"line":154},[109,131351,742],{"class":126},[19,131353,131354],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[765,131356,131357],{"start":161},[30,131358,131359],{},"解决边框额外增加盒子的实际大小的方法：",[27,131361,131362,131365],{},[30,131363,131364],{},"测量盒子大小的时候,不量边框",[30,131366,131367],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[51,131369,131371],{"id":131370},"_912-内边距","9.1.2 内边距",[765,131373,131374,131377],{},[30,131375,131376],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[30,131378,131088],{},[1677,131380,131381,131391],{},[1680,131382,131383],{},[1683,131384,131385,131388],{},[1686,131386,131387],{"align":24910},"值的个数",[1686,131389,131390],{"align":24910},"表达意思",[1723,131392,131393,131401,131409,131417],{},[1683,131394,131395,131398],{},[1728,131396,131397],{"align":24910},"padding: 5px;",[1728,131399,131400],{"align":24910},"1个值，代表上下左右都有5个元素",[1683,131402,131403,131406],{},[1728,131404,131405],{"align":24910},"padding: 5px 10px;",[1728,131407,131408],{"align":24910},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1683,131410,131411,131414],{},[1728,131412,131413],{"align":24910},"padding: 5px 10px 20px;",[1728,131415,131416],{"align":24910},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1683,131418,131419,131422],{},[1728,131420,131421],{"align":24910},"padding: 5px 10px 20px 30px;",[1728,131423,131424],{"align":24910},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1677,131426,131427,131435],{},[1680,131428,131429],{},[1683,131430,131431,131433],{},[1686,131432,130329],{"align":24910},[1686,131434,103871],{"align":24910},[1723,131436,131437,131445,131453,131461],{},[1683,131438,131439,131442],{},[1728,131440,131441],{"align":24910},"padding-left",[1728,131443,131444],{"align":24910},"左内边距",[1683,131446,131447,131450],{},[1728,131448,131449],{"align":24910},"padding-right",[1728,131451,131452],{"align":24910},"右内边距",[1683,131454,131455,131458],{},[1728,131456,131457],{"align":24910},"padding-top",[1728,131459,131460],{"align":24910},"上内边距",[1683,131462,131463,131466],{},[1728,131464,131465],{"align":24910},"padding-bottom",[1728,131467,131468],{"align":24910},"下内边距",[765,131470,131471],{"start":140},[30,131472,131473],{},"内边距会影响盒子的实际大小",[19,131475,131476],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131478,131479],{},"①内容和边框有了距离，添加了内边距",[19,131481,131482],{},"②padding影响了盒子实际大小",[19,131484,131485],{},"内边距对盒子大小的影响：",[19,131487,131488],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131490,131491],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131493,96395],{},[19,131495,131496],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[51,131498,131500],{"id":131499},"_913-外边距","9.1.3 外边距",[765,131502,131503],{},[30,131504,131505],{},"控制盒子与盒子之间的距离",[1677,131507,131508,131516],{},[1680,131509,131510],{},[1683,131511,131512,131514],{},[1686,131513,130329],{"align":24910},[1686,131515,103871],{"align":24910},[1723,131517,131518,131526,131534,131542],{},[1683,131519,131520,131523],{},[1728,131521,131522],{"align":24910},"margin-left",[1728,131524,131525],{"align":24910},"左外边距",[1683,131527,131528,131531],{},[1728,131529,131530],{"align":24910},"margin-right",[1728,131532,131533],{"align":24910},"右外边距",[1683,131535,131536,131539],{},[1728,131537,131538],{"align":24910},"margin-top",[1728,131540,131541],{"align":24910},"上外边距",[1683,131543,131544,131547],{},[1728,131545,131546],{"align":24910},"margin-bottom",[1728,131548,131549],{"align":24910},"下外边距",[765,131551,131552],{"start":119},[30,131553,131554],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131556,131557],{},"①盒子必须指定了宽度（width）",[19,131559,131560],{},"②盒子左右的外边距都设置为 auto",[99,131562,131564],{"className":127727,"code":131563,"language":127729,"meta":104,"style":104},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[106,131565,131566,131571,131578,131594],{"__ignoreMap":104},[109,131567,131568],{"class":111,"line":112},[109,131569,131570],{"class":115},"\u002F* margin 复合写法（同上） *\u002F\n",[109,131572,131573,131576],{"class":111,"line":119},[109,131574,131575],{"class":211},".box",[109,131577,16745],{"class":126},[109,131579,131580,131582,131584,131586,131588,131591],{"class":111,"line":140},[109,131581,71645],{"class":133},[109,131583,52612],{"class":126},[109,131585,1314],{"class":133},[109,131587,52731],{"class":133},[109,131589,131590],{"class":126},";  ",[109,131592,131593],{"class":115},"\u002F* 块级盒子水平居中 *\u002F\n",[109,131595,131596],{"class":111,"line":154},[109,131597,742],{"class":126},[765,131599,131600],{"start":140},[30,131601,131602],{},"外边距塌陷问题",[19,131604,131605],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[938,131607],{"style":127583,"src":131608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131610,131611],{},"解决方案：",[19,131613,131614],{},"①可以为父亲元素定义上边距",[99,131616,131617],{"className":127727,"code":131563,"language":127729,"meta":104,"style":104},[106,131618,131619,131623,131629,131643],{"__ignoreMap":104},[109,131620,131621],{"class":111,"line":112},[109,131622,131570],{"class":115},[109,131624,131625,131627],{"class":111,"line":119},[109,131626,131575],{"class":211},[109,131628,16745],{"class":126},[109,131630,131631,131633,131635,131637,131639,131641],{"class":111,"line":140},[109,131632,71645],{"class":133},[109,131634,52612],{"class":126},[109,131636,1314],{"class":133},[109,131638,52731],{"class":133},[109,131640,131590],{"class":126},[109,131642,131593],{"class":115},[109,131644,131645],{"class":111,"line":154},[109,131646,742],{"class":126},[19,131648,131649],{},"②可以为父亲元素定义上内边距",[19,131651,131652],{},"③可以为父亲元素添加overflow:hidden",[938,131654],{"style":127583,"src":131655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[99,131657,131658],{"className":127727,"code":131563,"language":127729,"meta":104,"style":104},[106,131659,131660,131664,131670,131684],{"__ignoreMap":104},[109,131661,131662],{"class":111,"line":112},[109,131663,131570],{"class":115},[109,131665,131666,131668],{"class":111,"line":119},[109,131667,131575],{"class":211},[109,131669,16745],{"class":126},[109,131671,131672,131674,131676,131678,131680,131682],{"class":111,"line":140},[109,131673,71645],{"class":133},[109,131675,52612],{"class":126},[109,131677,1314],{"class":133},[109,131679,52731],{"class":133},[109,131681,131590],{"class":126},[109,131683,131593],{"class":115},[109,131685,131686],{"class":111,"line":154},[109,131687,742],{"class":126},[938,131689],{"style":127583,"src":131690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131692,131693],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131695,131696],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[51,131698,131700],{"id":131699},"_914-清除内外边距","9.1.4 清除内外边距",[19,131702,131703],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[99,131705,131706],{"className":127727,"code":131563,"language":127729,"meta":104,"style":104},[106,131707,131708,131712,131718,131732],{"__ignoreMap":104},[109,131709,131710],{"class":111,"line":112},[109,131711,131570],{"class":115},[109,131713,131714,131716],{"class":111,"line":119},[109,131715,131575],{"class":211},[109,131717,16745],{"class":126},[109,131719,131720,131722,131724,131726,131728,131730],{"class":111,"line":140},[109,131721,71645],{"class":133},[109,131723,52612],{"class":126},[109,131725,1314],{"class":133},[109,131727,52731],{"class":133},[109,131729,131590],{"class":126},[109,131731,131593],{"class":115},[109,131733,131734],{"class":111,"line":154},[109,131735,742],{"class":126},[19,131737,131738],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[51,131740,131742],{"id":131741},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[27,131744,131745,131748,131751,131754,131757,131760],{},[30,131746,131747],{},"文件→打开 ：可以打开我们要测量的图片",[30,131749,131750],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[30,131752,131753],{},"右击标尺，把里面的单位改为像素",[30,131755,131756],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[30,131758,131759],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[30,131761,131762],{},"用选区拖动 可以测量大小",[938,131764],{"style":127583,"src":131765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[27,131767,131768,131771],{},[30,131769,131770],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[30,131772,131773],{},"吸管取色工具",[938,131775],{"style":127583,"src":131776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[51,131778,131780],{"id":131779},"_916-案例","9.1.6 案例",[765,131782,131783],{},[30,131784,131785],{},"小米商品",[938,131787],{"style":127583,"src":131788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[99,131790,131791],{"className":127727,"code":131563,"language":127729,"meta":104,"style":104},[106,131792,131793,131797,131803,131817],{"__ignoreMap":104},[109,131794,131795],{"class":111,"line":112},[109,131796,131570],{"class":115},[109,131798,131799,131801],{"class":111,"line":119},[109,131800,131575],{"class":211},[109,131802,16745],{"class":126},[109,131804,131805,131807,131809,131811,131813,131815],{"class":111,"line":140},[109,131806,71645],{"class":133},[109,131808,52612],{"class":126},[109,131810,1314],{"class":133},[109,131812,52731],{"class":133},[109,131814,131590],{"class":126},[109,131816,131593],{"class":115},[109,131818,131819],{"class":111,"line":154},[109,131820,742],{"class":126},[765,131822,131823],{"start":119},[30,131824,131825],{},"快报模块",[938,131827],{"style":127583,"src":131828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[99,131830,131832],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[106,131833,131834,131839,131854,131859],{"__ignoreMap":104},[109,131835,131836],{"class":111,"line":112},[109,131837,131838],{"class":115},"\u003C!-- HTML 代码示例 -->\n",[109,131840,131841,131843,131845,131847,131849,131852],{"class":111,"line":119},[109,131842,1320],{"class":126},[109,131844,52786],{"class":52475},[109,131846,54661],{"class":211},[109,131848,130],{"class":126},[109,131850,131851],{"class":278},"\"example\"",[109,131853,52482],{"class":126},[109,131855,131856],{"class":111,"line":140},[109,131857,131858],{"class":126},"  示例内容\n",[109,131860,131861,131863,131865],{"class":111,"line":154},[109,131862,52960],{"class":126},[109,131864,52786],{"class":52475},[109,131866,52482],{"class":126},[51,131868,131870],{"id":131869},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[765,131872,131873],{},[30,131874,131875],{},"圆角边框",[19,131877,131878],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[938,131880],{"style":127583,"src":131881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[99,131883,131885],{"className":127727,"code":131884,"language":127729,"meta":104,"style":104},"div {\n  border: 1px solid #ccc;\n}\n",[106,131886,131887,131893,131909],{"__ignoreMap":104},[109,131888,131889,131891],{"class":111,"line":112},[109,131890,52786],{"class":52475},[109,131892,16745],{"class":126},[109,131894,131895,131897,131899,131901,131903,131905,131907],{"class":111,"line":119},[109,131896,72071],{"class":133},[109,131898,52612],{"class":126},[109,131900,1755],{"class":133},[109,131902,52667],{"class":122},[109,131904,52696],{"class":133},[109,131906,131119],{"class":133},[109,131908,137],{"class":126},[109,131910,131911],{"class":111,"line":140},[109,131912,742],{"class":126},[19,131914,131915],{},"解释:",[27,131917,131918,131921,131924,131927,131930],{},[30,131919,131920],{},"参数值可以为数值或百分比的形式",[30,131922,131923],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[30,131925,131926],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[30,131928,131929],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[30,131931,131932],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[765,131934,131935],{"start":119},[30,131936,131937],{},"盒子阴影",[99,131939,131941],{"className":127727,"code":131940,"language":127729,"meta":104,"style":104},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[106,131942,131943,131949,131986],{"__ignoreMap":104},[109,131944,131945,131947],{"class":111,"line":112},[109,131946,52786],{"class":52475},[109,131948,16745],{"class":126},[109,131950,131951,131954,131956,131958,131960,131962,131964,131966,131968,131970,131972,131974,131976,131978,131980,131982,131984],{"class":111,"line":119},[109,131952,131953],{"class":133},"  box-shadow",[109,131955,52612],{"class":126},[109,131957,1314],{"class":133},[109,131959,15928],{"class":133},[109,131961,52667],{"class":122},[109,131963,134],{"class":133},[109,131965,52667],{"class":122},[109,131967,79942],{"class":133},[109,131969,714],{"class":126},[109,131971,1314],{"class":133},[109,131973,13608],{"class":126},[109,131975,1314],{"class":133},[109,131977,13608],{"class":126},[109,131979,1314],{"class":133},[109,131981,13608],{"class":126},[109,131983,87385],{"class":133},[109,131985,720],{"class":126},[109,131987,131988],{"class":111,"line":140},[109,131989,742],{"class":126},[1677,131991,131992,132000],{},[1680,131993,131994],{},[1683,131995,131996,131998],{},[1686,131997,1691],{"align":24910},[1686,131999,28664],{"align":24910},[1723,132001,132002,132010,132018,132026,132034,132042],{},[1683,132003,132004,132007],{},[1728,132005,132006],{"align":24910},"h-shadow",[1728,132008,132009],{"align":24910},"必需,水平阴影的位置,允许负值",[1683,132011,132012,132015],{},[1728,132013,132014],{"align":24910},"v-shadow",[1728,132016,132017],{"align":24910},"必需,垂直阴影的位置,允许负值",[1683,132019,132020,132023],{},[1728,132021,132022],{"align":24910},"blur",[1728,132024,132025],{"align":24910},"可选,模糊距离,就是影子的虚实",[1683,132027,132028,132031],{},[1728,132029,132030],{"align":24910},"spread",[1728,132032,132033],{"align":24910},"可选,阴影尺寸",[1683,132035,132036,132039],{},[1728,132037,132038],{"align":24910},"color",[1728,132040,132041],{"align":24910},"可选,阴影的颜色",[1683,132043,132044,132047],{},[1728,132045,132046],{"align":24910},"inset",[1728,132048,132049],{"align":24910},"可选,将外部阴影(outset)改为内部阴影",[765,132051,132052],{"start":140},[30,132053,132054],{},"文字阴影",[99,132056,132058],{"className":127727,"code":132057,"language":127729,"meta":104,"style":104},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[106,132059,132060,132066,132105],{"__ignoreMap":104},[109,132061,132062,132064],{"class":111,"line":112},[109,132063,19],{"class":52475},[109,132065,16745],{"class":126},[109,132067,132068,132071,132073,132075,132077,132079,132081,132083,132085,132087,132089,132091,132093,132095,132097,132099,132101,132103],{"class":111,"line":119},[109,132069,132070],{"class":133},"  text-shadow",[109,132072,52612],{"class":126},[109,132074,1755],{"class":133},[109,132076,52667],{"class":122},[109,132078,26293],{"class":133},[109,132080,52667],{"class":122},[109,132082,15928],{"class":133},[109,132084,52667],{"class":122},[109,132086,79942],{"class":133},[109,132088,714],{"class":126},[109,132090,1314],{"class":133},[109,132092,13608],{"class":126},[109,132094,1314],{"class":133},[109,132096,13608],{"class":126},[109,132098,1314],{"class":133},[109,132100,13608],{"class":126},[109,132102,101696],{"class":133},[109,132104,720],{"class":126},[109,132106,132107],{"class":111,"line":140},[109,132108,742],{"class":126},[1677,132110,132111,132119],{},[1680,132112,132113],{},[1683,132114,132115,132117],{},[1686,132116,1691],{"align":24910},[1686,132118,28664],{"align":24910},[1723,132120,132121,132127,132134,132141],{},[1683,132122,132123,132125],{},[1728,132124,132006],{"align":24910},[1728,132126,132009],{"align":24910},[1683,132128,132129,132131],{},[1728,132130,132014],{"align":24910},[1728,132132,132133],{"align":24910},"必需,垂直阴影位置,允许负值",[1683,132135,132136,132138],{},[1728,132137,132022],{"align":24910},[1728,132139,132140],{"align":24910},"可选,模糊的距离",[1683,132142,132143,132145],{},[1728,132144,132038],{"align":24910},[1728,132146,132041],{"align":24910},[14,132148,132150],{"id":132149},"_92-浮动","9.2 浮动",[51,132152,132154],{"id":132153},"_921-浮动介绍","9.2.1 浮动介绍",[19,132156,132157],{},"在16.2中详细介绍",[51,132159,132161],{"id":132160},"_922-清除浮动","9.2.2 清除浮动",[765,132163,132164,132167],{},[30,132165,132166],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[30,132168,132169],{},"清除浮动的本质",[19,132171,132172],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132174,10343],{},[27,132176,132177,132180,132183],{},[30,132178,132179],{},"如果父盒子本身有高度，则不需要清除浮动",[30,132181,132182],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[30,132184,132185],{},"父级有了高度，就不会影响下面的标准流了",[765,132187,132188],{"start":140},[30,132189,132190],{},"清除浮动样式",[99,132192,132194],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[106,132195,132196,132203,132214,132218,132225,132235],{"__ignoreMap":104},[109,132197,132198,132201],{"class":111,"line":112},[109,132199,132200],{"class":211},".left",[109,132202,16745],{"class":126},[109,132204,132205,132208,132210,132212],{"class":111,"line":119},[109,132206,132207],{"class":133},"  float",[109,132209,52612],{"class":126},[109,132211,24910],{"class":133},[109,132213,137],{"class":126},[109,132215,132216],{"class":111,"line":140},[109,132217,742],{"class":126},[109,132219,132220,132223],{"class":111,"line":154},[109,132221,132222],{"class":211},".right",[109,132224,16745],{"class":126},[109,132226,132227,132229,132231,132233],{"class":111,"line":161},[109,132228,132207],{"class":133},[109,132230,52612],{"class":126},[109,132232,73697],{"class":133},[109,132234,137],{"class":126},[109,132236,132237],{"class":111,"line":167},[109,132238,742],{"class":126},[1677,132240,132241,132249],{},[1680,132242,132243],{},[1683,132244,132245,132247],{},[1686,132246,128191],{"align":24910},[1686,132248,28664],{"align":24910},[1723,132250,132251,132258,132265],{},[1683,132252,132253,132255],{},[1728,132254,24910],{"align":24910},[1728,132256,132257],{"align":24910},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1683,132259,132260,132262],{},[1728,132261,73697],{"align":24910},[1728,132263,132264],{"align":24910},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1683,132266,132267,132270],{},[1728,132268,132269],{"align":24910},"both",[1728,132271,132272],{"align":24910},"同时清除左右侧浮动的影响",[19,132274,132275],{},"法一",[19,132277,132278],{},"额外标签法也称为隔墙法",[19,132280,132281],{},"使用方式：",[19,132283,132284],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[99,132286,132287],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,132288,132289,132295,132305,132309,132315,132325],{"__ignoreMap":104},[109,132290,132291,132293],{"class":111,"line":112},[109,132292,132200],{"class":211},[109,132294,16745],{"class":126},[109,132296,132297,132299,132301,132303],{"class":111,"line":119},[109,132298,132207],{"class":133},[109,132300,52612],{"class":126},[109,132302,24910],{"class":133},[109,132304,137],{"class":126},[109,132306,132307],{"class":111,"line":140},[109,132308,742],{"class":126},[109,132310,132311,132313],{"class":111,"line":154},[109,132312,132222],{"class":211},[109,132314,16745],{"class":126},[109,132316,132317,132319,132321,132323],{"class":111,"line":161},[109,132318,132207],{"class":133},[109,132320,52612],{"class":126},[109,132322,73697],{"class":133},[109,132324,137],{"class":126},[109,132326,132327],{"class":111,"line":167},[109,132328,742],{"class":126},[19,132330,132331],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132333,132334],{},"优点： 通俗易懂，书写方便",[19,132336,132337],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132339,132340],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132342,132343],{},"法二",[19,132345,132346],{},"父级添加overflow属性",[99,132348,132349],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,132350,132351,132357,132367,132371,132377,132387],{"__ignoreMap":104},[109,132352,132353,132355],{"class":111,"line":112},[109,132354,132200],{"class":211},[109,132356,16745],{"class":126},[109,132358,132359,132361,132363,132365],{"class":111,"line":119},[109,132360,132207],{"class":133},[109,132362,52612],{"class":126},[109,132364,24910],{"class":133},[109,132366,137],{"class":126},[109,132368,132369],{"class":111,"line":140},[109,132370,742],{"class":126},[109,132372,132373,132375],{"class":111,"line":154},[109,132374,132222],{"class":211},[109,132376,16745],{"class":126},[109,132378,132379,132381,132383,132385],{"class":111,"line":161},[109,132380,132207],{"class":133},[109,132382,52612],{"class":126},[109,132384,73697],{"class":133},[109,132386,137],{"class":126},[109,132388,132389],{"class":111,"line":167},[109,132390,742],{"class":126},[19,132392,132393],{},"overflow: hidden;",[19,132395,132396],{},"优点：代码简洁",[19,132398,132399],{},"缺点：无法显示溢出的部分",[19,132401,132402],{},"注意：是给父元素添加代码",[19,132404,132405],{},"法三",[19,132407,132408],{},"父级添加after伪元素",[19,132410,132411,132414],{},[132412,132413],"after",{}," 方式是额外标签法的升级版",[19,132416,132417],{},"使用的时候复制就可以",[99,132419,132420],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,132421,132422,132428,132438,132442,132448,132458],{"__ignoreMap":104},[109,132423,132424,132426],{"class":111,"line":112},[109,132425,132200],{"class":211},[109,132427,16745],{"class":126},[109,132429,132430,132432,132434,132436],{"class":111,"line":119},[109,132431,132207],{"class":133},[109,132433,52612],{"class":126},[109,132435,24910],{"class":133},[109,132437,137],{"class":126},[109,132439,132440],{"class":111,"line":140},[109,132441,742],{"class":126},[109,132443,132444,132446],{"class":111,"line":154},[109,132445,132222],{"class":211},[109,132447,16745],{"class":126},[109,132449,132450,132452,132454,132456],{"class":111,"line":161},[109,132451,132207],{"class":133},[109,132453,52612],{"class":126},[109,132455,73697],{"class":133},[109,132457,137],{"class":126},[109,132459,132460],{"class":111,"line":167},[109,132461,742],{"class":126},[19,132463,132464],{},"优点：没有增加标签，结构更简单",[19,132466,132467],{},"缺点：照顾低版本浏览器",[19,132469,132470],{},"代表网站： 百度、淘宝网、网易等",[19,132472,132473],{},"法四",[19,132475,132476],{},"父级添加双伪元素",[99,132478,132479],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,132480,132481,132487,132497,132501,132507,132517],{"__ignoreMap":104},[109,132482,132483,132485],{"class":111,"line":112},[109,132484,132200],{"class":211},[109,132486,16745],{"class":126},[109,132488,132489,132491,132493,132495],{"class":111,"line":119},[109,132490,132207],{"class":133},[109,132492,52612],{"class":126},[109,132494,24910],{"class":133},[109,132496,137],{"class":126},[109,132498,132499],{"class":111,"line":140},[109,132500,742],{"class":126},[109,132502,132503,132505],{"class":111,"line":154},[109,132504,132222],{"class":211},[109,132506,16745],{"class":126},[109,132508,132509,132511,132513,132515],{"class":111,"line":161},[109,132510,132207],{"class":133},[109,132512,52612],{"class":126},[109,132514,73697],{"class":133},[109,132516,137],{"class":126},[109,132518,132519],{"class":111,"line":167},[109,132520,742],{"class":126},[19,132522,132523],{},"优点：代码更简洁",[19,132525,132467],{},[19,132527,132528],{},"代表网站：小米、腾讯等",[14,132530,132532],{"id":132531},"_93-ps切图","9.3 PS切图",[51,132534,132536],{"id":132535},"_931-常见图片格式","9.3.1 常见图片格式",[1677,132538,132539,132549],{},[1680,132540,132541],{},[1683,132542,132543,132546],{},[1686,132544,132545],{"align":24910},"jpg图像格式",[1686,132547,132548],{"align":24910},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1723,132550,132551,132559,132567],{},[1683,132552,132553,132556],{},[1728,132554,132555],{"align":24910},"gif图像格式",[1728,132557,132558],{"align":24910},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1683,132560,132561,132564],{},[1728,132562,132563],{"align":24910},"png图像格式",[1728,132565,132566],{"align":24910},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1683,132568,132569,132572],{},[1728,132570,132571],{"align":24910},"PSD图像格式",[1728,132573,132574],{"align":24910},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[51,132576,132578],{"id":132577},"_932-图层切图","9.3.2 图层切图",[19,132580,132581],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132583,132584],{},"按住shift选中两个图层->图层菜单->合并图层",[51,132586,132588],{"id":132587},"_933-切片切图","9.3.3 切片切图",[27,132590,132591,132594],{},[30,132592,132593],{},"利用切片工具手动划出",[30,132595,132596],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[51,132598,132600],{"id":132599},"_934-切图步骤","9.3.4 切图步骤",[19,132602,132603],{},"用切片工具选中：",[938,132605],{"style":127583,"src":132606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132608,132609],{},"文件 -> 导出",[938,132611],{"style":127583,"src":132612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1467,132614,132615],{},"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":104,"searchDepth":119,"depth":119,"links":132617},[132618,132627,132631],{"id":131054,"depth":119,"text":131055,"children":132619},[132620,132621,132622,132623,132624,132625,132626],{"id":131079,"depth":140,"text":131080},{"id":131370,"depth":140,"text":131371},{"id":131499,"depth":140,"text":131500},{"id":131699,"depth":140,"text":131700},{"id":131741,"depth":140,"text":131742},{"id":131779,"depth":140,"text":131780},{"id":131869,"depth":140,"text":131870},{"id":132149,"depth":119,"text":132150,"children":132628},[132629,132630],{"id":132153,"depth":140,"text":132154},{"id":132160,"depth":140,"text":132161},{"id":132531,"depth":119,"text":132532,"children":132632},[132633,132634,132635,132636],{"id":132535,"depth":140,"text":132536},{"id":132577,"depth":140,"text":132578},{"id":132587,"depth":140,"text":132588},{"id":132599,"depth":140,"text":132600},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131046,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132643,"title":132644,"body":132645,"description":24550,"extension":1476,"meta":133286,"navigation":157,"path":133287,"seo":133288,"stem":133289,"__hash__":133290},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132646,"toc":133274},[132647,132650,132654,132680,132714,132718,132722,132725,132767,132774,132784,132792,132794,132797,132800,132803,132810,132824,132828,132831,132860,132864,132867,132881,132885,132888,132916,132920,132923,132949,132953,132958,132991,132996,133024,133028,133045,133091,133096,133140,133157,133264,133272],[10,132648,132644],{"id":132649},"_10-css规范与学成在线案例",[14,132651,132653],{"id":132652},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[765,132655,132656,132662,132668,132674],{},[30,132657,132658,132661],{},[23,132659,132660],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[30,132663,132664,132667],{},[23,132665,132666],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[30,132669,132670,132673],{},[23,132671,132672],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[30,132675,132676,132679],{},[23,132677,132678],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[99,132681,132682],{"className":127727,"code":131091,"language":127729,"meta":104,"style":104},[106,132683,132684,132688,132694,132710],{"__ignoreMap":104},[109,132685,132686],{"class":111,"line":112},[109,132687,131098],{"class":115},[109,132689,132690,132692],{"class":111,"line":119},[109,132691,52786],{"class":52475},[109,132693,16745],{"class":126},[109,132695,132696,132698,132700,132702,132704,132706,132708],{"class":111,"line":140},[109,132697,72071],{"class":133},[109,132699,52612],{"class":126},[109,132701,1755],{"class":133},[109,132703,52667],{"class":122},[109,132705,52696],{"class":133},[109,132707,131119],{"class":133},[109,132709,137],{"class":126},[109,132711,132712],{"class":111,"line":154},[109,132713,742],{"class":126},[14,132715,132717],{"id":132716},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[51,132719,132721],{"id":132720},"_1021-header头部制作","10.2.1 header头部制作",[938,132723],{"style":127583,"src":132724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[27,132726,132727,132734,132741,132747,132754,132761],{},[30,132728,132729,132730,132733],{},"1号是版心盒子 ",[23,132731,132732],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[30,132735,132736,132737,132740],{},"版心盒子 里面包含 2号盒子 ",[23,132738,132739],{},"logo"," 图标",[30,132742,132743,132744,132746],{},"版心盒子 里面包含 3号盒子 ",[23,132745,54888],{}," 导航栏",[30,132748,132749,132750,132753],{},"版心盒子 里面包含 4号盒子 ",[23,132751,132752],{},"search"," 搜索框",[30,132755,132756,132757,132760],{},"版心盒子 里面包含 5号盒子 ",[23,132758,132759],{},"user"," 个人信息",[30,132762,132763,132764],{},"注意，要求里面的 ",[23,132765,132766],{},"4个子盒子 必须都浮动",[765,132768,132769],{},[30,132770,132771],{},[23,132772,132773],{},"导航栏注意点:",[19,132775,132776,132777,132780,132781],{},"实际开发中， ",[23,132778,132779],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[23,132782,132783],{},"用 li 包含链接(li+a)的做法",[27,132785,132786,132789],{},[30,132787,132788],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[30,132790,132791],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132793,10343],{},[19,132795,132796],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132798,132799],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132801,132802],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[765,132804,132805],{"start":119},[30,132806,132807],{},[23,132808,132809],{},"4号盒子search的细节：",[27,132811,132812,132815,132818],{},[30,132813,132814],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[30,132816,132817],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[30,132819,132820,132823],{},[106,132821,132822],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[51,132825,132827],{"id":132826},"_1022-banner制作","10.2.2 banner制作",[938,132829],{"style":127583,"src":132830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[27,132832,132833,132840,132846,132853],{},[30,132834,132835,132836,132839],{},"1号盒子是通栏的大盒子 ",[23,132837,132838],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[30,132841,132842,132843,132845],{},"2号盒子是版心 ",[23,132844,2327],{}," ， 要水平居中对齐",[30,132847,132848,132849,132852],{},"3号盒子版心内，左对齐 ",[23,132850,132851],{},"subnav"," 侧导航栏",[30,132854,132855,132856,132859],{},"4号盒子版心内，右对齐 ",[23,132857,132858],{},"course"," 课程",[51,132861,132863],{"id":132862},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[938,132865],{"style":127583,"src":132866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[27,132868,132869,132872,132875,132878],{},[30,132870,132871],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[30,132873,132874],{},"1号盒子是标题 H3 左侧浮动",[30,132876,132877],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[30,132879,132880],{},"3号盒子 右浮动 mod 修改",[51,132882,132884],{"id":132883},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[938,132886],{"style":127583,"src":132887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[27,132889,132890,132896,132903,132910,132913],{},[30,132891,132892,132893,132895],{},"1号盒子为最大的盒子 ",[23,132894,54889],{}," 版心水平居中对齐",[30,132897,132898,132899,132902],{},"2号盒子为上面部分 ",[23,132900,132901],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[30,132904,132905,132906,132909],{},"3号盒子为底下部分 ",[23,132907,132908],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[30,132911,132912],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[30,132914,132915],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[51,132917,132919],{"id":132918},"_1025-底部模块制作","10.2.5 底部模块制作",[938,132921],{"style":127583,"src":132922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[27,132924,132925,132932,132935,132942],{},[30,132926,132927,132928,132931],{},"1号盒子通栏大盒子 底部 ",[23,132929,132930],{},"footer"," 给高度 底色是白色",[30,132933,132934],{},"2号盒子版心水平居中",[30,132936,132937,132938,132941],{},"3号盒子版权 ",[23,132939,132940],{},"copyright"," 左对齐",[30,132943,132944,132945,132948],{},"4号盒子 链接组 ",[23,132946,132947],{},"links"," 右对齐",[51,132950,132952],{"id":132951},"_1026-代码模块","10.2.6 代码模块",[765,132954,132955],{},[30,132956,132957],{},"html部分",[99,132959,132961],{"className":128474,"code":132960,"language":128476,"meta":104,"style":104},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[106,132962,132963],{"__ignoreMap":104},[109,132964,132965,132967,132969,132971,132973,132976,132979,132981,132984,132987,132989],{"class":111,"line":112},[109,132966,1320],{"class":126},[109,132968,1776],{"class":52475},[109,132970,62232],{"class":211},[109,132972,130],{"class":126},[109,132974,132975],{"class":278},"\"https:\u002F\u002Fexample.com\"",[109,132977,132978],{"class":211}," target",[109,132980,130],{"class":126},[109,132982,132983],{"class":278},"\"_blank\"",[109,132985,132986],{"class":126},">链接文字\u003C\u002F",[109,132988,1776],{"class":52475},[109,132990,52482],{"class":126},[765,132992,132993],{"start":119},[30,132994,132995],{},"css部分",[99,132997,132998],{"className":128474,"code":132960,"language":128476,"meta":104,"style":104},[106,132999,133000],{"__ignoreMap":104},[109,133001,133002,133004,133006,133008,133010,133012,133014,133016,133018,133020,133022],{"class":111,"line":112},[109,133003,1320],{"class":126},[109,133005,1776],{"class":52475},[109,133007,62232],{"class":211},[109,133009,130],{"class":126},[109,133011,132975],{"class":278},[109,133013,132978],{"class":211},[109,133015,130],{"class":126},[109,133017,132983],{"class":278},[109,133019,132986],{"class":126},[109,133021,1776],{"class":52475},[109,133023,52482],{"class":126},[51,133025,133027],{"id":133026},"_1027-收获","10.2.7 收获",[765,133029,133030,133033,133036,133039,133042],{},[30,133031,133032],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[30,133034,133035],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[30,133037,133038],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[30,133040,133041],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[30,133043,133044],{},"遗忘代码",[99,133046,133048],{"className":127727,"code":133047,"language":127729,"meta":104,"style":104},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[106,133049,133050,133072,133077,133087],{"__ignoreMap":104},[109,133051,133052,133054,133056,133058,133060,133062,133064,133066,133068,133070],{"class":111,"line":112},[109,133053,52786],{"class":52475},[109,133055,13608],{"class":126},[109,133057,19],{"class":52475},[109,133059,13608],{"class":126},[109,133061,10],{"class":52475},[109,133063,13608],{"class":126},[109,133065,27],{"class":52475},[109,133067,13608],{"class":126},[109,133069,30],{"class":52475},[109,133071,16745],{"class":126},[109,133073,133074],{"class":111,"line":119},[109,133075,133076],{"class":115},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[109,133078,133079,133081,133083,133085],{"class":111,"line":140},[109,133080,129343],{"class":133},[109,133082,52612],{"class":126},[109,133084,62044],{"class":133},[109,133086,137],{"class":126},[109,133088,133089],{"class":111,"line":154},[109,133090,742],{"class":126},[765,133092,133093],{"start":167},[30,133094,133095],{},"html引css的程序",[99,133097,133098],{"className":127727,"code":133047,"language":127729,"meta":104,"style":104},[106,133099,133100,133122,133126,133136],{"__ignoreMap":104},[109,133101,133102,133104,133106,133108,133110,133112,133114,133116,133118,133120],{"class":111,"line":112},[109,133103,52786],{"class":52475},[109,133105,13608],{"class":126},[109,133107,19],{"class":52475},[109,133109,13608],{"class":126},[109,133111,10],{"class":52475},[109,133113,13608],{"class":126},[109,133115,27],{"class":52475},[109,133117,13608],{"class":126},[109,133119,30],{"class":52475},[109,133121,16745],{"class":126},[109,133123,133124],{"class":111,"line":119},[109,133125,133076],{"class":115},[109,133127,133128,133130,133132,133134],{"class":111,"line":140},[109,133129,129343],{"class":133},[109,133131,52612],{"class":126},[109,133133,62044],{"class":133},[109,133135,137],{"class":126},[109,133137,133138],{"class":111,"line":154},[109,133139,742],{"class":126},[765,133141,133142,133145,133148,133151,133154],{"start":185},[30,133143,133144],{},"浮动的盒子不会有外边距合并问题",[30,133146,133147],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[30,133149,133150],{},"ctrl+g快速定位行；shift+alt多个光标",[30,133152,133153],{},"学习上方各个模块的选择器起名方法，以后就这样用",[30,133155,133156],{},"在写选择器时尽量写全一些，例如",[99,133158,133160],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},"\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",[106,133161,133162,133167,133183,133188,133203,133208,133223,133228,133243,133248],{"__ignoreMap":104},[109,133163,133164],{"class":111,"line":112},[109,133165,133166],{"class":115},"\u002F* 静态定位（默认） *\u002F\n",[109,133168,133169,133172,133174,133176,133178,133181],{"class":111,"line":119},[109,133170,133171],{"class":211},".static",[109,133173,80982],{"class":126},[109,133175,130087],{"class":133},[109,133177,52612],{"class":126},[109,133179,133180],{"class":133},"static",[109,133182,130657],{"class":126},[109,133184,133185],{"class":111,"line":140},[109,133186,133187],{"class":115},"\u002F* 相对定位 *\u002F\n",[109,133189,133190,133193,133195,133197,133199,133201],{"class":111,"line":154},[109,133191,133192],{"class":211},".relative",[109,133194,80982],{"class":126},[109,133196,130087],{"class":133},[109,133198,52612],{"class":126},[109,133200,55939],{"class":133},[109,133202,130657],{"class":126},[109,133204,133205],{"class":111,"line":161},[109,133206,133207],{"class":115},"\u002F* 绝对定位 *\u002F\n",[109,133209,133210,133213,133215,133217,133219,133221],{"class":111,"line":167},[109,133211,133212],{"class":211},".absolute",[109,133214,80982],{"class":126},[109,133216,130087],{"class":133},[109,133218,52612],{"class":126},[109,133220,56006],{"class":133},[109,133222,130657],{"class":126},[109,133224,133225],{"class":111,"line":185},[109,133226,133227],{"class":115},"\u002F* 固定定位 *\u002F\n",[109,133229,133230,133233,133235,133237,133239,133241],{"class":111,"line":201},[109,133231,133232],{"class":211},".fixed",[109,133234,80982],{"class":126},[109,133236,130087],{"class":133},[109,133238,52612],{"class":126},[109,133240,87408],{"class":133},[109,133242,130657],{"class":126},[109,133244,133245],{"class":111,"line":206},[109,133246,133247],{"class":115},"\u002F* 粘性定位 *\u002F\n",[109,133249,133250,133253,133255,133257,133259,133262],{"class":111,"line":218},[109,133251,133252],{"class":211},".sticky",[109,133254,80982],{"class":126},[109,133256,130087],{"class":133},[109,133258,52612],{"class":126},[109,133260,133261],{"class":133},"sticky",[109,133263,130657],{"class":126},[765,133265,133266,133269],{"start":229},[30,133267,133268],{},"一定要用好注释",[30,133270,133271],{},"浮动的盒子不会有外边距合并的问题",[1467,133273,132615],{},{"title":104,"searchDepth":119,"depth":119,"links":133275},[133276,133277],{"id":132652,"depth":119,"text":132653},{"id":132716,"depth":119,"text":132717,"children":133278},[133279,133280,133281,133282,133283,133284,133285],{"id":132720,"depth":140,"text":132721},{"id":132826,"depth":140,"text":132827},{"id":132862,"depth":140,"text":132863},{"id":132883,"depth":140,"text":132884},{"id":132918,"depth":140,"text":132919},{"id":132951,"depth":140,"text":132952},{"id":133026,"depth":140,"text":133027},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132644,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133292,"title":133293,"body":133294,"description":24550,"extension":1476,"meta":134780,"navigation":157,"path":134781,"seo":134782,"stem":134783,"__hash__":134784},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133295,"toc":134772},[133296,133299,133303,133307,133318,133322,133339,133383,133416,133419,133436,133439,133442,133486,133490,133494,133497,133500,133504,133507,133518,133581,133622,133625,133640,133694,133702,133705,133716,133770,133796,133799,133812,133866,133898,133952,133975,134029,134032,134035,134042,134096,134117,134171,134174,134177,134262,134270,134327,134350,134354,134357,134375,134379,134398,134452,134490,134494,134497,134500,134522,134526,134534,134537,134542,134553,134556,134560,134574,134618,134621,134625,134628,134633,134659,134664,134741,134744,134748,134751,134754,134757,134760,134763,134766,134769],[10,133297,133293],{"id":133298},"_11-传统布局与定位体系",[14,133300,133302],{"id":133301},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[51,133304,133306],{"id":133305},"_1111-普通流标准流","11.1.1 普通流（标准流）",[27,133308,133309,133312,133315],{},[30,133310,133311],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[30,133313,133314],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[30,133316,133317],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[51,133319,133321],{"id":133320},"_1112-浮动","11.1.2 浮动",[27,133323,133324,133327,133330,133333,133336],{},[30,133325,133326],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[30,133328,133329],{},"浮动可以改变元素标签默认的排列方式",[30,133331,133332],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[30,133334,133335],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[30,133337,133338],{},"在使用行内块转换时盒子之间是有空隙的",[99,133340,133341],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,133342,133343,133349,133359,133363,133369,133379],{"__ignoreMap":104},[109,133344,133345,133347],{"class":111,"line":112},[109,133346,132200],{"class":211},[109,133348,16745],{"class":126},[109,133350,133351,133353,133355,133357],{"class":111,"line":119},[109,133352,132207],{"class":133},[109,133354,52612],{"class":126},[109,133356,24910],{"class":133},[109,133358,137],{"class":126},[109,133360,133361],{"class":111,"line":140},[109,133362,742],{"class":126},[109,133364,133365,133367],{"class":111,"line":154},[109,133366,132222],{"class":211},[109,133368,16745],{"class":126},[109,133370,133371,133373,133375,133377],{"class":111,"line":161},[109,133372,132207],{"class":133},[109,133374,52612],{"class":126},[109,133376,73697],{"class":133},[109,133378,137],{"class":126},[109,133380,133381],{"class":111,"line":167},[109,133382,742],{"class":126},[1677,133384,133385,133393],{},[1680,133386,133387],{},[1683,133388,133389,133391],{},[1686,133390,128191],{"align":24910},[1686,133392,28664],{"align":24910},[1723,133394,133395,133402,133409],{},[1683,133396,133397,133399],{},[1728,133398,55912],{"align":24910},[1728,133400,133401],{"align":24910},"元素不浮动（默认值）",[1683,133403,133404,133406],{},[1728,133405,24910],{"align":24910},[1728,133407,133408],{"align":24910},"元素向左浮动",[1683,133410,133411,133413],{},[1728,133412,73697],{"align":24910},[1728,133414,133415],{"align":24910},"元素向右浮动",[19,133417,133418],{},"浮动重点：",[27,133420,133421,133424,133427,133430,133433],{},[30,133422,133423],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[30,133425,133426],{},"浮动的元素会一行内显示并且元素顶部对齐",[30,133428,133429],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[30,133431,133432],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[30,133434,133435],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133437,133438],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133440,133441],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[99,133443,133444],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,133445,133446,133452,133462,133466,133472,133482],{"__ignoreMap":104},[109,133447,133448,133450],{"class":111,"line":112},[109,133449,132200],{"class":211},[109,133451,16745],{"class":126},[109,133453,133454,133456,133458,133460],{"class":111,"line":119},[109,133455,132207],{"class":133},[109,133457,52612],{"class":126},[109,133459,24910],{"class":133},[109,133461,137],{"class":126},[109,133463,133464],{"class":111,"line":140},[109,133465,742],{"class":126},[109,133467,133468,133470],{"class":111,"line":154},[109,133469,132222],{"class":211},[109,133471,16745],{"class":126},[109,133473,133474,133476,133478,133480],{"class":111,"line":161},[109,133475,132207],{"class":133},[109,133477,52612],{"class":126},[109,133479,73697],{"class":133},[109,133481,137],{"class":126},[109,133483,133484],{"class":111,"line":167},[109,133485,742],{"class":126},[51,133487,133489],{"id":133488},"_1113-定位","11.1.3 定位",[23171,133491,133493],{"id":133492},"_11131-使用场景","11.1.3.1 使用场景",[19,133495,133496],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133498,133499],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23171,133501,133503],{"id":133502},"_11132-定位组成","11.1.3.2 定位组成",[19,133505,133506],{},"定位 = 定位模式 + 边偏移",[765,133508,133509],{},[30,133510,133511,133514,133515],{},[23,133512,133513],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[23,133516,133517],{},"定位模式",[99,133519,133521],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[106,133522,133523,133529,133543,133560,133577],{"__ignoreMap":104},[109,133524,133525,133527],{"class":111,"line":112},[109,133526,131575],{"class":211},[109,133528,16745],{"class":126},[109,133530,133531,133534,133536,133538,133540],{"class":111,"line":119},[109,133532,133533],{"class":133},"  position",[109,133535,52612],{"class":126},[109,133537,55939],{"class":133},[109,133539,131590],{"class":126},[109,133541,133542],{"class":115},"\u002F* 定位模式 *\u002F\n",[109,133544,133545,133548,133550,133552,133554,133557],{"class":111,"line":140},[109,133546,133547],{"class":133},"  top",[109,133549,52612],{"class":126},[109,133551,1008],{"class":133},[109,133553,52667],{"class":122},[109,133555,133556],{"class":126},";           ",[109,133558,133559],{"class":115},"\u002F* 边偏移：上 *\u002F\n",[109,133561,133562,133565,133567,133569,133571,133574],{"class":111,"line":154},[109,133563,133564],{"class":133},"  left",[109,133566,52612],{"class":126},[109,133568,2232],{"class":133},[109,133570,52667],{"class":122},[109,133572,133573],{"class":126},";          ",[109,133575,133576],{"class":115},"\u002F* 边偏移：左 *\u002F\n",[109,133578,133579],{"class":111,"line":161},[109,133580,742],{"class":126},[1677,133582,133583,133592],{},[1680,133584,133585],{},[1683,133586,133587,133589],{},[1686,133588,1691],{"align":24910},[1686,133590,133591],{"align":24910},"语义",[1723,133593,133594,133601,133608,133615],{},[1683,133595,133596,133598],{},[1728,133597,133180],{"align":24910},[1728,133599,133600],{"align":24910},"静态定位",[1683,133602,133603,133605],{},[1728,133604,55939],{"align":24910},[1728,133606,133607],{"align":24910},"相对定位",[1683,133609,133610,133612],{},[1728,133611,56006],{"align":24910},[1728,133613,133614],{"align":24910},"绝对定位",[1683,133616,133617,133619],{},[1728,133618,87408],{"align":24910},[1728,133620,133621],{"align":24910},"固定定位",[19,133623,133624],{},"（1）静态定位：",[27,133626,133627,133638],{},[30,133628,133629,133630,133633,133634,133637],{},"静态定位是元素的 ",[23,133631,133632],{},"默认定位方式"," ， ",[23,133635,133636],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[30,133639,6518],{},[99,133641,133642],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,133643,133644,133650,133662,133676,133690],{"__ignoreMap":104},[109,133645,133646,133648],{"class":111,"line":112},[109,133647,131575],{"class":211},[109,133649,16745],{"class":126},[109,133651,133652,133654,133656,133658,133660],{"class":111,"line":119},[109,133653,133533],{"class":133},[109,133655,52612],{"class":126},[109,133657,55939],{"class":133},[109,133659,131590],{"class":126},[109,133661,133542],{"class":115},[109,133663,133664,133666,133668,133670,133672,133674],{"class":111,"line":140},[109,133665,133547],{"class":133},[109,133667,52612],{"class":126},[109,133669,1008],{"class":133},[109,133671,52667],{"class":122},[109,133673,133556],{"class":126},[109,133675,133559],{"class":115},[109,133677,133678,133680,133682,133684,133686,133688],{"class":111,"line":154},[109,133679,133564],{"class":133},[109,133681,52612],{"class":126},[109,133683,2232],{"class":133},[109,133685,52667],{"class":122},[109,133687,133573],{"class":126},[109,133689,133576],{"class":115},[109,133691,133692],{"class":111,"line":161},[109,133693,742],{"class":126},[27,133695,133696,133699],{},[30,133697,133698],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[30,133700,133701],{},"静态定位在布局时我们几乎不用的",[19,133703,133704],{},"（2）相对定位",[27,133706,133707,133714],{},[30,133708,133709,133710,133713],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[23,133711,133712],{},"原来的位置"," 来说的（自恋型）",[30,133715,6518],{},[99,133717,133718],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,133719,133720,133726,133738,133752,133766],{"__ignoreMap":104},[109,133721,133722,133724],{"class":111,"line":112},[109,133723,131575],{"class":211},[109,133725,16745],{"class":126},[109,133727,133728,133730,133732,133734,133736],{"class":111,"line":119},[109,133729,133533],{"class":133},[109,133731,52612],{"class":126},[109,133733,55939],{"class":133},[109,133735,131590],{"class":126},[109,133737,133542],{"class":115},[109,133739,133740,133742,133744,133746,133748,133750],{"class":111,"line":140},[109,133741,133547],{"class":133},[109,133743,52612],{"class":126},[109,133745,1008],{"class":133},[109,133747,52667],{"class":122},[109,133749,133556],{"class":126},[109,133751,133559],{"class":115},[109,133753,133754,133756,133758,133760,133762,133764],{"class":111,"line":154},[109,133755,133564],{"class":133},[109,133757,52612],{"class":126},[109,133759,2232],{"class":133},[109,133761,52667],{"class":122},[109,133763,133573],{"class":126},[109,133765,133576],{"class":115},[109,133767,133768],{"class":111,"line":161},[109,133769,742],{"class":126},[27,133771,133772],{},[30,133773,133774,133775,133777,133778,133780,133781,133784,133785,133788,133789,133791,133792,133795],{},"相对定位的特点：",[54891,133776],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54891,133779],{},"  ② ",[23,133782,133783],{},"原来"," 在标准流的 ",[23,133786,133787],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54891,133790],{},"  ③因此， ",[23,133793,133794],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133797,133798],{},"（3）绝对定位",[27,133800,133801,133810],{},[30,133802,133803,133805,133806,133809],{},[23,133804,133614],{}," 是元素在移动位置的时候，是相对于它 ",[23,133807,133808],{},"祖先元素"," 来说的（拼爹型）",[30,133811,6518],{},[99,133813,133814],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,133815,133816,133822,133834,133848,133862],{"__ignoreMap":104},[109,133817,133818,133820],{"class":111,"line":112},[109,133819,131575],{"class":211},[109,133821,16745],{"class":126},[109,133823,133824,133826,133828,133830,133832],{"class":111,"line":119},[109,133825,133533],{"class":133},[109,133827,52612],{"class":126},[109,133829,55939],{"class":133},[109,133831,131590],{"class":126},[109,133833,133542],{"class":115},[109,133835,133836,133838,133840,133842,133844,133846],{"class":111,"line":140},[109,133837,133547],{"class":133},[109,133839,52612],{"class":126},[109,133841,1008],{"class":133},[109,133843,52667],{"class":122},[109,133845,133556],{"class":126},[109,133847,133559],{"class":115},[109,133849,133850,133852,133854,133856,133858,133860],{"class":111,"line":154},[109,133851,133564],{"class":133},[109,133853,52612],{"class":126},[109,133855,2232],{"class":133},[109,133857,52667],{"class":122},[109,133859,133573],{"class":126},[109,133861,133576],{"class":115},[109,133863,133864],{"class":111,"line":161},[109,133865,742],{"class":126},[27,133867,133868,133883,133892,133895],{},[30,133869,133870,133871,133873,133874,133876,133877,133879,133880,133882],{},"绝对定位的特点：",[54891,133872],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54891,133875],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54891,133878],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54891,133881],{},"  (4)固定定位",[30,133884,133885,133887,133888,133891],{},[23,133886,133621],{}," 是元素 ",[23,133889,133890],{},"固定于浏览器可视区的位置"," 。（认死理型）",[30,133893,133894],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[30,133896,133897],{},"语法:",[99,133899,133900],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,133901,133902,133908,133920,133934,133948],{"__ignoreMap":104},[109,133903,133904,133906],{"class":111,"line":112},[109,133905,131575],{"class":211},[109,133907,16745],{"class":126},[109,133909,133910,133912,133914,133916,133918],{"class":111,"line":119},[109,133911,133533],{"class":133},[109,133913,52612],{"class":126},[109,133915,55939],{"class":133},[109,133917,131590],{"class":126},[109,133919,133542],{"class":115},[109,133921,133922,133924,133926,133928,133930,133932],{"class":111,"line":140},[109,133923,133547],{"class":133},[109,133925,52612],{"class":126},[109,133927,1008],{"class":133},[109,133929,52667],{"class":122},[109,133931,133556],{"class":126},[109,133933,133559],{"class":115},[109,133935,133936,133938,133940,133942,133944,133946],{"class":111,"line":154},[109,133937,133564],{"class":133},[109,133939,52612],{"class":126},[109,133941,2232],{"class":133},[109,133943,52667],{"class":122},[109,133945,133573],{"class":126},[109,133947,133576],{"class":115},[109,133949,133950],{"class":111,"line":161},[109,133951,742],{"class":126},[27,133953,133954,133963],{},[30,133955,133956,133957,133959,133960,133962],{},"特点:",[54891,133958],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54891,133961],{},"  ②固定定位不再占有原先的位置,完全脱标",[30,133964,133965,133966,133968,133969,133971,133972,133974],{},"固定在版心位置的方法:",[54891,133967],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54891,133970],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54891,133973],{},"  实例：",[99,133976,133977],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,133978,133979,133985,133997,134011,134025],{"__ignoreMap":104},[109,133980,133981,133983],{"class":111,"line":112},[109,133982,131575],{"class":211},[109,133984,16745],{"class":126},[109,133986,133987,133989,133991,133993,133995],{"class":111,"line":119},[109,133988,133533],{"class":133},[109,133990,52612],{"class":126},[109,133992,55939],{"class":133},[109,133994,131590],{"class":126},[109,133996,133542],{"class":115},[109,133998,133999,134001,134003,134005,134007,134009],{"class":111,"line":140},[109,134000,133547],{"class":133},[109,134002,52612],{"class":126},[109,134004,1008],{"class":133},[109,134006,52667],{"class":122},[109,134008,133556],{"class":126},[109,134010,133559],{"class":115},[109,134012,134013,134015,134017,134019,134021,134023],{"class":111,"line":154},[109,134014,133564],{"class":133},[109,134016,52612],{"class":126},[109,134018,2232],{"class":133},[109,134020,52667],{"class":122},[109,134022,133573],{"class":126},[109,134024,133576],{"class":115},[109,134026,134027],{"class":111,"line":161},[109,134028,742],{"class":126},[938,134030],{"style":127583,"src":134031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134033,134034],{},"(5)粘性定位",[27,134036,134037,134040],{},[30,134038,134039],{},"粘性定位可以被认为是相对定位和固定定位的混合",[30,134041,6518],{},[99,134043,134044],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,134045,134046,134052,134064,134078,134092],{"__ignoreMap":104},[109,134047,134048,134050],{"class":111,"line":112},[109,134049,131575],{"class":211},[109,134051,16745],{"class":126},[109,134053,134054,134056,134058,134060,134062],{"class":111,"line":119},[109,134055,133533],{"class":133},[109,134057,52612],{"class":126},[109,134059,55939],{"class":133},[109,134061,131590],{"class":126},[109,134063,133542],{"class":115},[109,134065,134066,134068,134070,134072,134074,134076],{"class":111,"line":140},[109,134067,133547],{"class":133},[109,134069,52612],{"class":126},[109,134071,1008],{"class":133},[109,134073,52667],{"class":122},[109,134075,133556],{"class":126},[109,134077,133559],{"class":115},[109,134079,134080,134082,134084,134086,134088,134090],{"class":111,"line":154},[109,134081,133564],{"class":133},[109,134083,52612],{"class":126},[109,134085,2232],{"class":133},[109,134087,52667],{"class":122},[109,134089,133573],{"class":126},[109,134091,133576],{"class":115},[109,134093,134094],{"class":111,"line":161},[109,134095,742],{"class":126},[27,134097,134098],{},[30,134099,134100,134101,134103,134104,134106,134107,134109,134110,134113,134114,134116],{},"粘性定位的特点：",[54891,134102],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54891,134105],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54891,134108],{},"  ③必须添加 top 、left、right、bottom ",[23,134111,134112],{},"其中一个"," 才有效",[54891,134115],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[99,134118,134119],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,134120,134121,134127,134139,134153,134167],{"__ignoreMap":104},[109,134122,134123,134125],{"class":111,"line":112},[109,134124,131575],{"class":211},[109,134126,16745],{"class":126},[109,134128,134129,134131,134133,134135,134137],{"class":111,"line":119},[109,134130,133533],{"class":133},[109,134132,52612],{"class":126},[109,134134,55939],{"class":133},[109,134136,131590],{"class":126},[109,134138,133542],{"class":115},[109,134140,134141,134143,134145,134147,134149,134151],{"class":111,"line":140},[109,134142,133547],{"class":133},[109,134144,52612],{"class":126},[109,134146,1008],{"class":133},[109,134148,52667],{"class":122},[109,134150,133556],{"class":126},[109,134152,133559],{"class":115},[109,134154,134155,134157,134159,134161,134163,134165],{"class":111,"line":154},[109,134156,133564],{"class":133},[109,134158,52612],{"class":126},[109,134160,2232],{"class":133},[109,134162,52667],{"class":122},[109,134164,133573],{"class":126},[109,134166,133576],{"class":115},[109,134168,134169],{"class":111,"line":161},[109,134170,742],{"class":126},[938,134172],{"style":127583,"src":134173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134175,134176],{},"(6)总结",[1677,134178,134179,134194],{},[1680,134180,134181],{},[1683,134182,134183,134185,134188,134191],{},[1686,134184,133517],{"align":24910},[1686,134186,134187],{"align":24910},"是否脱标",[1686,134189,134190],{"align":24910},"移动位置",[1686,134192,134193],{"align":24910},"是否常用",[1723,134195,134196,134209,134223,134237,134250],{},[1683,134197,134198,134201,134203,134206],{},[1728,134199,134200],{"align":24910},"Static 静态定位",[1728,134202,105853],{"align":24910},[1728,134204,134205],{"align":24910},"不能使用边偏移",[1728,134207,134208],{"align":24910},"很少",[1683,134210,134211,134214,134217,134220],{},[1728,134212,134213],{"align":24910},"Relative 相对定位",[1728,134215,134216],{"align":24910},"否(占有位置)",[1728,134218,134219],{"align":24910},"相对于自身位置移动",[1728,134221,134222],{"align":24910},"基本单独使用",[1683,134224,134225,134228,134231,134234],{},[1728,134226,134227],{"align":24910},"Absolute 绝对定位",[1728,134229,134230],{"align":24910},"是(不占有位置)",[1728,134232,134233],{"align":24910},"带有定位的父级",[1728,134235,134236],{"align":24910},"要和定位父级元素搭配使用",[1683,134238,134239,134242,134244,134247],{},[1728,134240,134241],{"align":24910},"Fixed 固定定位",[1728,134243,134230],{"align":24910},[1728,134245,134246],{"align":24910},"浏览器可视区",[1728,134248,134249],{"align":24910},"单独使用,不需要父级",[1683,134251,134252,134255,134257,134259],{},[1728,134253,134254],{"align":24910},"Sticky 粘性定位",[1728,134256,134216],{"align":24910},[1728,134258,134246],{"align":24910},[1728,134260,134261],{"align":24910},"当前阶段少",[765,134263,134264],{"start":119},[30,134265,134266,134269],{},[23,134267,134268],{},"边偏移"," 则决定了该元素的最终位置",[1677,134271,134272,134283],{},[1680,134273,134274],{},[1683,134275,134276,134279,134281],{},[1686,134277,134278],{"align":24910},"边偏移属性",[1686,134280,28667],{"align":24910},[1686,134282,28664],{"align":24910},[1723,134284,134285,134296,134307,134317],{},[1683,134286,134287,134290,134293],{},[1728,134288,134289],{"align":24910},"top",[1728,134291,134292],{"align":24910},"top: 80px;",[1728,134294,134295],{"align":24910},"顶端偏移量，定义元素相对于父元素上边线的距离",[1683,134297,134298,134301,134304],{},[1728,134299,134300],{"align":24910},"bottom",[1728,134302,134303],{"align":24910},"bottom: 80px ;",[1728,134305,134306],{"align":24910},"底部偏移量，定义元素相对于其父元素下边线的距离",[1683,134308,134309,134311,134314],{},[1728,134310,24910],{"align":24910},[1728,134312,134313],{"align":24910},"left: 80px ;",[1728,134315,134316],{"align":24910},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1683,134318,134319,134321,134324],{},[1728,134320,73697],{"align":24910},[1728,134322,134323],{"align":24910},"right: 80px ;",[1728,134325,134326],{"align":24910},"右侧偏移量，定义元素相对于其父元素右边线的距离",[27,134328,134329],{},[30,134330,10343,134331,134333,134334,134336,134337,134339,134340,134343,134344,134346,134347,134349],{},[54891,134332],{},"  ① ",[23,134335,134268],{}," 需要和 ",[23,134338,133517],{}," 联合使用， ",[23,134341,134342],{},"单独使用无效"," ；",[54891,134345],{},"  ②top和bottom不要同时使用",[54891,134348],{},"  ③left和right不要同时使用",[23171,134351,134353],{"id":134352},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134355,134356],{},"子级是绝对定位的话，父级要用相对定位",[27,134358,134359,134362,134365,134368],{},[30,134360,134361],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[30,134363,134364],{},"父盒子需要加定位限制子盒子在父盒子内显示",[30,134366,134367],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[30,134369,134370,134371,134374],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[23,134372,134373],{},"子绝父绝"," 也会遇到",[23171,134376,134378],{"id":134377},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[27,134380,134381,134396],{},[30,134382,134383,134384,134387,134388,134391,134392,134395],{},"在使用 ",[23,134385,134386],{},"定位"," 布局时，可能会 ",[23,134389,134390],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[23,134393,134394],{},"z-index"," 来控制盒子的前后次序 (z轴)",[30,134397,6518],{},[99,134399,134400],{"className":127727,"code":133520,"language":127729,"meta":104,"style":104},[106,134401,134402,134408,134420,134434,134448],{"__ignoreMap":104},[109,134403,134404,134406],{"class":111,"line":112},[109,134405,131575],{"class":211},[109,134407,16745],{"class":126},[109,134409,134410,134412,134414,134416,134418],{"class":111,"line":119},[109,134411,133533],{"class":133},[109,134413,52612],{"class":126},[109,134415,55939],{"class":133},[109,134417,131590],{"class":126},[109,134419,133542],{"class":115},[109,134421,134422,134424,134426,134428,134430,134432],{"class":111,"line":140},[109,134423,133547],{"class":133},[109,134425,52612],{"class":126},[109,134427,1008],{"class":133},[109,134429,52667],{"class":122},[109,134431,133556],{"class":126},[109,134433,133559],{"class":115},[109,134435,134436,134438,134440,134442,134444,134446],{"class":111,"line":154},[109,134437,133564],{"class":133},[109,134439,52612],{"class":126},[109,134441,2232],{"class":133},[109,134443,52667],{"class":122},[109,134445,133573],{"class":126},[109,134447,133576],{"class":115},[109,134449,134450],{"class":111,"line":161},[109,134451,742],{"class":126},[27,134453,134454],{},[30,134455,134456,134457,134333,134459,134461,134462,128890,134465,83714,134468,134470,134471,134473,134474,134477,134478,134343,134481,134483,134484,134487,134489],{},"z-index的特性",[54891,134458],{},[23,134460,128191],{}," ： ",[23,134463,134464],{},"正整数",[23,134466,134467],{},"负整数",[23,134469,1314],{}," ，默认值是 0，数值越大，盒子越靠上；",[54891,134472],{},"  ②如果 ",[23,134475,134476],{},"属性值相同"," ，则按照书写顺序， ",[23,134479,134480],{},"后来居上",[54891,134482],{},"  ③数字后面 ",[23,134485,134486],{},"不能加单位",[54891,134488],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23171,134491,134493],{"id":134492},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134495,134496],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134498,134499],{},"方法:",[27,134501,134502,134512],{},[30,134503,134504,134505,134508,134509],{},"left: 50%; 让 ",[23,134506,134507],{},"盒子的左侧"," 移动到 ",[23,134510,134511],{},"父级元素的水平中心位置",[30,134513,134514,134515,134518,134519],{},"margin-left: -100px; 让盒子 ",[23,134516,134517],{},"向左"," 移动 ",[23,134520,134521],{},"自身宽度的一半",[23171,134523,134525],{"id":134524},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[765,134527,134528,134531],{},[30,134529,134530],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[30,134532,134533],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134535,134536],{},"也就是说绝对定位和固定定位和浮动类似",[765,134538,134539],{"start":140},[30,134540,134541],{},"display 是显示模式， 可以改变显示模式有以下方式:",[27,134543,134544,134547,134550],{},[30,134545,134546],{},"可以用inline-block 转换为行内块",[30,134548,134549],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[30,134551,134552],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134554,134555],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23171,134557,134559],{"id":134558},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[765,134561,134562,134565,134568,134571],{},[30,134563,134564],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[30,134566,134567],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[30,134569,134570],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[30,134572,134573],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[99,134575,134576],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,134577,134578,134584,134594,134598,134604,134614],{"__ignoreMap":104},[109,134579,134580,134582],{"class":111,"line":112},[109,134581,132200],{"class":211},[109,134583,16745],{"class":126},[109,134585,134586,134588,134590,134592],{"class":111,"line":119},[109,134587,132207],{"class":133},[109,134589,52612],{"class":126},[109,134591,24910],{"class":133},[109,134593,137],{"class":126},[109,134595,134596],{"class":111,"line":140},[109,134597,742],{"class":126},[109,134599,134600,134602],{"class":111,"line":154},[109,134601,132222],{"class":211},[109,134603,16745],{"class":126},[109,134605,134606,134608,134610,134612],{"class":111,"line":161},[109,134607,132207],{"class":133},[109,134609,52612],{"class":126},[109,134611,73697],{"class":133},[109,134613,137],{"class":126},[109,134615,134616],{"class":111,"line":167},[109,134617,742],{"class":126},[938,134619],{"style":127583,"src":134620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23171,134622,134624],{"id":134623},"_11138-轮播图","11.1.3.8 轮播图",[938,134626],{"style":127583,"src":134627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[765,134629,134630],{},[30,134631,134632],{},"制作顺序:",[27,134634,134635,134638,134641,134650],{},[30,134636,134637],{},"大盒子我们类名为： tb-promo 淘宝广告",[30,134639,134640],{},"里面先放一张图片",[30,134642,134643,134644,134646,134647,134649],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54891,134645],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54891,134648],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[30,134651,134652,134653,134655,134656,134658],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54891,134654],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54891,134657],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[765,134660,134661],{"start":119},[30,134662,134663],{},"代码模块",[99,134665,134667],{"className":127727,"code":134666,"language":127729,"meta":104,"style":104},"\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",[106,134668,134669,134674,134681,134691,134701,134711,134715,134720,134727,134737],{"__ignoreMap":104},[109,134670,134671],{"class":111,"line":112},[109,134672,134673],{"class":115},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[109,134675,134676,134679],{"class":111,"line":119},[109,134677,134678],{"class":211},".son",[109,134680,16745],{"class":126},[109,134682,134683,134685,134687,134689],{"class":111,"line":140},[109,134684,133533],{"class":133},[109,134686,52612],{"class":126},[109,134688,56006],{"class":133},[109,134690,137],{"class":126},[109,134692,134693,134695,134697,134699],{"class":111,"line":154},[109,134694,133547],{"class":133},[109,134696,52612],{"class":126},[109,134698,1314],{"class":133},[109,134700,137],{"class":126},[109,134702,134703,134705,134707,134709],{"class":111,"line":161},[109,134704,133564],{"class":133},[109,134706,52612],{"class":126},[109,134708,1314],{"class":133},[109,134710,137],{"class":126},[109,134712,134713],{"class":111,"line":167},[109,134714,742],{"class":126},[109,134716,134717],{"class":111,"line":185},[109,134718,134719],{"class":115},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[109,134721,134722,134725],{"class":111,"line":201},[109,134723,134724],{"class":211},".father",[109,134726,16745],{"class":126},[109,134728,134729,134731,134733,134735],{"class":111,"line":206},[109,134730,133533],{"class":133},[109,134732,52612],{"class":126},[109,134734,55939],{"class":133},[109,134736,137],{"class":126},[109,134738,134739],{"class":111,"line":218},[109,134740,742],{"class":126},[19,134742,134743],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[51,134745,134747],{"id":134746},"_1114-定位数值的移动","11.1.4 定位数值的移动",[938,134749],{"style":127583,"src":134750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134752,134753],{},"✨ 黄金口诀：",[19,134755,134756],{},"\"TOP正下负上，LEFT正右负左\"",[19,134758,134759],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134761,134762],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134764,134765],{},"✨ 简单记：",[19,134767,134768],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1467,134770,134771],{},"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":104,"searchDepth":119,"depth":119,"links":134773},[134774],{"id":133301,"depth":119,"text":133302,"children":134775},[134776,134777,134778,134779],{"id":133305,"depth":140,"text":133306},{"id":133320,"depth":140,"text":133321},{"id":133488,"depth":140,"text":133489},{"id":134746,"depth":140,"text":134747},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133293,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134786,"title":134787,"body":134788,"description":24550,"extension":1476,"meta":136211,"navigation":157,"path":136212,"seo":136213,"stem":136214,"__hash__":136215},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134789,"toc":136190},[134790,134793,134797,134805,134809,134814,134822,134834,134838,134843,134851,134862,134866,134871,134912,134920,134924,134927,134930,134933,135027,135030,135124,135127,135221,135224,135227,135262,135265,135268,135298,135301,135304,135307,135310,135313,135316,135319,135389,135392,135396,135400,135441,135445,135451,135454,135457,135461,135464,135467,135470,135551,135554,135557,135561,135565,135568,135571,135574,135577,135580,135586,135595,135599,135618,135622,135632,135635,135638,135641,135644,135647,135650,135653,135656,135665,135669,135678,135681,135686,135739,135744,135910,135913,135916,135921,135924,135927,135930,135933,135938,136086,136089,136092,136097,136100,136105,136139,136142,136145,136149,136152,136159,136162,136165,136168,136171,136174,136177,136180,136184,136187],[10,134791,134787],{"id":134792},"_12-显示隐藏与图形资源",[14,134794,134796],{"id":134795},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[27,134798,134799,134802],{},[30,134800,134801],{},"目的:让一个元素在页面中消失或者显示出来",[30,134803,134804],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[51,134806,134808],{"id":134807},"_1211-display-显示","12.1.1 display 显示",[765,134810,134811],{},[30,134812,134813],{},"display 设置或检索对象是否及如何显示",[27,134815,134816,134819],{},[30,134817,134818],{},"display: none;隐藏对象",[30,134820,134821],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[765,134823,134824,134831],{"start":119},[30,134825,134826,134827,134830],{},"特点： display 隐藏元素后， ",[23,134828,134829],{},"不再占"," 有原来的位置",[30,134832,134833],{},"在js中使用非常的广泛",[51,134835,134837],{"id":134836},"_1212-visibility可见性","12.1.2 visibility可见性",[765,134839,134840],{},[30,134841,134842],{},"visibility 属性用于指定一个元素应可见还是隐藏",[27,134844,134845,134848],{},[30,134846,134847],{},"visibility： visible；元素可见",[30,134849,134850],{},"visibility：hidden；元素隐藏",[765,134852,134853,134856,134859],{"start":119},[30,134854,134855],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[30,134857,134858],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[30,134860,134861],{},"隐藏后继续占有原有位置",[51,134863,134865],{"id":134864},"_1213-overflow溢出","12.1.3 overflow溢出",[27,134867,134868],{},[30,134869,134870],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1677,134872,134873,134881],{},[1680,134874,134875],{},[1683,134876,134877,134879],{},[1686,134878,128191],{"align":24910},[1686,134880,28664],{"align":24910},[1723,134882,134883,134891,134898,134905],{},[1683,134884,134885,134888],{},[1728,134886,134887],{"align":24910},"visible",[1728,134889,134890],{"align":24910},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1683,134892,134893,134895],{},[1728,134894,62889],{"align":24910},[1728,134896,134897],{"align":24910},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1683,134899,134900,134902],{},[1728,134901,130147],{"align":24910},[1728,134903,134904],{"align":24910},"不管超出内容否，总是显示滚动条",[1683,134906,134907,134909],{},[1728,134908,73838],{"align":24910},[1728,134910,134911],{"align":24910},"超出自动显示滚动条，不超出不显示滚动条",[27,134913,134914,134917],{},[30,134915,134916],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[30,134918,134919],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[51,134921,134923],{"id":134922},"_1214-案例收获","12.1.4 案例收获",[938,134925],{"style":127583,"src":134926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134928,134929],{},"问题：没做出来动态效果，使用hover没实现",[19,134931,134932],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[99,134934,134935],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},[106,134936,134937,134941,134955,134959,134973,134977,134991,134995,135009,135013],{"__ignoreMap":104},[109,134938,134939],{"class":111,"line":112},[109,134940,133166],{"class":115},[109,134942,134943,134945,134947,134949,134951,134953],{"class":111,"line":119},[109,134944,133171],{"class":211},[109,134946,80982],{"class":126},[109,134948,130087],{"class":133},[109,134950,52612],{"class":126},[109,134952,133180],{"class":133},[109,134954,130657],{"class":126},[109,134956,134957],{"class":111,"line":140},[109,134958,133187],{"class":115},[109,134960,134961,134963,134965,134967,134969,134971],{"class":111,"line":154},[109,134962,133192],{"class":211},[109,134964,80982],{"class":126},[109,134966,130087],{"class":133},[109,134968,52612],{"class":126},[109,134970,55939],{"class":133},[109,134972,130657],{"class":126},[109,134974,134975],{"class":111,"line":161},[109,134976,133207],{"class":115},[109,134978,134979,134981,134983,134985,134987,134989],{"class":111,"line":167},[109,134980,133212],{"class":211},[109,134982,80982],{"class":126},[109,134984,130087],{"class":133},[109,134986,52612],{"class":126},[109,134988,56006],{"class":133},[109,134990,130657],{"class":126},[109,134992,134993],{"class":111,"line":185},[109,134994,133227],{"class":115},[109,134996,134997,134999,135001,135003,135005,135007],{"class":111,"line":201},[109,134998,133232],{"class":211},[109,135000,80982],{"class":126},[109,135002,130087],{"class":133},[109,135004,52612],{"class":126},[109,135006,87408],{"class":133},[109,135008,130657],{"class":126},[109,135010,135011],{"class":111,"line":206},[109,135012,133247],{"class":115},[109,135014,135015,135017,135019,135021,135023,135025],{"class":111,"line":218},[109,135016,133252],{"class":211},[109,135018,80982],{"class":126},[109,135020,130087],{"class":133},[109,135022,52612],{"class":126},[109,135024,133261],{"class":133},[109,135026,130657],{"class":126},[19,135028,135029],{},"完整代码：",[99,135031,135032],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},[106,135033,135034,135038,135052,135056,135070,135074,135088,135092,135106,135110],{"__ignoreMap":104},[109,135035,135036],{"class":111,"line":112},[109,135037,133166],{"class":115},[109,135039,135040,135042,135044,135046,135048,135050],{"class":111,"line":119},[109,135041,133171],{"class":211},[109,135043,80982],{"class":126},[109,135045,130087],{"class":133},[109,135047,52612],{"class":126},[109,135049,133180],{"class":133},[109,135051,130657],{"class":126},[109,135053,135054],{"class":111,"line":140},[109,135055,133187],{"class":115},[109,135057,135058,135060,135062,135064,135066,135068],{"class":111,"line":154},[109,135059,133192],{"class":211},[109,135061,80982],{"class":126},[109,135063,130087],{"class":133},[109,135065,52612],{"class":126},[109,135067,55939],{"class":133},[109,135069,130657],{"class":126},[109,135071,135072],{"class":111,"line":161},[109,135073,133207],{"class":115},[109,135075,135076,135078,135080,135082,135084,135086],{"class":111,"line":167},[109,135077,133212],{"class":211},[109,135079,80982],{"class":126},[109,135081,130087],{"class":133},[109,135083,52612],{"class":126},[109,135085,56006],{"class":133},[109,135087,130657],{"class":126},[109,135089,135090],{"class":111,"line":185},[109,135091,133227],{"class":115},[109,135093,135094,135096,135098,135100,135102,135104],{"class":111,"line":201},[109,135095,133232],{"class":211},[109,135097,80982],{"class":126},[109,135099,130087],{"class":133},[109,135101,52612],{"class":126},[109,135103,87408],{"class":133},[109,135105,130657],{"class":126},[109,135107,135108],{"class":111,"line":206},[109,135109,133247],{"class":115},[109,135111,135112,135114,135116,135118,135120,135122],{"class":111,"line":218},[109,135113,133252],{"class":211},[109,135115,80982],{"class":126},[109,135117,130087],{"class":133},[109,135119,52612],{"class":126},[109,135121,133261],{"class":133},[109,135123,130657],{"class":126},[19,135125,135126],{},"分布思路重点详解：",[99,135128,135129],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},[106,135130,135131,135135,135149,135153,135167,135171,135185,135189,135203,135207],{"__ignoreMap":104},[109,135132,135133],{"class":111,"line":112},[109,135134,133166],{"class":115},[109,135136,135137,135139,135141,135143,135145,135147],{"class":111,"line":119},[109,135138,133171],{"class":211},[109,135140,80982],{"class":126},[109,135142,130087],{"class":133},[109,135144,52612],{"class":126},[109,135146,133180],{"class":133},[109,135148,130657],{"class":126},[109,135150,135151],{"class":111,"line":140},[109,135152,133187],{"class":115},[109,135154,135155,135157,135159,135161,135163,135165],{"class":111,"line":154},[109,135156,133192],{"class":211},[109,135158,80982],{"class":126},[109,135160,130087],{"class":133},[109,135162,52612],{"class":126},[109,135164,55939],{"class":133},[109,135166,130657],{"class":126},[109,135168,135169],{"class":111,"line":161},[109,135170,133207],{"class":115},[109,135172,135173,135175,135177,135179,135181,135183],{"class":111,"line":167},[109,135174,133212],{"class":211},[109,135176,80982],{"class":126},[109,135178,130087],{"class":133},[109,135180,52612],{"class":126},[109,135182,56006],{"class":133},[109,135184,130657],{"class":126},[109,135186,135187],{"class":111,"line":185},[109,135188,133227],{"class":115},[109,135190,135191,135193,135195,135197,135199,135201],{"class":111,"line":201},[109,135192,133232],{"class":211},[109,135194,80982],{"class":126},[109,135196,130087],{"class":133},[109,135198,52612],{"class":126},[109,135200,87408],{"class":133},[109,135202,130657],{"class":126},[109,135204,135205],{"class":111,"line":206},[109,135206,133247],{"class":115},[109,135208,135209,135211,135213,135215,135217,135219],{"class":111,"line":218},[109,135210,133252],{"class":211},[109,135212,80982],{"class":126},[109,135214,130087],{"class":133},[109,135216,52612],{"class":126},[109,135218,133261],{"class":133},[109,135220,130657],{"class":126},[938,135222],{"style":127583,"src":135223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135225,135226],{},"图片太大，盒子太小，此时需要修改图片的大小",[99,135228,135230],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[106,135231,135232],{"__ignoreMap":104},[109,135233,135234,135236,135238,135240,135242,135245,135247,135249,135252,135255,135257,135260],{"class":111,"line":112},[109,135235,1320],{"class":126},[109,135237,938],{"class":52475},[109,135239,56414],{"class":211},[109,135241,130],{"class":126},[109,135243,135244],{"class":278},"\"images\u002Fpic.jpg\"",[109,135246,56422],{"class":211},[109,135248,130],{"class":126},[109,135250,135251],{"class":278},"\"描述文字\"",[109,135253,135254],{"class":211}," title",[109,135256,130],{"class":126},[109,135258,135259],{"class":278},"\"悬停提示\"",[109,135261,52482],{"class":126},[938,135263],{"style":127583,"src":135264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135266,135267],{},"制造遮罩层",[99,135269,135270],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,135271,135272],{"__ignoreMap":104},[109,135273,135274,135276,135278,135280,135282,135284,135286,135288,135290,135292,135294,135296],{"class":111,"line":112},[109,135275,1320],{"class":126},[109,135277,938],{"class":52475},[109,135279,56414],{"class":211},[109,135281,130],{"class":126},[109,135283,135244],{"class":278},[109,135285,56422],{"class":211},[109,135287,130],{"class":126},[109,135289,135251],{"class":278},[109,135291,135254],{"class":211},[109,135293,130],{"class":126},[109,135295,135259],{"class":278},[109,135297,52482],{"class":126},[19,135299,135300],{},"此时是这样的为标准流",[938,135302],{"style":127583,"src":135303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135305,135306],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135308,135309],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135311,135312],{},"让他在中间，用center(background-position)",[19,135314,135315],{},"将需要变的尽可能放到一个盒子中",[19,135317,135318],{},"放大盒子上内部盒子发生变化",[99,135320,135322],{"className":127727,"code":135321,"language":127729,"meta":104,"style":104},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[106,135323,135324,135330,135340,135344,135351,135361,135373,135385],{"__ignoreMap":104},[109,135325,135326,135328],{"class":111,"line":112},[109,135327,128794],{"class":211},[109,135329,16745],{"class":126},[109,135331,135332,135334,135336,135338],{"class":111,"line":119},[109,135333,133533],{"class":133},[109,135335,52612],{"class":126},[109,135337,55939],{"class":133},[109,135339,137],{"class":126},[109,135341,135342],{"class":111,"line":140},[109,135343,742],{"class":126},[109,135345,135346,135349],{"class":111,"line":154},[109,135347,135348],{"class":211},".child",[109,135350,16745],{"class":126},[109,135352,135353,135355,135357,135359],{"class":111,"line":161},[109,135354,133533],{"class":133},[109,135356,52612],{"class":126},[109,135358,56006],{"class":133},[109,135360,137],{"class":126},[109,135362,135363,135365,135367,135369,135371],{"class":111,"line":167},[109,135364,133547],{"class":133},[109,135366,52612],{"class":126},[109,135368,2188],{"class":133},[109,135370,1865],{"class":122},[109,135372,137],{"class":126},[109,135374,135375,135377,135379,135381,135383],{"class":111,"line":185},[109,135376,133564],{"class":133},[109,135378,52612],{"class":126},[109,135380,2188],{"class":133},[109,135382,1865],{"class":122},[109,135384,137],{"class":126},[109,135386,135387],{"class":111,"line":201},[109,135388,742],{"class":126},[19,135390,135391],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135393,135395],{"id":135394},"_122-精灵图","12.2 精灵图",[51,135397,135399],{"id":135398},"_1221-理解","12.2.1 理解",[765,135401,135402,135420],{},[30,135403,135404,135405,133633,135408,135411,135412,135415,135416,135419],{},"目的： ",[23,135406,135407],{},"为了有效地减少服务器接收和发送请求的次数",[23,135409,135410],{},"提高"," 页面的 ",[23,135413,135414],{},"加载速度"," ，出现了 ",[23,135417,135418],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[30,135421,135422,135423,135425,135426,135428,135429,135431,135432,135434,135435,135437,135438,135440],{},"使用精灵图核心：",[54891,135424],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54891,135427],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54891,135430],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54891,135433],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54891,135436],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54891,135439],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[51,135442,135444],{"id":135443},"_1222-扒图","12.2.2 扒图",[99,135446,135449],{"className":135447,"code":135448,"language":6524},[6522],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[106,135450,135448],{"__ignoreMap":104},[938,135452],{"style":127583,"src":135453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[938,135455],{"style":127583,"src":135456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[51,135458,135460],{"id":135459},"_1223-精灵图的实现","12.2.3 精灵图的实现",[938,135462],{"style":127583,"src":135463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135465,135466],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[938,135468],{"style":127583,"src":135469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[99,135471,135473],{"className":127727,"code":135472,"language":127729,"meta":104,"style":104},"\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",[106,135474,135475,135480,135487,135499,135511,135530,135547],{"__ignoreMap":104},[109,135476,135477],{"class":111,"line":112},[109,135478,135479],{"class":115},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[109,135481,135482,135485],{"class":111,"line":119},[109,135483,135484],{"class":211},".icon",[109,135486,16745],{"class":126},[109,135488,135489,135491,135493,135495,135497],{"class":111,"line":140},[109,135490,71743],{"class":133},[109,135492,52612],{"class":126},[109,135494,2232],{"class":133},[109,135496,52667],{"class":122},[109,135498,137],{"class":126},[109,135500,135501,135503,135505,135507,135509],{"class":111,"line":154},[109,135502,71963],{"class":133},[109,135504,52612],{"class":126},[109,135506,2232],{"class":133},[109,135508,52667],{"class":122},[109,135510,137],{"class":126},[109,135512,135513,135515,135517,135519,135521,135524,135526,135528],{"class":111,"line":161},[109,135514,71786],{"class":133},[109,135516,52612],{"class":126},[109,135518,62901],{"class":133},[109,135520,714],{"class":126},[109,135522,135523],{"class":6553},"sprites.png",[109,135525,14887],{"class":126},[109,135527,62911],{"class":133},[109,135529,137],{"class":126},[109,135531,135532,135534,135536,135538,135540,135543,135545],{"class":111,"line":167},[109,135533,129987],{"class":133},[109,135535,52612],{"class":126},[109,135537,52938],{"class":133},[109,135539,52667],{"class":122},[109,135541,135542],{"class":133}," -20",[109,135544,52667],{"class":122},[109,135546,137],{"class":126},[109,135548,135549],{"class":111,"line":185},[109,135550,742],{"class":126},[938,135552],{"style":127583,"src":135553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135555,135556],{},"在前端中坐标轴的正方向是右和下",[14,135558,135560],{"id":135559},"_123-字体图标","12.3 字体图标",[51,135562,135564],{"id":135563},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135566,135567],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135569,135570],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135572,135573],{},"1.图片文件还是比较大的。",[19,135575,135576],{},"2.图片本身放大和缩小会失真。",[19,135578,135579],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135581,135582,135583,26915],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[23,135584,135585],{},"字体图标 iconfont",[19,135587,135588,135591,135592,29560],{},[23,135589,135590],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[23,135593,135594],{},"展示的是图标，本质属于字体",[51,135596,135598],{"id":135597},"_1232-字体图标的优点","12.3.2 字体图标的优点",[27,135600,135601,135606,135609,135612,135615],{},[30,135602,135603,135605],{},[23,135604,27051],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[30,135607,135608],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[30,135610,135611],{},"兼容性：几乎支持所有的浏览器，请放心使用",[30,135613,135614],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[30,135616,135617],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[51,135619,135621],{"id":135620},"_1233-字体库下载网站","12.3.3 字体库下载网站",[27,135623,135624],{},[30,135625,135626,135627],{},"icomoon字体库：",[1776,135628,135631],{"href":135629,"rel":135630},"http:\u002F\u002Ficomoon.io\u002F",[25039],"http:\u002F\u002Ficomoon.io",[19,135633,135634],{},"进去之后点icomoon app",[938,135636],{"style":127583,"src":135637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135639,135640],{},"可以对其编辑：",[938,135642],{"style":127583,"src":135643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135645,135646],{},"生成字体：",[938,135648],{"style":127583,"src":135649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135651,135652],{},"下载：",[938,135654],{"style":127583,"src":135655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[27,135657,135658],{},[30,135659,135660,135661],{},"阿里iconfont字体库： ",[1776,135662,135663],{"href":135663,"rel":135664},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25039],[51,135666,135668],{"id":135667},"_1234-字体图标的引入","12.3.4 字体图标的引入",[765,135670,135671],{},[30,135672,135673,135674,135677],{},"把下载包里面的 ",[23,135675,135676],{},"fonts"," 文件夹放入页面根目录下",[938,135679],{"style":127583,"src":135680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[765,135682,135683],{"start":119},[30,135684,135685],{},"字体文件格式",[1677,135687,135688,135697],{},[1680,135689,135690],{},[1683,135691,135692,135695],{},[1686,135693,135694],{"align":24910},"格式",[1686,135696,24914],{"align":24910},[1723,135698,135699,135709,135719,135729],{},[1683,135700,135701,135706],{},[1728,135702,135703],{"align":24910},[23,135704,135705],{},".ttf",[1728,135707,135708],{"align":24910},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1683,135710,135711,135716],{},[1728,135712,135713],{"align":24910},[23,135714,135715],{},".woff",[1728,135717,135718],{"align":24910},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1683,135720,135721,135726],{},[1728,135722,135723],{"align":24910},[23,135724,135725],{},".eot",[1728,135727,135728],{"align":24910},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1683,135730,135731,135736],{},[1728,135732,135733],{"align":24910},[23,135734,135735],{},"svg",[1728,135737,135738],{"align":24910},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[765,135740,135741],{"start":140},[30,135742,135743],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[99,135745,135747],{"className":127727,"code":135746,"language":127729,"meta":104,"style":104},"\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",[106,135748,135749,135754,135761,135773,135789,135814,135835,135855,135875,135879,135885,135895,135906],{"__ignoreMap":104},[109,135750,135751],{"class":111,"line":112},[109,135752,135753],{"class":115},"\u002F* 引入字体图标 *\u002F\n",[109,135755,135756,135759],{"class":111,"line":119},[109,135757,135758],{"class":122},"@font-face",[109,135760,16745],{"class":126},[109,135762,135763,135766,135768,135771],{"class":111,"line":140},[109,135764,135765],{"class":133},"  font-family",[109,135767,52612],{"class":126},[109,135769,135770],{"class":278},"'icomoon'",[109,135772,137],{"class":126},[109,135774,135775,135778,135780,135782,135784,135787],{"class":111,"line":154},[109,135776,135777],{"class":133},"  src",[109,135779,52612],{"class":126},[109,135781,62901],{"class":133},[109,135783,714],{"class":126},[109,135785,135786],{"class":278},"'fonts\u002Ficomoon.eot'",[109,135788,720],{"class":126},[109,135790,135791,135793,135795,135797,135799,135802,135804,135807,135809,135812],{"class":111,"line":161},[109,135792,135777],{"class":133},[109,135794,52612],{"class":126},[109,135796,62901],{"class":133},[109,135798,714],{"class":126},[109,135800,135801],{"class":278},"'fonts\u002Ficomoon.eot?#iefix'",[109,135803,14887],{"class":126},[109,135805,135806],{"class":133},"format",[109,135808,714],{"class":126},[109,135810,135811],{"class":278},"'embedded-opentype'",[109,135813,39222],{"class":126},[109,135815,135816,135819,135821,135824,135826,135828,135830,135833],{"class":111,"line":167},[109,135817,135818],{"class":133},"       url",[109,135820,714],{"class":126},[109,135822,135823],{"class":278},"'fonts\u002Ficomoon.woff'",[109,135825,14887],{"class":126},[109,135827,135806],{"class":133},[109,135829,714],{"class":126},[109,135831,135832],{"class":278},"'woff'",[109,135834,39222],{"class":126},[109,135836,135837,135839,135841,135844,135846,135848,135850,135853],{"class":111,"line":185},[109,135838,135818],{"class":133},[109,135840,714],{"class":126},[109,135842,135843],{"class":278},"'fonts\u002Ficomoon.ttf'",[109,135845,14887],{"class":126},[109,135847,135806],{"class":133},[109,135849,714],{"class":126},[109,135851,135852],{"class":278},"'truetype'",[109,135854,39222],{"class":126},[109,135856,135857,135859,135861,135864,135866,135868,135870,135873],{"class":111,"line":201},[109,135858,135818],{"class":133},[109,135860,714],{"class":126},[109,135862,135863],{"class":278},"'fonts\u002Ficomoon.svg#icomoon'",[109,135865,14887],{"class":126},[109,135867,135806],{"class":133},[109,135869,714],{"class":126},[109,135871,135872],{"class":278},"'svg'",[109,135874,720],{"class":126},[109,135876,135877],{"class":111,"line":206},[109,135878,742],{"class":126},[109,135880,135881,135883],{"class":111,"line":218},[109,135882,135484],{"class":211},[109,135884,16745],{"class":126},[109,135886,135887,135889,135891,135893],{"class":111,"line":223},[109,135888,135765],{"class":133},[109,135890,52612],{"class":126},[109,135892,135770],{"class":278},[109,135894,137],{"class":126},[109,135896,135897,135900,135902,135904],{"class":111,"line":229},[109,135898,135899],{"class":133},"  font-style",[109,135901,52612],{"class":126},[109,135903,65016],{"class":133},[109,135905,137],{"class":126},[109,135907,135908],{"class":111,"line":244},[109,135909,742],{"class":126},[19,135911,135912],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[938,135914],{"style":127583,"src":135915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[765,135917,135918],{"start":154},[30,135919,135920],{},"添加字体",[938,135922],{"style":127583,"src":135923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135925,135926],{},"复制：",[938,135928],{"style":127583,"src":135929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135931,135932],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[765,135934,135935],{"start":161},[30,135936,135937],{},"代码展示：",[99,135939,135940],{"className":127727,"code":135746,"language":127729,"meta":104,"style":104},[106,135941,135942,135946,135952,135962,135976,135998,136016,136034,136052,136056,136062,136072,136082],{"__ignoreMap":104},[109,135943,135944],{"class":111,"line":112},[109,135945,135753],{"class":115},[109,135947,135948,135950],{"class":111,"line":119},[109,135949,135758],{"class":122},[109,135951,16745],{"class":126},[109,135953,135954,135956,135958,135960],{"class":111,"line":140},[109,135955,135765],{"class":133},[109,135957,52612],{"class":126},[109,135959,135770],{"class":278},[109,135961,137],{"class":126},[109,135963,135964,135966,135968,135970,135972,135974],{"class":111,"line":154},[109,135965,135777],{"class":133},[109,135967,52612],{"class":126},[109,135969,62901],{"class":133},[109,135971,714],{"class":126},[109,135973,135786],{"class":278},[109,135975,720],{"class":126},[109,135977,135978,135980,135982,135984,135986,135988,135990,135992,135994,135996],{"class":111,"line":161},[109,135979,135777],{"class":133},[109,135981,52612],{"class":126},[109,135983,62901],{"class":133},[109,135985,714],{"class":126},[109,135987,135801],{"class":278},[109,135989,14887],{"class":126},[109,135991,135806],{"class":133},[109,135993,714],{"class":126},[109,135995,135811],{"class":278},[109,135997,39222],{"class":126},[109,135999,136000,136002,136004,136006,136008,136010,136012,136014],{"class":111,"line":167},[109,136001,135818],{"class":133},[109,136003,714],{"class":126},[109,136005,135823],{"class":278},[109,136007,14887],{"class":126},[109,136009,135806],{"class":133},[109,136011,714],{"class":126},[109,136013,135832],{"class":278},[109,136015,39222],{"class":126},[109,136017,136018,136020,136022,136024,136026,136028,136030,136032],{"class":111,"line":185},[109,136019,135818],{"class":133},[109,136021,714],{"class":126},[109,136023,135843],{"class":278},[109,136025,14887],{"class":126},[109,136027,135806],{"class":133},[109,136029,714],{"class":126},[109,136031,135852],{"class":278},[109,136033,39222],{"class":126},[109,136035,136036,136038,136040,136042,136044,136046,136048,136050],{"class":111,"line":201},[109,136037,135818],{"class":133},[109,136039,714],{"class":126},[109,136041,135863],{"class":278},[109,136043,14887],{"class":126},[109,136045,135806],{"class":133},[109,136047,714],{"class":126},[109,136049,135872],{"class":278},[109,136051,720],{"class":126},[109,136053,136054],{"class":111,"line":206},[109,136055,742],{"class":126},[109,136057,136058,136060],{"class":111,"line":218},[109,136059,135484],{"class":211},[109,136061,16745],{"class":126},[109,136063,136064,136066,136068,136070],{"class":111,"line":223},[109,136065,135765],{"class":133},[109,136067,52612],{"class":126},[109,136069,135770],{"class":278},[109,136071,137],{"class":126},[109,136073,136074,136076,136078,136080],{"class":111,"line":229},[109,136075,135899],{"class":133},[109,136077,52612],{"class":126},[109,136079,65016],{"class":133},[109,136081,137],{"class":126},[109,136083,136084],{"class":111,"line":244},[109,136085,742],{"class":126},[938,136087],{"style":127583,"src":136088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136090,136091],{},"更加细节展示：",[765,136093,136094],{},[30,136095,136096],{},"html 标签内添加小图标",[938,136098],{"style":127583,"src":136099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[765,136101,136102],{"start":119},[30,136103,136104],{},"给标签定义字体",[99,136106,136107],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,136108,136109,136113,136127,136131],{"__ignoreMap":104},[109,136110,136111],{"class":111,"line":112},[109,136112,131838],{"class":115},[109,136114,136115,136117,136119,136121,136123,136125],{"class":111,"line":119},[109,136116,1320],{"class":126},[109,136118,52786],{"class":52475},[109,136120,54661],{"class":211},[109,136122,130],{"class":126},[109,136124,131851],{"class":278},[109,136126,52482],{"class":126},[109,136128,136129],{"class":111,"line":140},[109,136130,131858],{"class":126},[109,136132,136133,136135,136137],{"class":111,"line":154},[109,136134,52960],{"class":126},[109,136136,52786],{"class":52475},[109,136138,52482],{"class":126},[19,136140,136141],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[938,136143],{"style":127583,"src":136144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[51,136146,136148],{"id":136147},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136150,136151],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136153,136154,136155,136158],{},"把压缩包里面的 ",[23,136156,136157],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136160,136161],{},"打开网站，点下方：",[938,136163],{"style":127583,"src":136164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[938,136166],{"style":127583,"src":136167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[938,136169],{"style":127583,"src":136170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136172,136173],{},"点yes重新加载",[19,136175,136176],{},"然后重复之前的操作就可以实现了",[19,136178,136179],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[51,136181,136183],{"id":136182},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[938,136185],{"style":127583,"src":136186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1467,136188,136189],{},"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":104,"searchDepth":119,"depth":119,"links":136191},[136192,136198,136203],{"id":134795,"depth":119,"text":134796,"children":136193},[136194,136195,136196,136197],{"id":134807,"depth":140,"text":134808},{"id":134836,"depth":140,"text":134837},{"id":134864,"depth":140,"text":134865},{"id":134922,"depth":140,"text":134923},{"id":135394,"depth":119,"text":135395,"children":136199},[136200,136201,136202],{"id":135398,"depth":140,"text":135399},{"id":135443,"depth":140,"text":135444},{"id":135459,"depth":140,"text":135460},{"id":135559,"depth":119,"text":135560,"children":136204},[136205,136206,136207,136208,136209,136210],{"id":135563,"depth":140,"text":135564},{"id":135597,"depth":140,"text":135598},{"id":135620,"depth":140,"text":135621},{"id":135667,"depth":140,"text":135668},{"id":136147,"depth":140,"text":136148},{"id":136182,"depth":140,"text":136183},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134787,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136217,"title":136218,"body":136219,"description":24550,"extension":1476,"meta":137446,"navigation":157,"path":137447,"seo":137448,"stem":137449,"__hash__":137450},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136220,"toc":137427},[136221,136224,136228,136231,136245,136313,136343,136346,136350,136354,136456,136503,136507,136510,136513,136547,136550,136553,136556,136559,136562,136565,136568,136570,136573,136576,136579,136582,136585,136588,136591,136619,136622,136626,136629,136636,136639,136642,136668,136671,136675,136678,136681,136688,136692,136695,136697,136729,136732,136735,136747,136753,136756,136759,136762,136764,136768,136771,136774,136777,136822,136826,136828,136831,136838,136880,136883,136887,136892,136906,136910,136913,136916,136919,136922,136925,136959,136962,136965,137019,137022,137025,137028,137031,137083,137086,137089,137138,137142,137144,137147,137150,137153,137156,137159,137217,137220,137226,137229,137232,137264,137267,137271,137275,137278,137310,137314,137317,137361,137365,137368,137371,137374,137377,137380,137383,137386,137388,137391,137393,137396,137399,137402,137405,137410,137413,137415,137418,137421,137424],[10,136222,136218],{"id":136223},"_13-界面样式与布局技巧",[14,136225,136227],{"id":136226},"_131-css三角","13.1 css三角",[19,136229,136230],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[27,136232,136233,136236,136239,136242],{},[30,136234,136235],{},"用css 边框可以模拟三角效果",[30,136237,136238],{},"宽度高度为0",[30,136240,136241],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[30,136243,136244],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[99,136246,136248],{"className":127727,"code":136247,"language":127729,"meta":104,"style":104},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[106,136249,136250,136255,136262,136272,136282,136298,136309],{"__ignoreMap":104},[109,136251,136252],{"class":111,"line":112},[109,136253,136254],{"class":115},"\u002F* CSS 实现三角形 *\u002F\n",[109,136256,136257,136260],{"class":111,"line":119},[109,136258,136259],{"class":211},".triangle",[109,136261,16745],{"class":126},[109,136263,136264,136266,136268,136270],{"class":111,"line":140},[109,136265,71743],{"class":133},[109,136267,52612],{"class":126},[109,136269,1314],{"class":133},[109,136271,137],{"class":126},[109,136273,136274,136276,136278,136280],{"class":111,"line":154},[109,136275,71963],{"class":133},[109,136277,52612],{"class":126},[109,136279,1314],{"class":133},[109,136281,137],{"class":126},[109,136283,136284,136286,136288,136290,136292,136294,136296],{"class":111,"line":161},[109,136285,72071],{"class":133},[109,136287,52612],{"class":126},[109,136289,1008],{"class":133},[109,136291,52667],{"class":122},[109,136293,52696],{"class":133},[109,136295,65166],{"class":133},[109,136297,137],{"class":126},[109,136299,136300,136303,136305,136307],{"class":111,"line":167},[109,136301,136302],{"class":133},"  border-bottom-color",[109,136304,52612],{"class":126},[109,136306,63544],{"class":133},[109,136308,137],{"class":126},[109,136310,136311],{"class":111,"line":185},[109,136312,742],{"class":126},[99,136314,136315],{"className":127727,"code":131884,"language":127729,"meta":104,"style":104},[106,136316,136317,136323,136339],{"__ignoreMap":104},[109,136318,136319,136321],{"class":111,"line":112},[109,136320,52786],{"class":52475},[109,136322,16745],{"class":126},[109,136324,136325,136327,136329,136331,136333,136335,136337],{"class":111,"line":119},[109,136326,72071],{"class":133},[109,136328,52612],{"class":126},[109,136330,1755],{"class":133},[109,136332,52667],{"class":122},[109,136334,52696],{"class":133},[109,136336,131119],{"class":133},[109,136338,137],{"class":126},[109,136340,136341],{"class":111,"line":140},[109,136342,742],{"class":126},[938,136344],{"style":127583,"src":136345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136347,136349],{"id":136348},"_132-css用户界面样式","13.2 css用户界面样式",[51,136351,136353],{"id":136352},"_1321-鼠标样式","13.2.1 鼠标样式",[99,136355,136357],{"className":127727,"code":136356,"language":127729,"meta":104,"style":104},"\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",[106,136358,136359,136364,136383,136401,136420,136437],{"__ignoreMap":104},[109,136360,136361],{"class":111,"line":112},[109,136362,136363],{"class":115},"\u002F* 鼠标样式 *\u002F\n",[109,136365,136366,136368,136370,136373,136375,136377,136380],{"class":111,"line":119},[109,136367,52786],{"class":52475},[109,136369,80982],{"class":126},[109,136371,136372],{"class":133},"cursor",[109,136374,52612],{"class":126},[109,136376,63205],{"class":133},[109,136378,136379],{"class":126},"; }   ",[109,136381,136382],{"class":115},"\u002F* 手型 *\u002F\n",[109,136384,136385,136387,136389,136391,136393,136396,136398],{"class":111,"line":140},[109,136386,52786],{"class":52475},[109,136388,80982],{"class":126},[109,136390,136372],{"class":133},[109,136392,52612],{"class":126},[109,136394,136395],{"class":133},"default",[109,136397,136379],{"class":126},[109,136399,136400],{"class":115},"\u002F* 默认 *\u002F\n",[109,136402,136403,136405,136407,136409,136411,136414,136417],{"class":111,"line":154},[109,136404,52786],{"class":52475},[109,136406,80982],{"class":126},[109,136408,136372],{"class":133},[109,136410,52612],{"class":126},[109,136412,136413],{"class":133},"move",[109,136415,136416],{"class":126},"; }      ",[109,136418,136419],{"class":115},"\u002F* 移动 *\u002F\n",[109,136421,136422,136424,136426,136428,136430,136432,136434],{"class":111,"line":161},[109,136423,52786],{"class":52475},[109,136425,80982],{"class":126},[109,136427,136372],{"class":133},[109,136429,52612],{"class":126},[109,136431,6524],{"class":133},[109,136433,136416],{"class":126},[109,136435,136436],{"class":115},"\u002F* 文本 *\u002F\n",[109,136438,136439,136441,136443,136445,136447,136450,136453],{"class":111,"line":167},[109,136440,52786],{"class":52475},[109,136442,80982],{"class":126},[109,136444,136372],{"class":133},[109,136446,52612],{"class":126},[109,136448,136449],{"class":133},"not-allowed",[109,136451,136452],{"class":126},"; } ",[109,136454,136455],{"class":115},"\u002F* 禁止 *\u002F\n",[1677,136457,136458,136466],{},[1680,136459,136460],{},[1683,136461,136462,136464],{},[1686,136463,128191],{"align":24910},[1686,136465,28664],{"align":24910},[1723,136467,136468,136475,136482,136489,136496],{},[1683,136469,136470,136472],{},[1728,136471,136395],{"align":24910},[1728,136473,136474],{"align":24910},"小白 默认",[1683,136476,136477,136479],{},[1728,136478,63205],{"align":24910},[1728,136480,136481],{"align":24910},"小手",[1683,136483,136484,136486],{},[1728,136485,136413],{"align":24910},[1728,136487,136488],{"align":24910},"移动",[1683,136490,136491,136493],{},[1728,136492,6524],{"align":24910},[1728,136494,136495],{"align":24910},"文本",[1683,136497,136498,136500],{},[1728,136499,136449],{"align":24910},[1728,136501,136502],{"align":24910},"禁止",[51,136504,136506],{"id":136505},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136508,136509],{},"去除表单轮廓线",[19,136511,136512],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[99,136514,136515],{"className":127727,"code":131091,"language":127729,"meta":104,"style":104},[106,136516,136517,136521,136527,136543],{"__ignoreMap":104},[109,136518,136519],{"class":111,"line":112},[109,136520,131098],{"class":115},[109,136522,136523,136525],{"class":111,"line":119},[109,136524,52786],{"class":52475},[109,136526,16745],{"class":126},[109,136528,136529,136531,136533,136535,136537,136539,136541],{"class":111,"line":140},[109,136530,72071],{"class":133},[109,136532,52612],{"class":126},[109,136534,1755],{"class":133},[109,136536,52667],{"class":122},[109,136538,52696],{"class":133},[109,136540,131119],{"class":133},[109,136542,137],{"class":126},[109,136544,136545],{"class":111,"line":154},[109,136546,742],{"class":126},[19,136548,136549],{},"文本域：",[938,136551],{"style":127583,"src":136552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136554,136555],{},"此时会有一个空白区域",[938,136557],{"style":127583,"src":136558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136560,136561],{},"写在同一行就不会出现这个问题",[938,136563],{"style":127583,"src":136564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136566,136567],{},"文本域是行内块元素，一定记住！！！",[19,136569,99408],{},[938,136571],{"style":127583,"src":136572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136574,136575],{},"文本域尽量放在一行",[19,136577,136578],{},"知识回顾：cols是列，rols是行",[938,136580],{"style":127583,"src":136581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136583,136584],{},"它可以进行拖动，显然这是我们不愿意看到的",[938,136586],{"style":127583,"src":136587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136589,136590],{},"使用resize进行解决",[99,136592,136594],{"className":127727,"code":136593,"language":127729,"meta":104,"style":104},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[106,136595,136596,136602,136615],{"__ignoreMap":104},[109,136597,136598,136600],{"class":111,"line":112},[109,136599,54996],{"class":52475},[109,136601,16745],{"class":126},[109,136603,136604,136606,136608,136610,136612],{"class":111,"line":119},[109,136605,71973],{"class":133},[109,136607,52612],{"class":126},[109,136609,55912],{"class":133},[109,136611,131590],{"class":126},[109,136613,136614],{"class":115},"\u002F* 取消表单轮廓线 *\u002F\n",[109,136616,136617],{"class":111,"line":140},[109,136618,742],{"class":126},[19,136620,136621],{},"此时就无法通过右下方实现拖动了",[51,136623,136625],{"id":136624},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136627,136628],{},"实现一个盒子中的文字和图片对齐",[19,136630,136631,136632,136635],{},"用于设置一个元素的 ",[23,136633,136634],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136637,136638],{},"图片和文字默认是基线对齐",[938,136640],{"style":127583,"src":136641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[99,136643,136644],{"className":127727,"code":136593,"language":127729,"meta":104,"style":104},[106,136645,136646,136652,136664],{"__ignoreMap":104},[109,136647,136648,136650],{"class":111,"line":112},[109,136649,54996],{"class":52475},[109,136651,16745],{"class":126},[109,136653,136654,136656,136658,136660,136662],{"class":111,"line":119},[109,136655,71973],{"class":133},[109,136657,52612],{"class":126},[109,136659,55912],{"class":133},[109,136661,131590],{"class":126},[109,136663,136614],{"class":115},[109,136665,136666],{"class":111,"line":140},[109,136667,742],{"class":126},[938,136669],{"style":127583,"src":136670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23171,136672,136674],{"id":136673},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136676,136677],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[938,136679],{"style":127583,"src":136680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136682,136683,136684,136687],{},"此时可以给图片、表单这些行内块元素的 ",[23,136685,136686],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23171,136689,136691],{"id":136690},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136693,136694],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136696,15806],{},[99,136698,136700],{"className":127727,"code":136699,"language":127729,"meta":104,"style":104},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[106,136701,136702,136707,136713,136725],{"__ignoreMap":104},[109,136703,136704],{"class":111,"line":112},[109,136705,136706],{"class":115},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[109,136708,136709,136711],{"class":111,"line":119},[109,136710,938],{"class":52475},[109,136712,16745],{"class":126},[109,136714,136715,136718,136720,136723],{"class":111,"line":140},[109,136716,136717],{"class":133},"  vertical-align",[109,136719,52612],{"class":126},[109,136721,136722],{"class":133},"middle",[109,136724,137],{"class":126},[109,136726,136727],{"class":111,"line":154},[109,136728,742],{"class":126},[938,136730],{"style":127583,"src":136731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136733,136734],{},"主要解决方法有两种：",[765,136736,136737],{},[30,136738,136739,136742,136743,136746],{},[23,136740,136741],{},"给图片"," 添加 ",[23,136744,136745],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136748,136749,136750],{},"2.把图片转换为块级元素 ",[23,136751,136752],{},"display: block",[19,136754,136755],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136757,136758],{},"img {",[19,136760,136761],{},"vertical-align:middle;",[19,136763,2476],{},[51,136765,136767],{"id":136766},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136769,136770],{},"效果：",[938,136772],{"style":127583,"src":136773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136775,136776],{},"单行文本溢出显示省略号--必须满足三个条件：",[99,136778,136780],{"className":127727,"code":136779,"language":127729,"meta":104,"style":104},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[106,136781,136782,136787,136793,136803,136808,136818],{"__ignoreMap":104},[109,136783,136784],{"class":111,"line":112},[109,136785,136786],{"class":115},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[109,136788,136789,136791],{"class":111,"line":119},[109,136790,938],{"class":52475},[109,136792,16745],{"class":126},[109,136794,136795,136797,136799,136801],{"class":111,"line":140},[109,136796,136717],{"class":133},[109,136798,52612],{"class":126},[109,136800,136722],{"class":133},[109,136802,137],{"class":126},[109,136804,136805],{"class":111,"line":154},[109,136806,136807],{"class":115},"  \u002F* 或 *\u002F\n",[109,136809,136810,136812,136814,136816],{"class":111,"line":161},[109,136811,129343],{"class":133},[109,136813,52612],{"class":126},[109,136815,62044],{"class":133},[109,136817,137],{"class":126},[109,136819,136820],{"class":111,"line":167},[109,136821,742],{"class":126},[51,136823,136825],{"id":136824},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136827,136770],{},[938,136829],{"style":127583,"src":136830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136832,136833,136834,136837],{},"多行文本溢出显示省略号， ",[23,136835,136836],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[99,136839,136840],{"className":127727,"code":136779,"language":127729,"meta":104,"style":104},[106,136841,136842,136846,136852,136862,136866,136876],{"__ignoreMap":104},[109,136843,136844],{"class":111,"line":112},[109,136845,136786],{"class":115},[109,136847,136848,136850],{"class":111,"line":119},[109,136849,938],{"class":52475},[109,136851,16745],{"class":126},[109,136853,136854,136856,136858,136860],{"class":111,"line":140},[109,136855,136717],{"class":133},[109,136857,52612],{"class":126},[109,136859,136722],{"class":133},[109,136861,137],{"class":126},[109,136863,136864],{"class":111,"line":154},[109,136865,136807],{"class":115},[109,136867,136868,136870,136872,136874],{"class":111,"line":161},[109,136869,129343],{"class":133},[109,136871,52612],{"class":126},[109,136873,62044],{"class":133},[109,136875,137],{"class":126},[109,136877,136878],{"class":111,"line":167},[109,136879,742],{"class":126},[19,136881,136882],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136884,136886],{"id":136885},"_133-常见布局技巧","13.3 常见布局技巧",[19,136888,136889],{},[23,136890,136891],{},"巧妙利用一个技术更快更好的布局：",[765,136893,136894,136897,136900,136903],{},[30,136895,136896],{},"margin负值的运用",[30,136898,136899],{},"文字围绕浮动元素",[30,136901,136902],{},"行内块的巧妙运用",[30,136904,136905],{},"CSS三角强化",[51,136907,136909],{"id":136908},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136911,136912],{},"应用场景：",[938,136914],{"style":127583,"src":136915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[938,136917],{"style":127583,"src":136918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136920,136921],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136923,136924],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[99,136926,136927],{"className":127727,"code":131091,"language":127729,"meta":104,"style":104},[106,136928,136929,136933,136939,136955],{"__ignoreMap":104},[109,136930,136931],{"class":111,"line":112},[109,136932,131098],{"class":115},[109,136934,136935,136937],{"class":111,"line":119},[109,136936,52786],{"class":52475},[109,136938,16745],{"class":126},[109,136940,136941,136943,136945,136947,136949,136951,136953],{"class":111,"line":140},[109,136942,72071],{"class":133},[109,136944,52612],{"class":126},[109,136946,1755],{"class":133},[109,136948,52667],{"class":122},[109,136950,52696],{"class":133},[109,136952,131119],{"class":133},[109,136954,137],{"class":126},[109,136956,136957],{"class":111,"line":154},[109,136958,742],{"class":126},[938,136960],{"style":127583,"src":136961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136963,136964],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[99,136966,136968],{"className":127727,"code":136967,"language":127729,"meta":104,"style":104},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[106,136969,136970,136975,136981,136991,137003,137015],{"__ignoreMap":104},[109,136971,136972],{"class":111,"line":112},[109,136973,136974],{"class":115},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[109,136976,136977,136979],{"class":111,"line":119},[109,136978,131575],{"class":211},[109,136980,16745],{"class":126},[109,136982,136983,136985,136987,136989],{"class":111,"line":140},[109,136984,133533],{"class":133},[109,136986,52612],{"class":126},[109,136988,55939],{"class":133},[109,136990,137],{"class":126},[109,136992,136993,136995,136997,136999,137001],{"class":111,"line":154},[109,136994,133547],{"class":133},[109,136996,52612],{"class":126},[109,136998,1008],{"class":133},[109,137000,52667],{"class":122},[109,137002,137],{"class":126},[109,137004,137005,137007,137009,137011,137013],{"class":111,"line":161},[109,137006,133564],{"class":133},[109,137008,52612],{"class":126},[109,137010,2232],{"class":133},[109,137012,52667],{"class":122},[109,137014,137],{"class":126},[109,137016,137017],{"class":111,"line":167},[109,137018,742],{"class":126},[19,137020,137021],{},"加上上述代码会发现：",[938,137023],{"style":127583,"src":137024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137026,137027],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137029,137030],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[99,137032,137033],{"className":127727,"code":136967,"language":127729,"meta":104,"style":104},[106,137034,137035,137039,137045,137055,137067,137079],{"__ignoreMap":104},[109,137036,137037],{"class":111,"line":112},[109,137038,136974],{"class":115},[109,137040,137041,137043],{"class":111,"line":119},[109,137042,131575],{"class":211},[109,137044,16745],{"class":126},[109,137046,137047,137049,137051,137053],{"class":111,"line":140},[109,137048,133533],{"class":133},[109,137050,52612],{"class":126},[109,137052,55939],{"class":133},[109,137054,137],{"class":126},[109,137056,137057,137059,137061,137063,137065],{"class":111,"line":154},[109,137058,133547],{"class":133},[109,137060,52612],{"class":126},[109,137062,1008],{"class":133},[109,137064,52667],{"class":122},[109,137066,137],{"class":126},[109,137068,137069,137071,137073,137075,137077],{"class":111,"line":161},[109,137070,133564],{"class":133},[109,137072,52612],{"class":126},[109,137074,2232],{"class":133},[109,137076,52667],{"class":122},[109,137078,137],{"class":126},[109,137080,137081],{"class":111,"line":167},[109,137082,742],{"class":126},[19,137084,137085],{},"解决方式2：",[19,137087,137088],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[99,137090,137092],{"className":127727,"code":137091,"language":127729,"meta":104,"style":104},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[106,137093,137094,137100,137110,137122,137134],{"__ignoreMap":104},[109,137095,137096,137098],{"class":111,"line":112},[109,137097,52786],{"class":52475},[109,137099,16745],{"class":126},[109,137101,137102,137104,137106,137108],{"class":111,"line":119},[109,137103,133533],{"class":133},[109,137105,52612],{"class":126},[109,137107,55939],{"class":133},[109,137109,137],{"class":126},[109,137111,137112,137114,137116,137118,137120],{"class":111,"line":140},[109,137113,133547],{"class":133},[109,137115,52612],{"class":126},[109,137117,1008],{"class":133},[109,137119,52667],{"class":122},[109,137121,137],{"class":126},[109,137123,137124,137126,137128,137130,137132],{"class":111,"line":154},[109,137125,133564],{"class":133},[109,137127,52612],{"class":126},[109,137129,2232],{"class":133},[109,137131,52667],{"class":122},[109,137133,137],{"class":126},[109,137135,137136],{"class":111,"line":161},[109,137137,742],{"class":126},[51,137139,137141],{"id":137140},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137143,136912],{},[938,137145],{"style":127583,"src":137146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137148,137149],{},"实现结构图：",[938,137151],{"style":127583,"src":137152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137154,137155],{},"巧妙运用浮动元素不会压住文字的特性",[19,137157,137158],{},"代码显示：",[99,137160,137162],{"className":127727,"code":137161,"language":127729,"meta":104,"style":104},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[106,137163,137164,137170,137180,137184,137189,137193,137199,137213],{"__ignoreMap":104},[109,137165,137166,137168],{"class":111,"line":112},[109,137167,131575],{"class":211},[109,137169,16745],{"class":126},[109,137171,137172,137174,137176,137178],{"class":111,"line":119},[109,137173,132207],{"class":133},[109,137175,52612],{"class":126},[109,137177,24910],{"class":133},[109,137179,137],{"class":126},[109,137181,137182],{"class":111,"line":140},[109,137183,742],{"class":126},[109,137185,137186],{"class":111,"line":154},[109,137187,137188],{"class":126},"```Css\n",[109,137190,137191],{"class":111,"line":161},[109,137192,131570],{"class":115},[109,137194,137195,137197],{"class":111,"line":167},[109,137196,131575],{"class":211},[109,137198,16745],{"class":126},[109,137200,137201,137203,137205,137207,137209,137211],{"class":111,"line":185},[109,137202,71645],{"class":133},[109,137204,52612],{"class":126},[109,137206,1314],{"class":133},[109,137208,52731],{"class":133},[109,137210,131590],{"class":126},[109,137212,131593],{"class":115},[109,137214,137215],{"class":111,"line":201},[109,137216,742],{"class":126},[19,137218,137219],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[99,137221,137224],{"className":137222,"code":137223,"language":6524},[6522],"\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",[106,137225,137223],{"__ignoreMap":104},[938,137227],{"style":127583,"src":137228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137230,137231],{},"最终展示结果：",[99,137233,137234],{"className":127727,"code":131563,"language":127729,"meta":104,"style":104},[106,137235,137236,137240,137246,137260],{"__ignoreMap":104},[109,137237,137238],{"class":111,"line":112},[109,137239,131570],{"class":115},[109,137241,137242,137244],{"class":111,"line":119},[109,137243,131575],{"class":211},[109,137245,16745],{"class":126},[109,137247,137248,137250,137252,137254,137256,137258],{"class":111,"line":140},[109,137249,71645],{"class":133},[109,137251,52612],{"class":126},[109,137253,1314],{"class":133},[109,137255,52731],{"class":133},[109,137257,131590],{"class":126},[109,137259,131593],{"class":115},[109,137261,137262],{"class":111,"line":154},[109,137263,742],{"class":126},[938,137265],{"style":127583,"src":137266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137268,137270],{"id":137269},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[51,137272,137274],{"id":137273},"_1341-原理","13.4.1 原理",[938,137276],{"style":127583,"src":137277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[99,137279,137280],{"className":127727,"code":131563,"language":127729,"meta":104,"style":104},[106,137281,137282,137286,137292,137306],{"__ignoreMap":104},[109,137283,137284],{"class":111,"line":112},[109,137285,131570],{"class":115},[109,137287,137288,137290],{"class":111,"line":119},[109,137289,131575],{"class":211},[109,137291,16745],{"class":126},[109,137293,137294,137296,137298,137300,137302,137304],{"class":111,"line":140},[109,137295,71645],{"class":133},[109,137297,52612],{"class":126},[109,137299,1314],{"class":133},[109,137301,52731],{"class":133},[109,137303,131590],{"class":126},[109,137305,131593],{"class":115},[109,137307,137308],{"class":111,"line":154},[109,137309,742],{"class":126},[51,137311,137313],{"id":137312},"_1342-实例","13.4.2 实例",[938,137315],{"style":127583,"src":137316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[99,137318,137319],{"className":127727,"code":132193,"language":127729,"meta":104,"style":104},[106,137320,137321,137327,137337,137341,137347,137357],{"__ignoreMap":104},[109,137322,137323,137325],{"class":111,"line":112},[109,137324,132200],{"class":211},[109,137326,16745],{"class":126},[109,137328,137329,137331,137333,137335],{"class":111,"line":119},[109,137330,132207],{"class":133},[109,137332,52612],{"class":126},[109,137334,24910],{"class":133},[109,137336,137],{"class":126},[109,137338,137339],{"class":111,"line":140},[109,137340,742],{"class":126},[109,137342,137343,137345],{"class":111,"line":154},[109,137344,132222],{"class":211},[109,137346,16745],{"class":126},[109,137348,137349,137351,137353,137355],{"class":111,"line":161},[109,137350,132207],{"class":133},[109,137352,52612],{"class":126},[109,137354,73697],{"class":133},[109,137356,137],{"class":126},[109,137358,137359],{"class":111,"line":167},[109,137360,742],{"class":126},[14,137362,137364],{"id":137363},"_135-css的初始化","13.5 css的初始化",[19,137366,137367],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137369,137370],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137372,137373],{},"每个网页都必须首先进行 CSS初始化。",[19,137375,137376],{},"这里我们以 京东CSS初始化代码为例。",[19,137378,137379],{},"在网页右键查看网页源代码",[19,137381,137382],{},"找到css的link引入语句",[19,137384,137385],{},"然后ctrl+f 输入body",[19,137387,78401],{},[938,137389],{"style":127583,"src":137390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137392,78424],{},[938,137394],{"style":127583,"src":137395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137397,137398],{},"③打开了网页上传压缩的代码",[938,137400],{"style":127583,"src":137401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137403,137404],{},"④从body前可以查看这个网页的初始化代码",[19,137406,137407],{},[23,137408,137409],{},"Unicode编码字体：",[19,137411,137412],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137414,84382],{},[19,137416,137417],{},"黑体 \\9ED1\\4F53",[19,137419,137420],{},"宋体 \\5B8B\\4F53",[19,137422,137423],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1467,137425,137426],{},"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":104,"searchDepth":119,"depth":119,"links":137428},[137429,137430,137437,137441,137445],{"id":136226,"depth":119,"text":136227},{"id":136348,"depth":119,"text":136349,"children":137431},[137432,137433,137434,137435,137436],{"id":136352,"depth":140,"text":136353},{"id":136505,"depth":140,"text":136506},{"id":136624,"depth":140,"text":136625},{"id":136766,"depth":140,"text":136767},{"id":136824,"depth":140,"text":136825},{"id":136885,"depth":119,"text":136886,"children":137438},[137439,137440],{"id":136908,"depth":140,"text":136909},{"id":137140,"depth":140,"text":137141},{"id":137269,"depth":119,"text":137270,"children":137442},[137443,137444],{"id":137273,"depth":140,"text":137274},{"id":137312,"depth":140,"text":137313},{"id":137363,"depth":119,"text":137364},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136218,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137452,"title":137453,"body":137454,"description":24550,"extension":1476,"meta":139140,"navigation":157,"path":139141,"seo":139142,"stem":139143,"__hash__":139144},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137455,"toc":139129},[137456,137459,137463,137467,137470,137477,137480,137483,137521,137524,137526,137540,137544,137553,137557,137562,137565,137568,137571,137606,137611,137614,137644,137647,137652,137655,137658,137688,137691,137745,137748,137752,137757,137769,137772,137776,137806,137809,137814,137817,137847,137850,137854,137871,137875,137879,137882,137915,137918,137922,137925,137928,137931,137934,137937,138048,138051,138054,138057,138159,138162,138166,138170,138174,138177,138217,138220,138222,138238,138242,138245,138250,138331,138334,138337,138463,138468,138471,138479,138482,138487,138572,138575,138579,138582,138585,138589,138609,138614,138698,138701,138706,138709,138712,138790,138793,138796,138799,138802,138805,138810,138813,138816,138888,138891,138896,138899,138996,138999,139005,139008,139011,139014,139017,139020,139023,139026,139029,139033,139038,139041,139074,139079,139082,139123,139126],[10,137457,137453],{"id":137458},"_14-html5与css3新特性",[14,137460,137462],{"id":137461},"_141-html5的新特性","14.1 HTML5的新特性",[51,137464,137466],{"id":137465},"_1411-基本标签","14.1.1 基本标签",[19,137468,137469],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137471,137472,137473,137476],{},"这些新特性都有兼容性问题，基本是 ",[23,137474,137475],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137478,137479],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137481,137482],{},"现在使用的是新特性：",[27,137484,137485,137491,137497,137503,137509,137515],{},[30,137486,137487,137490],{},[106,137488,137489],{},"\u003Cheader>"," 头部标签",[30,137492,137493,137496],{},[106,137494,137495],{},"\u003Cnav>"," 导航标签",[30,137498,137499,137502],{},[106,137500,137501],{},"\u003Carticle>"," 内容标签",[30,137504,137505,137508],{},[106,137506,137507],{},"\u003Csection>"," 定义文档某个区域",[30,137510,137511,137514],{},[106,137512,137513],{},"\u003Caside>"," 侧边栏标签",[30,137516,137517,137520],{},[106,137518,137519],{},"\u003Cfooter>"," 尾部标签",[938,137522],{"style":127583,"src":137523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137525,1574],{},[27,137527,137528,137531,137534,137537],{},[30,137529,137530],{},"这种语义化标准主要是针对搜索引擎的",[30,137532,137533],{},"这些标签页面中可以经常使用",[30,137535,137536],{},"在IE9中，需要把这些元素转换为块级元素",[30,137538,137539],{},"移动端更喜欢使用这些标签",[51,137541,137543],{"id":137542},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137545,137546,137547,137549,137550,137552],{},"音频 ",[23,137548,29349],{}," 和视频 ",[23,137551,29358],{}," 两个标签",[23171,137554,137556],{"id":137555},"_14121-视频标签-video","14.1.2.1 视频标签- video",[765,137558,137559],{},[30,137560,137561],{},"支持格式：",[938,137563],{"style":127583,"src":137564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137566,137567],{},"尽量使用MP4，兼容性好",[19,137569,137570],{},"用MP4就可以",[99,137572,137574],{"className":128474,"code":137573,"language":128476,"meta":104,"style":104},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[106,137575,137576],{"__ignoreMap":104},[109,137577,137578,137580,137582,137584,137586,137589,137591,137594,137597,137600,137602,137604],{"class":111,"line":112},[109,137579,1320],{"class":126},[109,137581,29358],{"class":52475},[109,137583,56414],{"class":211},[109,137585,130],{"class":126},[109,137587,137588],{"class":278},"\"movie.mp4\"",[109,137590,93598],{"class":211},[109,137592,137593],{"class":211}," autoplay",[109,137595,137596],{"class":211}," muted",[109,137598,137599],{"class":211}," loop",[109,137601,56489],{"class":126},[109,137603,29358],{"class":52475},[109,137605,52482],{"class":126},[765,137607,137608],{"start":119},[30,137609,137610],{},"兼容写法",[19,137612,137613],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[99,137615,137616],{"className":128474,"code":137573,"language":128476,"meta":104,"style":104},[106,137617,137618],{"__ignoreMap":104},[109,137619,137620,137622,137624,137626,137628,137630,137632,137634,137636,137638,137640,137642],{"class":111,"line":112},[109,137621,1320],{"class":126},[109,137623,29358],{"class":52475},[109,137625,56414],{"class":211},[109,137627,130],{"class":126},[109,137629,137588],{"class":278},[109,137631,93598],{"class":211},[109,137633,137593],{"class":211},[109,137635,137596],{"class":211},[109,137637,137599],{"class":211},[109,137639,56489],{"class":126},[109,137641,29358],{"class":52475},[109,137643,52482],{"class":126},[19,137645,137646],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[765,137648,137649],{"start":140},[30,137650,137651],{},"video常用属性",[938,137653],{"style":127583,"src":137654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137656,137657],{},"poster属性后面是跟的等待加载图片的地址",[99,137659,137660],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,137661,137662],{"__ignoreMap":104},[109,137663,137664,137666,137668,137670,137672,137674,137676,137678,137680,137682,137684,137686],{"class":111,"line":112},[109,137665,1320],{"class":126},[109,137667,938],{"class":52475},[109,137669,56414],{"class":211},[109,137671,130],{"class":126},[109,137673,135244],{"class":278},[109,137675,56422],{"class":211},[109,137677,130],{"class":126},[109,137679,135251],{"class":278},[109,137681,135254],{"class":211},[109,137683,130],{"class":126},[109,137685,135259],{"class":278},[109,137687,52482],{"class":126},[19,137689,137690],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[99,137692,137694],{"className":127727,"code":137693,"language":127729,"meta":104,"style":104},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[106,137695,137696,137701,137707,137731,137736,137741],{"__ignoreMap":104},[109,137697,137698],{"class":111,"line":112},[109,137699,137700],{"class":115},"\u002F* 2D 位移 *\u002F\n",[109,137702,137703,137705],{"class":111,"line":119},[109,137704,52786],{"class":52475},[109,137706,16745],{"class":126},[109,137708,137709,137712,137714,137717,137719,137721,137723,137725,137727,137729],{"class":111,"line":140},[109,137710,137711],{"class":133},"  transform",[109,137713,52612],{"class":126},[109,137715,137716],{"class":133},"translate",[109,137718,714],{"class":126},[109,137720,1351],{"class":133},[109,137722,52667],{"class":122},[109,137724,13608],{"class":126},[109,137726,2188],{"class":133},[109,137728,52667],{"class":122},[109,137730,720],{"class":126},[109,137732,137733],{"class":111,"line":154},[109,137734,137735],{"class":115},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[109,137737,137738],{"class":111,"line":161},[109,137739,137740],{"class":115},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[109,137742,137743],{"class":111,"line":167},[109,137744,742],{"class":126},[19,137746,137747],{},"muted:自动静音属性",[23171,137749,137751],{"id":137750},"_14122-音频标签audio","14.1.2.2 音频标签audio",[765,137753,137754],{},[30,137755,137756],{},"基本使用",[19,137758,137759,137760,137765,137766],{},"当前 ",[23,137761,137762],{},[106,137763,137764],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[23,137767,137768],{},"mp3格式",[938,137770],{"style":127583,"src":137771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[765,137773,137774],{"start":119},[30,137775,137610],{},[99,137777,137778],{"className":128474,"code":137573,"language":128476,"meta":104,"style":104},[106,137779,137780],{"__ignoreMap":104},[109,137781,137782,137784,137786,137788,137790,137792,137794,137796,137798,137800,137802,137804],{"class":111,"line":112},[109,137783,1320],{"class":126},[109,137785,29358],{"class":52475},[109,137787,56414],{"class":211},[109,137789,130],{"class":126},[109,137791,137588],{"class":278},[109,137793,93598],{"class":211},[109,137795,137593],{"class":211},[109,137797,137596],{"class":211},[109,137799,137599],{"class":211},[109,137801,56489],{"class":126},[109,137803,29358],{"class":52475},[109,137805,52482],{"class":126},[19,137807,137808],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[765,137810,137811],{"start":140},[30,137812,137813],{},"常用属性",[938,137815],{"style":127583,"src":137816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[99,137818,137819],{"className":128474,"code":137573,"language":128476,"meta":104,"style":104},[106,137820,137821],{"__ignoreMap":104},[109,137822,137823,137825,137827,137829,137831,137833,137835,137837,137839,137841,137843,137845],{"class":111,"line":112},[109,137824,1320],{"class":126},[109,137826,29358],{"class":52475},[109,137828,56414],{"class":211},[109,137830,130],{"class":126},[109,137832,137588],{"class":278},[109,137834,93598],{"class":211},[109,137836,137593],{"class":211},[109,137838,137596],{"class":211},[109,137840,137599],{"class":211},[109,137842,56489],{"class":126},[109,137844,29358],{"class":52475},[109,137846,52482],{"class":126},[19,137848,137849],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23171,137851,137853],{"id":137852},"_14123-总结","14.1.2.3 总结",[27,137855,137856,137859,137862,137865,137868],{},[30,137857,137858],{},"音频标签和视频标签使用方式基本一致",[30,137860,137861],{},"浏览器支持情况不同",[30,137863,137864],{},"谷歌浏览器把音频和视频自动播放禁止了",[30,137866,137867],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[30,137869,137870],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[51,137872,137874],{"id":137873},"_1413-表单元素","14.1.3 表单元素",[23171,137876,137878],{"id":137877},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[938,137880],{"style":127583,"src":137881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[99,137883,137885],{"className":128474,"code":137884,"language":128476,"meta":104,"style":104},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[106,137886,137887],{"__ignoreMap":104},[109,137888,137889,137891,137893,137895,137897,137899,137901,137903,137906,137908,137910,137913],{"class":111,"line":112},[109,137890,1320],{"class":126},[109,137892,54996],{"class":52475},[109,137894,54999],{"class":211},[109,137896,130],{"class":126},[109,137898,63874],{"class":278},[109,137900,16093],{"class":211},[109,137902,130],{"class":126},[109,137904,137905],{"class":278},"\"username\"",[109,137907,62195],{"class":211},[109,137909,130],{"class":126},[109,137911,137912],{"class":278},"\"请输入用户名\"",[109,137914,52482],{"class":126},[938,137916],{"style":127583,"src":137917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23171,137919,137921],{"id":137920},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[938,137923],{"style":127583,"src":137924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137926,137927],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137929,137930],{},"快捷操作：",[938,137932],{"style":127583,"src":137933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137935,137936],{},"例子1：",[99,137938,137940],{"className":128474,"code":137939,"language":128476,"meta":104,"style":104},"\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",[106,137941,137942,137965,137992,138021,138040],{"__ignoreMap":104},[109,137943,137944,137946,137948,137950,137952,137955,137958,137960,137963],{"class":111,"line":112},[109,137945,1320],{"class":126},[109,137947,67800],{"class":52475},[109,137949,67803],{"class":211},[109,137951,130],{"class":126},[109,137953,137954],{"class":278},"\"\u002Fsubmit\"",[109,137956,137957],{"class":211}," method",[109,137959,130],{"class":126},[109,137961,137962],{"class":278},"\"post\"",[109,137964,52482],{"class":126},[109,137966,137967,137969,137971,137973,137975,137977,137979,137981,137983,137985,137987,137990],{"class":111,"line":119},[109,137968,53319],{"class":126},[109,137970,54996],{"class":52475},[109,137972,54999],{"class":211},[109,137974,130],{"class":126},[109,137976,63874],{"class":278},[109,137978,16093],{"class":211},[109,137980,130],{"class":126},[109,137982,137905],{"class":278},[109,137984,62195],{"class":211},[109,137986,130],{"class":126},[109,137988,137989],{"class":278},"\"用户名\"",[109,137991,52482],{"class":126},[109,137993,137994,137996,137998,138000,138002,138005,138007,138009,138012,138014,138016,138019],{"class":111,"line":140},[109,137995,53319],{"class":126},[109,137997,54996],{"class":52475},[109,137999,54999],{"class":211},[109,138001,130],{"class":126},[109,138003,138004],{"class":278},"\"password\"",[109,138006,16093],{"class":211},[109,138008,130],{"class":126},[109,138010,138011],{"class":278},"\"pwd\"",[109,138013,62195],{"class":211},[109,138015,130],{"class":126},[109,138017,138018],{"class":278},"\"密码\"",[109,138020,52482],{"class":126},[109,138022,138023,138025,138027,138029,138031,138033,138036,138038],{"class":111,"line":154},[109,138024,53319],{"class":126},[109,138026,55062],{"class":52475},[109,138028,54999],{"class":211},[109,138030,130],{"class":126},[109,138032,67823],{"class":278},[109,138034,138035],{"class":126},">提交\u003C\u002F",[109,138037,55062],{"class":52475},[109,138039,52482],{"class":126},[109,138041,138042,138044,138046],{"class":111,"line":161},[109,138043,52960],{"class":126},[109,138045,67800],{"class":52475},[109,138047,52482],{"class":126},[938,138049],{"style":127583,"src":138050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138052,138053],{},"value是表单域的内容",[19,138055,138056],{},"例子2：",[99,138058,138059],{"className":128474,"code":137939,"language":128476,"meta":104,"style":104},[106,138060,138061,138081,138107,138133,138151],{"__ignoreMap":104},[109,138062,138063,138065,138067,138069,138071,138073,138075,138077,138079],{"class":111,"line":112},[109,138064,1320],{"class":126},[109,138066,67800],{"class":52475},[109,138068,67803],{"class":211},[109,138070,130],{"class":126},[109,138072,137954],{"class":278},[109,138074,137957],{"class":211},[109,138076,130],{"class":126},[109,138078,137962],{"class":278},[109,138080,52482],{"class":126},[109,138082,138083,138085,138087,138089,138091,138093,138095,138097,138099,138101,138103,138105],{"class":111,"line":119},[109,138084,53319],{"class":126},[109,138086,54996],{"class":52475},[109,138088,54999],{"class":211},[109,138090,130],{"class":126},[109,138092,63874],{"class":278},[109,138094,16093],{"class":211},[109,138096,130],{"class":126},[109,138098,137905],{"class":278},[109,138100,62195],{"class":211},[109,138102,130],{"class":126},[109,138104,137989],{"class":278},[109,138106,52482],{"class":126},[109,138108,138109,138111,138113,138115,138117,138119,138121,138123,138125,138127,138129,138131],{"class":111,"line":140},[109,138110,53319],{"class":126},[109,138112,54996],{"class":52475},[109,138114,54999],{"class":211},[109,138116,130],{"class":126},[109,138118,138004],{"class":278},[109,138120,16093],{"class":211},[109,138122,130],{"class":126},[109,138124,138011],{"class":278},[109,138126,62195],{"class":211},[109,138128,130],{"class":126},[109,138130,138018],{"class":278},[109,138132,52482],{"class":126},[109,138134,138135,138137,138139,138141,138143,138145,138147,138149],{"class":111,"line":154},[109,138136,53319],{"class":126},[109,138138,55062],{"class":52475},[109,138140,54999],{"class":211},[109,138142,130],{"class":126},[109,138144,67823],{"class":278},[109,138146,138035],{"class":126},[109,138148,55062],{"class":52475},[109,138150,52482],{"class":126},[109,138152,138153,138155,138157],{"class":111,"line":161},[109,138154,52960],{"class":126},[109,138156,67800],{"class":52475},[109,138158,52482],{"class":126},[938,138160],{"style":127583,"src":138161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138163,138165],{"id":138164},"_142-css新特性","14.2 CSS新特性",[51,138167,138169],{"id":138168},"_1421-新增选择器","14.2.1 新增选择器",[23171,138171,138173],{"id":138172},"_14211-属性选择器","14.2.1.1 属性选择器",[938,138175],{"style":127583,"src":138176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[99,138178,138180],{"className":127727,"code":138179,"language":127729,"meta":104,"style":104},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[106,138181,138182,138197,138213],{"__ignoreMap":104},[109,138183,138184,138186,138188,138190,138192,138194],{"class":111,"line":112},[109,138185,54996],{"class":52475},[109,138187,1289],{"class":126},[109,138189,104282],{"class":211},[109,138191,130],{"class":122},[109,138193,63874],{"class":278},[109,138195,138196],{"class":126},"] {\n",[109,138198,138199,138201,138203,138205,138207,138209,138211],{"class":111,"line":119},[109,138200,72071],{"class":133},[109,138202,52612],{"class":126},[109,138204,1755],{"class":133},[109,138206,52667],{"class":122},[109,138208,52696],{"class":133},[109,138210,131307],{"class":133},[109,138212,137],{"class":126},[109,138214,138215],{"class":111,"line":140},[109,138216,742],{"class":126},[938,138218],{"style":127583,"src":138219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138221,1574],{},[27,138223,138224,138227,138230,138233],{},[30,138225,138226],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[30,138228,138229],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[30,138231,138232],{},"属性选择器也可以选择出来自定义的属性",[30,138234,138235,138237],{},[23,138236,10343],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23171,138239,138241],{"id":138240},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[938,138243],{"style":127583,"src":138244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[765,138246,138247],{},[30,138248,138249],{},"fist-child",[99,138251,138253],{"className":127727,"code":138252,"language":127729,"meta":104,"style":104},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[106,138254,138255,138260,138275,138295,138313],{"__ignoreMap":104},[109,138256,138257],{"class":111,"line":112},[109,138258,138259],{"class":115},"\u002F* 属性选择器 *\u002F\n",[109,138261,138262,138264,138266,138268,138270,138272],{"class":111,"line":119},[109,138263,54996],{"class":52475},[109,138265,1289],{"class":126},[109,138267,104282],{"class":211},[109,138269,130],{"class":122},[109,138271,63874],{"class":278},[109,138273,138274],{"class":126},"] { }\n",[109,138276,138277,138279,138281,138283,138286,138289,138292],{"class":111,"line":140},[109,138278,54996],{"class":52475},[109,138280,1289],{"class":126},[109,138282,15867],{"class":211},[109,138284,138285],{"class":122},"^=",[109,138287,138288],{"class":278},"\"icon\"",[109,138290,138291],{"class":126},"] { }  ",[109,138293,138294],{"class":115},"\u002F* 以 icon 开头 *\u002F\n",[109,138296,138297,138299,138301,138303,138306,138308,138310],{"class":111,"line":154},[109,138298,54996],{"class":52475},[109,138300,1289],{"class":126},[109,138302,15867],{"class":211},[109,138304,138305],{"class":122},"$=",[109,138307,138288],{"class":278},[109,138309,138291],{"class":126},[109,138311,138312],{"class":115},"\u002F* 以 icon 结尾 *\u002F\n",[109,138314,138315,138317,138319,138321,138324,138326,138328],{"class":111,"line":161},[109,138316,54996],{"class":52475},[109,138318,1289],{"class":126},[109,138320,15867],{"class":211},[109,138322,138323],{"class":122},"*=",[109,138325,138288],{"class":278},[109,138327,138291],{"class":126},[109,138329,138330],{"class":115},"\u002F* 包含 icon *\u002F\n",[19,138332,138333],{},"ul的第一个儿子文本为红色",[19,138335,138336],{},"一定要在冒号前加空格，不然就是选中所有的了",[99,138338,138340],{"className":127727,"code":138339,"language":127729,"meta":104,"style":104},".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",[106,138341,138342,138348,138358,138362,138366,138371,138384,138397,138413,138430,138447],{"__ignoreMap":104},[109,138343,138344,138346],{"class":111,"line":112},[109,138345,128018],{"class":211},[109,138347,16745],{"class":126},[109,138349,138350,138352,138354,138356],{"class":111,"line":119},[109,138351,72080],{"class":133},[109,138353,52612],{"class":126},[109,138355,58596],{"class":133},[109,138357,137],{"class":126},[109,138359,138360],{"class":111,"line":140},[109,138361,742],{"class":126},[109,138363,138364],{"class":111,"line":154},[109,138365,137188],{"class":126},[109,138367,138368],{"class":111,"line":161},[109,138369,138370],{"class":115},"\u002F* 结构伪类选择器 *\u002F\n",[109,138372,138373,138375,138378,138381],{"class":111,"line":167},[109,138374,30],{"class":52475},[109,138376,138377],{"class":211},":first-child",[109,138379,138380],{"class":126}," { }           ",[109,138382,138383],{"class":115},"\u002F* 第一个 *\u002F\n",[109,138385,138386,138388,138391,138394],{"class":111,"line":185},[109,138387,30],{"class":52475},[109,138389,138390],{"class":211},":last-child",[109,138392,138393],{"class":126}," { }            ",[109,138395,138396],{"class":115},"\u002F* 最后一个 *\u002F\n",[109,138398,138399,138401,138403,138405,138407,138410],{"class":111,"line":201},[109,138400,30],{"class":52475},[109,138402,130641],{"class":211},[109,138404,714],{"class":126},[109,138406,1618],{"class":133},[109,138408,138409],{"class":126},") { }          ",[109,138411,138412],{"class":115},"\u002F* 第2个 *\u002F\n",[109,138414,138415,138417,138419,138421,138424,138427],{"class":111,"line":206},[109,138416,30],{"class":52475},[109,138418,130641],{"class":211},[109,138420,714],{"class":126},[109,138422,138423],{"class":133},"2n",[109,138425,138426],{"class":126},") { }         ",[109,138428,138429],{"class":115},"\u002F* 偶数 *\u002F\n",[109,138431,138432,138434,138436,138438,138441,138444],{"class":111,"line":218},[109,138433,30],{"class":52475},[109,138435,130641],{"class":211},[109,138437,714],{"class":126},[109,138439,138440],{"class":133},"2n+1",[109,138442,138443],{"class":126},") { }       ",[109,138445,138446],{"class":115},"\u002F* 奇数 *\u002F\n",[109,138448,138449,138451,138453,138455,138458,138460],{"class":111,"line":223},[109,138450,30],{"class":52475},[109,138452,130641],{"class":211},[109,138454,714],{"class":126},[109,138456,138457],{"class":133},"-n+3",[109,138459,138443],{"class":126},[109,138461,138462],{"class":115},"\u002F* 前3个 *\u002F\n",[52786,138464,138467],{"className":138465},[138466],"example","\n  示例内容\n",[19,138469,138470],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[27,138472,138473],{},[30,138474,138475,138478],{},[106,138476,138477],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138480,138481],{},"也就是说它选择的是熊大",[765,138483,138484],{"start":167},[30,138485,138486],{},"权重",[99,138488,138490],{"className":127727,"code":138489,"language":127729,"meta":104,"style":104},"\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",[106,138491,138492,138496,138506,138516,138530,138544,138558],{"__ignoreMap":104},[109,138493,138494],{"class":111,"line":112},[109,138495,138370],{"class":115},[109,138497,138498,138500,138502,138504],{"class":111,"line":119},[109,138499,30],{"class":52475},[109,138501,138377],{"class":211},[109,138503,138380],{"class":126},[109,138505,138383],{"class":115},[109,138507,138508,138510,138512,138514],{"class":111,"line":140},[109,138509,30],{"class":52475},[109,138511,138390],{"class":211},[109,138513,138393],{"class":126},[109,138515,138396],{"class":115},[109,138517,138518,138520,138522,138524,138526,138528],{"class":111,"line":154},[109,138519,30],{"class":52475},[109,138521,130641],{"class":211},[109,138523,714],{"class":126},[109,138525,1618],{"class":133},[109,138527,138409],{"class":126},[109,138529,138412],{"class":115},[109,138531,138532,138534,138536,138538,138540,138542],{"class":111,"line":161},[109,138533,30],{"class":52475},[109,138535,130641],{"class":211},[109,138537,714],{"class":126},[109,138539,138423],{"class":133},[109,138541,138426],{"class":126},[109,138543,138429],{"class":115},[109,138545,138546,138548,138550,138552,138554,138556],{"class":111,"line":167},[109,138547,30],{"class":52475},[109,138549,130641],{"class":211},[109,138551,714],{"class":126},[109,138553,138440],{"class":133},[109,138555,138443],{"class":126},[109,138557,138446],{"class":115},[109,138559,138560,138562,138564,138566,138568,138570],{"class":111,"line":185},[109,138561,30],{"class":52475},[109,138563,130641],{"class":211},[109,138565,714],{"class":126},[109,138567,138457],{"class":133},[109,138569,138443],{"class":126},[109,138571,138462],{"class":115},[19,138573,138574],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23171,138576,138578],{"id":138577},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138580,138581],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[938,138583],{"style":127583,"src":138584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[765,138586,138587],{},[30,138588,1574],{},[27,138590,138591,138594,138597,138600,138603,138606],{},[30,138592,138593],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[30,138595,138596],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[30,138598,138599],{},"语法： element::before {}",[30,138601,138602],{},"before 和 after 必须有 content 属性",[30,138604,138605],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[30,138607,138608],{},"伪元素选择器和标签选择器一样，权重为 1",[765,138610,138611],{"start":119},[30,138612,138613],{},"实例",[99,138615,138616],{"className":127727,"code":138489,"language":127729,"meta":104,"style":104},[106,138617,138618,138622,138632,138642,138656,138670,138684],{"__ignoreMap":104},[109,138619,138620],{"class":111,"line":112},[109,138621,138370],{"class":115},[109,138623,138624,138626,138628,138630],{"class":111,"line":119},[109,138625,30],{"class":52475},[109,138627,138377],{"class":211},[109,138629,138380],{"class":126},[109,138631,138383],{"class":115},[109,138633,138634,138636,138638,138640],{"class":111,"line":140},[109,138635,30],{"class":52475},[109,138637,138390],{"class":211},[109,138639,138393],{"class":126},[109,138641,138396],{"class":115},[109,138643,138644,138646,138648,138650,138652,138654],{"class":111,"line":154},[109,138645,30],{"class":52475},[109,138647,130641],{"class":211},[109,138649,714],{"class":126},[109,138651,1618],{"class":133},[109,138653,138409],{"class":126},[109,138655,138412],{"class":115},[109,138657,138658,138660,138662,138664,138666,138668],{"class":111,"line":161},[109,138659,30],{"class":52475},[109,138661,130641],{"class":211},[109,138663,714],{"class":126},[109,138665,138423],{"class":133},[109,138667,138426],{"class":126},[109,138669,138429],{"class":115},[109,138671,138672,138674,138676,138678,138680,138682],{"class":111,"line":167},[109,138673,30],{"class":52475},[109,138675,130641],{"class":211},[109,138677,714],{"class":126},[109,138679,138440],{"class":133},[109,138681,138443],{"class":126},[109,138683,138446],{"class":115},[109,138685,138686,138688,138690,138692,138694,138696],{"class":111,"line":185},[109,138687,30],{"class":52475},[109,138689,130641],{"class":211},[109,138691,714],{"class":126},[109,138693,138457],{"class":133},[109,138695,138443],{"class":126},[109,138697,138462],{"class":115},[938,138699],{"style":127583,"src":138700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[765,138702,138703],{"start":140},[30,138704,138705],{},"使用场景1",[938,138707],{"style":127583,"src":138708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138710,138711],{},"不需要再加盒子来整红色那部分了",[99,138713,138715],{"className":127727,"code":138714,"language":127729,"meta":104,"style":104},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[106,138716,138717,138722,138731,138742,138752,138756,138765,138776,138786],{"__ignoreMap":104},[109,138718,138719],{"class":111,"line":112},[109,138720,138721],{"class":115},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[109,138723,138724,138726,138729],{"class":111,"line":119},[109,138725,52786],{"class":52475},[109,138727,138728],{"class":211},"::before",[109,138730,16745],{"class":126},[109,138732,138733,138736,138738,138740],{"class":111,"line":140},[109,138734,138735],{"class":133},"  content",[109,138737,52612],{"class":126},[109,138739,8978],{"class":278},[109,138741,137],{"class":126},[109,138743,138744,138746,138748,138750],{"class":111,"line":154},[109,138745,129343],{"class":133},[109,138747,52612],{"class":126},[109,138749,62044],{"class":133},[109,138751,137],{"class":126},[109,138753,138754],{"class":111,"line":161},[109,138755,742],{"class":126},[109,138757,138758,138760,138763],{"class":111,"line":167},[109,138759,52786],{"class":52475},[109,138761,138762],{"class":211},"::after",[109,138764,16745],{"class":126},[109,138766,138767,138769,138771,138774],{"class":111,"line":185},[109,138768,138735],{"class":133},[109,138770,52612],{"class":126},[109,138772,138773],{"class":278},"\"→\"",[109,138775,137],{"class":126},[109,138777,138778,138780,138782,138784],{"class":111,"line":201},[109,138779,72080],{"class":133},[109,138781,52612],{"class":126},[109,138783,63245],{"class":133},[109,138785,137],{"class":126},[109,138787,138788],{"class":111,"line":206},[109,138789,742],{"class":126},[938,138791],{"style":127583,"src":138792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138794,138795],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[938,138797],{"style":127583,"src":138798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138800,138801],{},"但是在引用时需要先转义一下",[19,138803,138804],{},"content='\\e930'",[765,138806,138807],{"start":154},[30,138808,138809],{},"使用场景2",[19,138811,138812],{},"仿土豆效果",[19,138814,138815],{},"通过使用伪元素选择器可以减少body中盒子的数量",[99,138817,138818],{"className":127727,"code":138714,"language":127729,"meta":104,"style":104},[106,138819,138820,138824,138832,138842,138852,138856,138864,138874,138884],{"__ignoreMap":104},[109,138821,138822],{"class":111,"line":112},[109,138823,138721],{"class":115},[109,138825,138826,138828,138830],{"class":111,"line":119},[109,138827,52786],{"class":52475},[109,138829,138728],{"class":211},[109,138831,16745],{"class":126},[109,138833,138834,138836,138838,138840],{"class":111,"line":140},[109,138835,138735],{"class":133},[109,138837,52612],{"class":126},[109,138839,8978],{"class":278},[109,138841,137],{"class":126},[109,138843,138844,138846,138848,138850],{"class":111,"line":154},[109,138845,129343],{"class":133},[109,138847,52612],{"class":126},[109,138849,62044],{"class":133},[109,138851,137],{"class":126},[109,138853,138854],{"class":111,"line":161},[109,138855,742],{"class":126},[109,138857,138858,138860,138862],{"class":111,"line":167},[109,138859,52786],{"class":52475},[109,138861,138762],{"class":211},[109,138863,16745],{"class":126},[109,138865,138866,138868,138870,138872],{"class":111,"line":185},[109,138867,138735],{"class":133},[109,138869,52612],{"class":126},[109,138871,138773],{"class":278},[109,138873,137],{"class":126},[109,138875,138876,138878,138880,138882],{"class":111,"line":201},[109,138877,72080],{"class":133},[109,138879,52612],{"class":126},[109,138881,63245],{"class":133},[109,138883,137],{"class":126},[109,138885,138886],{"class":111,"line":206},[109,138887,742],{"class":126},[938,138889],{"style":127583,"src":138890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[765,138892,138893],{"start":161},[30,138894,138895],{},"使用场景3",[19,138897,138898],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[99,138900,138902],{"className":127727,"code":138901,"language":127729,"meta":104,"style":104},".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",[106,138903,138904,138910,138920,138924,138928,138932,138940,138950,138960,138964,138972,138982,138992],{"__ignoreMap":104},[109,138905,138906,138908],{"class":111,"line":112},[109,138907,131575],{"class":211},[109,138909,16745],{"class":126},[109,138911,138912,138914,138916,138918],{"class":111,"line":119},[109,138913,132207],{"class":133},[109,138915,52612],{"class":126},[109,138917,24910],{"class":133},[109,138919,137],{"class":126},[109,138921,138922],{"class":111,"line":140},[109,138923,742],{"class":126},[109,138925,138926],{"class":111,"line":154},[109,138927,137188],{"class":126},[109,138929,138930],{"class":111,"line":161},[109,138931,138721],{"class":115},[109,138933,138934,138936,138938],{"class":111,"line":167},[109,138935,52786],{"class":52475},[109,138937,138728],{"class":211},[109,138939,16745],{"class":126},[109,138941,138942,138944,138946,138948],{"class":111,"line":185},[109,138943,138735],{"class":133},[109,138945,52612],{"class":126},[109,138947,8978],{"class":278},[109,138949,137],{"class":126},[109,138951,138952,138954,138956,138958],{"class":111,"line":201},[109,138953,129343],{"class":133},[109,138955,52612],{"class":126},[109,138957,62044],{"class":133},[109,138959,137],{"class":126},[109,138961,138962],{"class":111,"line":206},[109,138963,742],{"class":126},[109,138965,138966,138968,138970],{"class":111,"line":218},[109,138967,52786],{"class":52475},[109,138969,138762],{"class":211},[109,138971,16745],{"class":126},[109,138973,138974,138976,138978,138980],{"class":111,"line":223},[109,138975,138735],{"class":133},[109,138977,52612],{"class":126},[109,138979,138773],{"class":278},[109,138981,137],{"class":126},[109,138983,138984,138986,138988,138990],{"class":111,"line":229},[109,138985,72080],{"class":133},[109,138987,52612],{"class":126},[109,138989,63245],{"class":133},[109,138991,137],{"class":126},[109,138993,138994],{"class":111,"line":244},[109,138995,742],{"class":126},[19,138997,138998],{},"div {\nmargin: 0 auto;\n}",[99,139000,139003],{"className":139001,"code":139002,"language":6524},[6522],"\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",[106,139004,139002],{"__ignoreMap":104},[19,139006,139007],{},"如果想让多个元素都发生变化",[19,139009,139010],{},"不能如下操作：",[19,139012,139013],{},"transition: width 2s ease 0.5s;",[19,139015,139016],{},"transition: height 2s ease 0.5s;不对！！！",[19,139018,139019],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139021,139022],{},"使用如下：加逗号隔开",[19,139024,139025],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139027,139028],{},"transition all 2s ease;",[51,139030,139032],{"id":139031},"_1426-过渡练习","14.2.6 过渡练习",[765,139034,139035],{},[30,139036,139037],{},"进度条",[938,139039],{"style":127583,"src":139040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[99,139042,139044],{"className":127727,"code":139043,"language":127729,"meta":104,"style":104},"div {\n  transition: all 0.3s ease;\n}\n",[106,139045,139046,139052,139070],{"__ignoreMap":104},[109,139047,139048,139050],{"class":111,"line":112},[109,139049,52786],{"class":52475},[109,139051,16745],{"class":126},[109,139053,139054,139057,139059,139061,139064,139066,139068],{"class":111,"line":119},[109,139055,139056],{"class":133},"  transition",[109,139058,52612],{"class":126},[109,139060,29296],{"class":133},[109,139062,139063],{"class":133}," 0.3",[109,139065,2227],{"class":122},[109,139067,79855],{"class":133},[109,139069,137],{"class":126},[109,139071,139072],{"class":111,"line":140},[109,139073,742],{"class":126},[765,139075,139076],{"start":119},[30,139077,139078],{},"小米logo",[19,139080,139081],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[99,139083,139085],{"className":127727,"code":139084,"language":127729,"meta":104,"style":104},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[106,139086,139087,139092,139098,139114,139119],{"__ignoreMap":104},[109,139088,139089],{"class":111,"line":112},[109,139090,139091],{"class":115},"\u002F* CSS3 过渡 *\u002F\n",[109,139093,139094,139096],{"class":111,"line":119},[109,139095,52786],{"class":52475},[109,139097,16745],{"class":126},[109,139099,139100,139102,139104,139106,139108,139110,139112],{"class":111,"line":140},[109,139101,139056],{"class":133},[109,139103,52612],{"class":126},[109,139105,29296],{"class":133},[109,139107,139063],{"class":133},[109,139109,2227],{"class":122},[109,139111,79855],{"class":133},[109,139113,137],{"class":126},[109,139115,139116],{"class":111,"line":154},[109,139117,139118],{"class":115},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[109,139120,139121],{"class":111,"line":161},[109,139122,742],{"class":126},[19,139124,139125],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1467,139127,139128],{},"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":104,"searchDepth":119,"depth":119,"links":139130},[139131,139136],{"id":137461,"depth":119,"text":137462,"children":139132},[139133,139134,139135],{"id":137465,"depth":140,"text":137466},{"id":137542,"depth":140,"text":137543},{"id":137873,"depth":140,"text":137874},{"id":138164,"depth":119,"text":138165,"children":139137},[139138,139139],{"id":138168,"depth":140,"text":138169},{"id":139031,"depth":140,"text":139032},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137453,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139146,"title":139147,"body":139148,"description":24550,"extension":1476,"meta":140892,"navigation":157,"path":140893,"seo":140894,"stem":140895,"__hash__":140896},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139149,"toc":140873},[139150,139153,139157,139160,139166,139172,139176,139178,139181,139184,139187,139190,139193,139196,139199,139203,139207,139210,139213,139216,139220,139223,139226,139231,139234,139237,139240,139244,139247,139256,139259,139262,139266,139269,139272,139277,139284,139298,139306,139313,139318,139321,139324,139327,139334,139338,139344,139350,139353,139356,139361,139367,139369,139377,139382,139385,139391,139393,139398,139403,139406,139408,139413,139416,139421,139426,139460,139464,139468,139471,139475,139478,139564,139567,139604,139607,139643,139647,139652,139665,139719,139721,139749,139751,139779,139785,139799,139801,139845,139847,139891,139894,139901,139912,139914,139941,139943,139969,139976,139992,139994,140088,140090,140184,140191,140194,140199,140205,140279,140282,140284,140320,140322,140358,140361,140368,140387,140390,140393,140395,140420,140422,140446,140449,140452,140482,140486,140489,140552,140554,140620,140622,140686,140689,140721,140723,140749,140751,140777,140780,140811,140813,140839,140841,140867,140870],[10,139151,139147],{"id":139152},"_15-品优购项目上篇-搭建与公共模块",[14,139154,139156],{"id":139155},"_151-项目规划","15.1 项目规划",[938,139158],{"style":127583,"src":139159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139161,139162,139165],{},[23,139163,139164],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139167,139168,139171],{},[23,139169,139170],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139173,139175],{"id":139174},"_152-项目介绍","15.2 项目介绍",[19,139177,139164],{},[938,139179],{"style":127583,"src":139180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139182,139183],{},"主页：",[938,139185],{"style":127583,"src":139186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139188,139189],{},"列表页：",[938,139191],{"style":127583,"src":139192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139194,139195],{},"注册页：",[938,139197],{"style":127583,"src":139198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139200,139202],{"id":139201},"_153-项目搭建工作","15.3 项目搭建工作",[51,139204,139206],{"id":139205},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[938,139208],{"style":127583,"src":139209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139211,139212],{},"经常更换的图片要放到upload文件夹中",[19,139214,139215],{},"不经常换的放到images文件夹中",[51,139217,139219],{"id":139218},"_1532-创建文件如下","15.3.2 创建文件如下",[938,139221],{"style":127583,"src":139222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[938,139224],{"style":127583,"src":139225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139227,139228],{},[23,139229,139230],{},"初始化样式：",[19,139232,139233],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139235,139236],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139238,139239],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[51,139241,139243],{"id":139242},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139245,139246],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139248,139249,139250,139255],{},"这里最典型的应用就是 ",[23,139251,139252],{},[106,139253,139254],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[938,139257],{"style":127583,"src":139258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139260,139261],{},"通过link方法来引入",[51,139263,139265],{"id":139264},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[938,139267],{"style":127583,"src":139268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139270,139271],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[765,139273,139274],{},[30,139275,139276],{},"制作favicon图标",[19,139278,139279,139280,139283],{},"①把品优购图标切成 ",[106,139281,139282],{},"png"," 图片",[19,139285,139286,139287,139289,139290,139293,139294],{},"②把 ",[106,139288,139282],{}," 图片转换为 ",[106,139291,139292],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[1776,139295,139296],{"href":139296,"rel":139297},"http:\u002F\u002Fwww.bitbug.net\u002F",[25039],[765,139299,139300,139303],{"start":119},[30,139301,139302],{},"favicon图标放到网站根目录下",[30,139304,139305],{},"HTML页面引入favicon",[19,139307,139308,139309,139312],{},"在html 页面里面的 ",[106,139310,139311],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139314,139315],{},[106,139316,139317],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139319,139320],{},"复制这行代码或者在生成这个的网站进行复制",[938,139322],{"style":127583,"src":139323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139325,139326],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139328,139329,139330],{},"例如:",[1776,139331,139332],{"href":139332,"rel":139333},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25039],[51,139335,139337],{"id":139336},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139339,139340,139343],{},[23,139341,139342],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139345,139346,139349],{},[23,139347,139348],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139351,139352],{},"页面必须有三个标签用来符合 SEO 优化",[938,139354],{"style":127583,"src":139355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[765,139357,139358],{},[30,139359,139360],{},"title网站标题",[19,139362,139363,139366],{},[23,139364,139365],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139368,69965],{},[27,139370,139371,139374],{},[30,139372,139373],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[30,139375,139376],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[765,139378,139379],{"start":119},[30,139380,139381],{},"description网站描述",[19,139383,139384],{},"简要说明我们网站主要是做什么的",[19,139386,139387,139390],{},[23,139388,139389],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139392,69965],{},[19,139394,139395],{},[106,139396,139397],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[765,139399,139400],{"start":140},[30,139401,139402],{},"keywords关键词",[19,139404,139405],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139407,69965],{},[19,139409,139410],{},[106,139411,139412],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139414,139415],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139417,139418],{},[23,139419,139420],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[765,139422,139423],{"start":154},[30,139424,139425],{},"代码总结",[99,139427,139428],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,139429,139430,139434,139448,139452],{"__ignoreMap":104},[109,139431,139432],{"class":111,"line":112},[109,139433,131838],{"class":115},[109,139435,139436,139438,139440,139442,139444,139446],{"class":111,"line":119},[109,139437,1320],{"class":126},[109,139439,52786],{"class":52475},[109,139441,54661],{"class":211},[109,139443,130],{"class":126},[109,139445,131851],{"class":278},[109,139447,52482],{"class":126},[109,139449,139450],{"class":111,"line":140},[109,139451,131858],{"class":126},[109,139453,139454,139456,139458],{"class":111,"line":154},[109,139455,52960],{"class":126},[109,139457,52786],{"class":52475},[109,139459,52482],{"class":126},[14,139461,139463],{"id":139462},"_154-项目公共部分制作","15.4 项目公共部分制作",[51,139465,139467],{"id":139466},"_1541-常用模块类命名","15.4.1 常用模块类命名",[938,139469],{"style":127583,"src":139470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[51,139472,139474],{"id":139473},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139476,139477],{},"布局思路：",[27,139479,139480,139483,139486,139508,139541],{},[30,139481,139482],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[30,139484,139485],{},"里面包含版心的盒子",[30,139487,139488,139489],{},"版心盒子里面包含 1 号左侧盒子左浮动",[27,139490,139491,139499,139505],{},[30,139492,139493,139494,22673,139496,139498],{},"1 号盒子 里面包含一个",[106,139495,27],{},[106,139497,27],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[30,139500,139501,139502,139504],{},"里面的内容是水平排列，所以需要给",[106,139503,30],{},"设置浮动",[30,139506,139507],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[30,139509,139510,139511],{},"版心盒子里面包含 2 号右侧盒子右浮动",[27,139512,139513,139527,139532],{},[30,139514,139515,139516,22673,139518,139520,139521,139523,139524,139526],{},"2 号盒子 里面包含一个",[106,139517,27],{},[106,139519,27],{},"包裹",[106,139522,30],{},"，中间的",[106,139525,2451],{},"可以用样式去设置，也可以用字符 |",[30,139528,139529,139530,139504],{},"里面内容水平排列，给",[106,139531,30],{},[30,139533,139534,139535,139537,139538,139540],{},"找到里面所有偶数的 ",[106,139536,30],{}," 设置样式（偶数的 ",[106,139539,30],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[30,139542,139543,139544],{},"需要用到字体图标",[27,139545,139546,139552,139555,139558,139561],{},[30,139547,139548,139549],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[106,139550,139551],{},"arrow-icon",[30,139553,139554],{},"先要引入字体图片的资源",[30,139556,139557],{},"在样式里面利用 font-face 来进行声明",[30,139559,139560],{},"在伪元素的 content属性设置 图标的编码",[30,139562,139563],{},"给伪元素设置font-family属性",[19,139565,139566],{},"结构实例代码：",[99,139568,139570],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},"div::before {\n  content: \"\";\n  display: block;\n}\n",[106,139571,139572,139580,139590,139600],{"__ignoreMap":104},[109,139573,139574,139576,139578],{"class":111,"line":112},[109,139575,52786],{"class":52475},[109,139577,138728],{"class":211},[109,139579,16745],{"class":126},[109,139581,139582,139584,139586,139588],{"class":111,"line":119},[109,139583,138735],{"class":133},[109,139585,52612],{"class":126},[109,139587,8978],{"class":278},[109,139589,137],{"class":126},[109,139591,139592,139594,139596,139598],{"class":111,"line":140},[109,139593,129343],{"class":133},[109,139595,52612],{"class":126},[109,139597,62044],{"class":133},[109,139599,137],{"class":126},[109,139601,139602],{"class":111,"line":154},[109,139603,742],{"class":126},[19,139605,139606],{},"样式实例代码：",[99,139608,139609],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},[106,139610,139611,139619,139629,139639],{"__ignoreMap":104},[109,139612,139613,139615,139617],{"class":111,"line":112},[109,139614,52786],{"class":52475},[109,139616,138728],{"class":211},[109,139618,16745],{"class":126},[109,139620,139621,139623,139625,139627],{"class":111,"line":119},[109,139622,138735],{"class":133},[109,139624,52612],{"class":126},[109,139626,8978],{"class":278},[109,139628,137],{"class":126},[109,139630,139631,139633,139635,139637],{"class":111,"line":140},[109,139632,129343],{"class":133},[109,139634,52612],{"class":126},[109,139636,62044],{"class":133},[109,139638,137],{"class":126},[109,139640,139641],{"class":111,"line":154},[109,139642,742],{"class":126},[51,139644,139646],{"id":139645},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[27,139648,139649],{},[30,139650,139651],{},"header 盒子必须要有高度",[19,139653,139654,139655,139657,139658],{},"1 号盒子是 ",[106,139656,132739],{}," 标志定位，在正常开发过程中， ",[23,139659,139660,139661,139664],{},"logo的布局其实是有讲究的，需要进行 ",[106,139662,139663],{},"logoSEO","的优化 （★★★）",[27,139666,139667,139675,139683,139710],{},[30,139668,139669,139671,139672,139674],{},[106,139670,132739],{}," 里面首先放一个 ",[106,139673,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[30,139676,139677,139679,139680,139682],{},[106,139678,10],{}," 里面再放一个链接，可以返回首页的，把 ",[106,139681,132739],{}," 的背景图片给链接即可",[30,139684,139685,139686],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[27,139687,139688,139703],{},[30,139689,139690,139691,139694,139695,139698,139699,139702],{},"方法1：",[106,139692,139693],{},"text-indent"," 移到盒子外面（",[106,139696,139697],{},"text-indent: -9999px",") ，然后 ",[106,139700,139701],{},"overflow:hidden"," ，淘宝的做法",[30,139704,139705,139706,139709],{},"方法2：直接给 ",[106,139707,139708],{},"font-size: 0;"," 就看不到文字了，京东的做法",[30,139711,139712,139713,139715,139716,139718],{},"最后给链接一个 ",[106,139714,52582],{}," 属性，这样鼠标放到 ",[106,139717,132739],{}," 上就可以看到提示文字了",[19,139720,139566],{},[99,139722,139723],{"className":128474,"code":132960,"language":128476,"meta":104,"style":104},[106,139724,139725],{"__ignoreMap":104},[109,139726,139727,139729,139731,139733,139735,139737,139739,139741,139743,139745,139747],{"class":111,"line":112},[109,139728,1320],{"class":126},[109,139730,1776],{"class":52475},[109,139732,62232],{"class":211},[109,139734,130],{"class":126},[109,139736,132975],{"class":278},[109,139738,132978],{"class":211},[109,139740,130],{"class":126},[109,139742,132983],{"class":278},[109,139744,132986],{"class":126},[109,139746,1776],{"class":52475},[109,139748,52482],{"class":126},[19,139750,139606],{},[99,139752,139753],{"className":128474,"code":132960,"language":128476,"meta":104,"style":104},[106,139754,139755],{"__ignoreMap":104},[109,139756,139757,139759,139761,139763,139765,139767,139769,139771,139773,139775,139777],{"class":111,"line":112},[109,139758,1320],{"class":126},[109,139760,1776],{"class":52475},[109,139762,62232],{"class":211},[109,139764,130],{"class":126},[109,139766,132975],{"class":278},[109,139768,132978],{"class":211},[109,139770,130],{"class":126},[109,139772,132983],{"class":278},[109,139774,132986],{"class":126},[109,139776,1776],{"class":52475},[109,139778,52482],{"class":126},[19,139780,139781,139782,139784],{},"2 号盒子是 ",[106,139783,132752],{}," 搜索模块定位",[27,139786,139787,139790,139793,139796],{},[30,139788,139789],{},"search盒子利用定位的方式放在对应的位置",[30,139791,139792],{},"search盒子设置绝对定位，header盒子设置相对定位",[30,139794,139795],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[30,139797,139798],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139800,139566],{},[99,139802,139803],{"className":127727,"code":133047,"language":127729,"meta":104,"style":104},[106,139804,139805,139827,139831,139841],{"__ignoreMap":104},[109,139806,139807,139809,139811,139813,139815,139817,139819,139821,139823,139825],{"class":111,"line":112},[109,139808,52786],{"class":52475},[109,139810,13608],{"class":126},[109,139812,19],{"class":52475},[109,139814,13608],{"class":126},[109,139816,10],{"class":52475},[109,139818,13608],{"class":126},[109,139820,27],{"class":52475},[109,139822,13608],{"class":126},[109,139824,30],{"class":52475},[109,139826,16745],{"class":126},[109,139828,139829],{"class":111,"line":119},[109,139830,133076],{"class":115},[109,139832,139833,139835,139837,139839],{"class":111,"line":140},[109,139834,129343],{"class":133},[109,139836,52612],{"class":126},[109,139838,62044],{"class":133},[109,139840,137],{"class":126},[109,139842,139843],{"class":111,"line":154},[109,139844,742],{"class":126},[19,139846,139606],{},[99,139848,139849],{"className":127727,"code":133047,"language":127729,"meta":104,"style":104},[106,139850,139851,139873,139877,139887],{"__ignoreMap":104},[109,139852,139853,139855,139857,139859,139861,139863,139865,139867,139869,139871],{"class":111,"line":112},[109,139854,52786],{"class":52475},[109,139856,13608],{"class":126},[109,139858,19],{"class":52475},[109,139860,13608],{"class":126},[109,139862,10],{"class":52475},[109,139864,13608],{"class":126},[109,139866,27],{"class":52475},[109,139868,13608],{"class":126},[109,139870,30],{"class":52475},[109,139872,16745],{"class":126},[109,139874,139875],{"class":111,"line":119},[109,139876,133076],{"class":115},[109,139878,139879,139881,139883,139885],{"class":111,"line":140},[109,139880,129343],{"class":133},[109,139882,52612],{"class":126},[109,139884,62044],{"class":133},[109,139886,137],{"class":126},[109,139888,139889],{"class":111,"line":154},[109,139890,742],{"class":126},[19,139892,139893],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139895,139896,139897,139900],{},"3 号盒子是 ",[106,139898,139899],{},"hotwords"," 热词模块定位",[27,139902,139903,139906,139909],{},[30,139904,139905],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[30,139907,139908],{},"给里面所有的a标签设置 左右10px的外边距",[30,139910,139911],{},"给第一个a标签设置文字变红色（#c81623）",[19,139913,139566],{},[99,139915,139917],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},"div {\n  margin: 0 auto;\n}\n",[106,139918,139919,139925,139937],{"__ignoreMap":104},[109,139920,139921,139923],{"class":111,"line":112},[109,139922,52786],{"class":52475},[109,139924,16745],{"class":126},[109,139926,139927,139929,139931,139933,139935],{"class":111,"line":119},[109,139928,71645],{"class":133},[109,139930,52612],{"class":126},[109,139932,1314],{"class":133},[109,139934,52731],{"class":133},[109,139936,137],{"class":126},[109,139938,139939],{"class":111,"line":140},[109,139940,742],{"class":126},[19,139942,139606],{},[99,139944,139945],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,139946,139947,139953,139965],{"__ignoreMap":104},[109,139948,139949,139951],{"class":111,"line":112},[109,139950,52786],{"class":52475},[109,139952,16745],{"class":126},[109,139954,139955,139957,139959,139961,139963],{"class":111,"line":119},[109,139956,71645],{"class":133},[109,139958,52612],{"class":126},[109,139960,1314],{"class":133},[109,139962,52731],{"class":133},[109,139964,137],{"class":126},[109,139966,139967],{"class":111,"line":140},[109,139968,742],{"class":126},[19,139970,139971,139972,139975],{},"4 号盒子是 ",[106,139973,139974],{},"shopcar"," 购物车模块",[27,139977,139978,139983,139986,139989],{},[30,139979,124510,139980,139982],{},[106,139981,139974],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[30,139984,139985],{},"count 统计部分用绝对定位做",[30,139987,139988],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[30,139990,139991],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139993,139566],{},[99,139995,139996],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},[106,139997,139998,140002,140016,140020,140034,140038,140052,140056,140070,140074],{"__ignoreMap":104},[109,139999,140000],{"class":111,"line":112},[109,140001,133166],{"class":115},[109,140003,140004,140006,140008,140010,140012,140014],{"class":111,"line":119},[109,140005,133171],{"class":211},[109,140007,80982],{"class":126},[109,140009,130087],{"class":133},[109,140011,52612],{"class":126},[109,140013,133180],{"class":133},[109,140015,130657],{"class":126},[109,140017,140018],{"class":111,"line":140},[109,140019,133187],{"class":115},[109,140021,140022,140024,140026,140028,140030,140032],{"class":111,"line":154},[109,140023,133192],{"class":211},[109,140025,80982],{"class":126},[109,140027,130087],{"class":133},[109,140029,52612],{"class":126},[109,140031,55939],{"class":133},[109,140033,130657],{"class":126},[109,140035,140036],{"class":111,"line":161},[109,140037,133207],{"class":115},[109,140039,140040,140042,140044,140046,140048,140050],{"class":111,"line":167},[109,140041,133212],{"class":211},[109,140043,80982],{"class":126},[109,140045,130087],{"class":133},[109,140047,52612],{"class":126},[109,140049,56006],{"class":133},[109,140051,130657],{"class":126},[109,140053,140054],{"class":111,"line":185},[109,140055,133227],{"class":115},[109,140057,140058,140060,140062,140064,140066,140068],{"class":111,"line":201},[109,140059,133232],{"class":211},[109,140061,80982],{"class":126},[109,140063,130087],{"class":133},[109,140065,52612],{"class":126},[109,140067,87408],{"class":133},[109,140069,130657],{"class":126},[109,140071,140072],{"class":111,"line":206},[109,140073,133247],{"class":115},[109,140075,140076,140078,140080,140082,140084,140086],{"class":111,"line":218},[109,140077,133252],{"class":211},[109,140079,80982],{"class":126},[109,140081,130087],{"class":133},[109,140083,52612],{"class":126},[109,140085,133261],{"class":133},[109,140087,130657],{"class":126},[19,140089,139606],{},[99,140091,140092],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},[106,140093,140094,140098,140112,140116,140130,140134,140148,140152,140166,140170],{"__ignoreMap":104},[109,140095,140096],{"class":111,"line":112},[109,140097,133166],{"class":115},[109,140099,140100,140102,140104,140106,140108,140110],{"class":111,"line":119},[109,140101,133171],{"class":211},[109,140103,80982],{"class":126},[109,140105,130087],{"class":133},[109,140107,52612],{"class":126},[109,140109,133180],{"class":133},[109,140111,130657],{"class":126},[109,140113,140114],{"class":111,"line":140},[109,140115,133187],{"class":115},[109,140117,140118,140120,140122,140124,140126,140128],{"class":111,"line":154},[109,140119,133192],{"class":211},[109,140121,80982],{"class":126},[109,140123,130087],{"class":133},[109,140125,52612],{"class":126},[109,140127,55939],{"class":133},[109,140129,130657],{"class":126},[109,140131,140132],{"class":111,"line":161},[109,140133,133207],{"class":115},[109,140135,140136,140138,140140,140142,140144,140146],{"class":111,"line":167},[109,140137,133212],{"class":211},[109,140139,80982],{"class":126},[109,140141,130087],{"class":133},[109,140143,52612],{"class":126},[109,140145,56006],{"class":133},[109,140147,130657],{"class":126},[109,140149,140150],{"class":111,"line":185},[109,140151,133227],{"class":115},[109,140153,140154,140156,140158,140160,140162,140164],{"class":111,"line":201},[109,140155,133232],{"class":211},[109,140157,80982],{"class":126},[109,140159,130087],{"class":133},[109,140161,52612],{"class":126},[109,140163,87408],{"class":133},[109,140165,130657],{"class":126},[109,140167,140168],{"class":111,"line":206},[109,140169,133247],{"class":115},[109,140171,140172,140174,140176,140178,140180,140182],{"class":111,"line":218},[109,140173,133252],{"class":211},[109,140175,80982],{"class":126},[109,140177,130087],{"class":133},[109,140179,52612],{"class":126},[109,140181,133261],{"class":133},[109,140183,130657],{"class":126},[51,140185,140187,140188,140190],{"id":140186},"_1544-nav导航模块制作","15.4.4 ",[106,140189,54888],{},"导航模块制作",[938,140192],{"style":127583,"src":140193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140195,140196,140198],{},[106,140197,54888],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140200,140201,140202],{},"1 号盒子左侧浮动，",[106,140203,140204],{},"dropdown",[27,140206,140207,140217,140225,140231,140239,140249,140257,140268],{},[30,140208,140209,140210,102193,140213,140216],{},"1号盒子有讲究，根据相关性 里面包含 ",[106,140211,140212],{},".dt",[106,140214,140215],{},".dd"," 两个盒子",[30,140218,140219,140221,140222,140224],{},[106,140220,140212],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[106,140223,140215],{}," 挤到下面去了",[30,140226,140227,140228,140230],{},"给 ",[106,140229,140215],{}," 盒子设置宽度 和 高度，以及背景颜色",[30,140232,140227,140233,140235,140236,121412],{},[106,140234,140215],{}," 盒子里面定义 无序列表 （",[106,140237,140238],{},"ul > li > a",[30,140240,140241,140242,140244,140245,140248],{},"每个 ",[106,140243,30],{}," 都有一个高度（",[106,140246,140247],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[30,140250,140227,140251,140253,140254,121412],{},[106,140252,30],{}," 里面的a设置文字大小（",[106,140255,140256],{},"14px",[30,140258,140227,140259,140261,140262,140264,140265,140267],{},[106,140260,30],{}," 设置 ",[106,140263,128888],{},"，当鼠标移入的时候，让",[106,140266,30],{},"的背景变成白色，让里面的文字变成红色",[30,140269,140270,140272,140273,140275,140276,140278],{},[106,140271,30],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[106,140274,30],{},"的右侧，那么给",[106,140277,30],{},"设置相对定位",[19,140280,140281],{},"一定要注意相关性",[19,140283,139566],{},[99,140285,140286],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},[106,140287,140288,140296,140306,140316],{"__ignoreMap":104},[109,140289,140290,140292,140294],{"class":111,"line":112},[109,140291,52786],{"class":52475},[109,140293,138728],{"class":211},[109,140295,16745],{"class":126},[109,140297,140298,140300,140302,140304],{"class":111,"line":119},[109,140299,138735],{"class":133},[109,140301,52612],{"class":126},[109,140303,8978],{"class":278},[109,140305,137],{"class":126},[109,140307,140308,140310,140312,140314],{"class":111,"line":140},[109,140309,129343],{"class":133},[109,140311,52612],{"class":126},[109,140313,62044],{"class":133},[109,140315,137],{"class":126},[109,140317,140318],{"class":111,"line":154},[109,140319,742],{"class":126},[19,140321,139606],{},[99,140323,140324],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},[106,140325,140326,140334,140344,140354],{"__ignoreMap":104},[109,140327,140328,140330,140332],{"class":111,"line":112},[109,140329,52786],{"class":52475},[109,140331,138728],{"class":211},[109,140333,16745],{"class":126},[109,140335,140336,140338,140340,140342],{"class":111,"line":119},[109,140337,138735],{"class":133},[109,140339,52612],{"class":126},[109,140341,8978],{"class":278},[109,140343,137],{"class":126},[109,140345,140346,140348,140350,140352],{"class":111,"line":140},[109,140347,129343],{"class":133},[109,140349,52612],{"class":126},[109,140351,62044],{"class":133},[109,140353,137],{"class":126},[109,140355,140356],{"class":111,"line":154},[109,140357,742],{"class":126},[19,140359,140360],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140362,140363,140364,140367],{},"2 号盒子左侧浮动，",[106,140365,140366],{},"navitems"," 导航栏组",[27,140369,140370,140375,140384],{},[30,140371,140372,140373],{},"里面结构是 ",[106,140374,140238],{},[30,140376,140377,140378,140380,140381,140383],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[106,140379,1776],{},"左右的",[106,140382,32058],{},"把两侧撑开",[30,140385,140386],{},"让文字垂直居中（行高等于高度）",[938,140388],{"style":127583,"src":140389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140391,140392],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140394,139566],{},[99,140396,140398],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},".box {\n  float: left;\n}\n",[106,140399,140400,140406,140416],{"__ignoreMap":104},[109,140401,140402,140404],{"class":111,"line":112},[109,140403,131575],{"class":211},[109,140405,16745],{"class":126},[109,140407,140408,140410,140412,140414],{"class":111,"line":119},[109,140409,132207],{"class":133},[109,140411,52612],{"class":126},[109,140413,24910],{"class":133},[109,140415,137],{"class":126},[109,140417,140418],{"class":111,"line":140},[109,140419,742],{"class":126},[19,140421,139606],{},[99,140423,140424],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,140425,140426,140432,140442],{"__ignoreMap":104},[109,140427,140428,140430],{"class":111,"line":112},[109,140429,131575],{"class":211},[109,140431,16745],{"class":126},[109,140433,140434,140436,140438,140440],{"class":111,"line":119},[109,140435,132207],{"class":133},[109,140437,52612],{"class":126},[109,140439,24910],{"class":133},[109,140441,137],{"class":126},[109,140443,140444],{"class":111,"line":140},[109,140445,742],{"class":126},[19,140447,140448],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[938,140450],{"style":127583,"src":140451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[99,140453,140454],{"className":127727,"code":131884,"language":127729,"meta":104,"style":104},[106,140455,140456,140462,140478],{"__ignoreMap":104},[109,140457,140458,140460],{"class":111,"line":112},[109,140459,52786],{"class":52475},[109,140461,16745],{"class":126},[109,140463,140464,140466,140468,140470,140472,140474,140476],{"class":111,"line":119},[109,140465,72071],{"class":133},[109,140467,52612],{"class":126},[109,140469,1755],{"class":133},[109,140471,52667],{"class":122},[109,140473,52696],{"class":133},[109,140475,131119],{"class":133},[109,140477,137],{"class":126},[109,140479,140480],{"class":111,"line":140},[109,140481,742],{"class":126},[51,140483,140485],{"id":140484},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[938,140487],{"style":127583,"src":140488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[27,140490,140491,140496,140501],{},[30,140492,140493,140495],{},[106,140494,132930],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[30,140497,140498,140500],{},[106,140499,132930],{}," 里面有一个大的版心",[30,140502,140503,140504,140507,140508],{},"版心里面包含 1 号盒子，",[106,140505,140506],{},"mod_service"," 是服务模块，mod 是模块的意思",[27,140509,140510,140515,140528,140544,140549],{},[30,140511,140227,140512,140514],{},[106,140513,140506],{}," 设置高度（80px）和下边框",[30,140516,140517,140518,140521,140522,140524,140525,140527],{},"在里面定义 ",[106,140519,140520],{},"ul > li"," ,每个",[106,140523,30],{}," 宽度是300px 高度是 50px，给每个",[106,140526,30],{},"设置35px的左内边距",[30,140529,140530,140531,140533,140534,140536,140537,140539,140540,19583,140542,121412],{},"在每个",[106,140532,30],{},"里面，放一个 ",[106,140535,24083],{},"（里面放图标），一个",[106,140538,52786],{},"（里面放",[106,140541,52786],{},[106,140543,19],{},[30,140545,140227,140546,140548],{},[106,140547,24083],{},"设置浮动，让h5与这个div左右排列",[30,140550,140551],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140553,139566],{},[99,140555,140557],{"className":127727,"code":140556,"language":127729,"meta":104,"style":104},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[106,140558,140559,140565,140577,140589,140616],{"__ignoreMap":104},[109,140560,140561,140563],{"class":111,"line":112},[109,140562,135484],{"class":211},[109,140564,16745],{"class":126},[109,140566,140567,140569,140571,140573,140575],{"class":111,"line":119},[109,140568,71743],{"class":133},[109,140570,52612],{"class":126},[109,140572,2232],{"class":133},[109,140574,52667],{"class":122},[109,140576,137],{"class":126},[109,140578,140579,140581,140583,140585,140587],{"class":111,"line":140},[109,140580,71963],{"class":133},[109,140582,52612],{"class":126},[109,140584,2232],{"class":133},[109,140586,52667],{"class":122},[109,140588,137],{"class":126},[109,140590,140591,140593,140595,140597,140599,140601,140603,140605,140608,140610,140612,140614],{"class":111,"line":154},[109,140592,71786],{"class":133},[109,140594,52612],{"class":126},[109,140596,62901],{"class":133},[109,140598,714],{"class":126},[109,140600,135523],{"class":6553},[109,140602,14887],{"class":126},[109,140604,62911],{"class":133},[109,140606,140607],{"class":133}," -10",[109,140609,52667],{"class":122},[109,140611,135542],{"class":133},[109,140613,52667],{"class":122},[109,140615,137],{"class":126},[109,140617,140618],{"class":111,"line":161},[109,140619,742],{"class":126},[19,140621,139606],{},[99,140623,140624],{"className":127727,"code":140556,"language":127729,"meta":104,"style":104},[106,140625,140626,140632,140644,140656,140682],{"__ignoreMap":104},[109,140627,140628,140630],{"class":111,"line":112},[109,140629,135484],{"class":211},[109,140631,16745],{"class":126},[109,140633,140634,140636,140638,140640,140642],{"class":111,"line":119},[109,140635,71743],{"class":133},[109,140637,52612],{"class":126},[109,140639,2232],{"class":133},[109,140641,52667],{"class":122},[109,140643,137],{"class":126},[109,140645,140646,140648,140650,140652,140654],{"class":111,"line":140},[109,140647,71963],{"class":133},[109,140649,52612],{"class":126},[109,140651,2232],{"class":133},[109,140653,52667],{"class":122},[109,140655,137],{"class":126},[109,140657,140658,140660,140662,140664,140666,140668,140670,140672,140674,140676,140678,140680],{"class":111,"line":154},[109,140659,71786],{"class":133},[109,140661,52612],{"class":126},[109,140663,62901],{"class":133},[109,140665,714],{"class":126},[109,140667,135523],{"class":6553},[109,140669,14887],{"class":126},[109,140671,62911],{"class":133},[109,140673,140607],{"class":133},[109,140675,52667],{"class":122},[109,140677,135542],{"class":133},[109,140679,52667],{"class":122},[109,140681,137],{"class":126},[109,140683,140684],{"class":111,"line":161},[109,140685,742],{"class":126},[19,140687,140688],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[27,140690,140691,140694,140700,140706,140718],{},[30,140692,140693],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[30,140695,140696,140697,121412],{},"里面的布局利用 自定义列表来实现（",[106,140698,140699],{},"dl > dt + dd",[30,140701,140227,140702,140705],{},[106,140703,140704],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[30,140707,140227,140708,140711,140712,19583,140714,140717],{},[106,140709,140710],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[106,140713,140710],{},[106,140715,140716],{},"dd","之间有些距离",[30,140719,140720],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140722,139566],{},[99,140724,140725],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,140726,140727,140733,140745],{"__ignoreMap":104},[109,140728,140729,140731],{"class":111,"line":112},[109,140730,52786],{"class":52475},[109,140732,16745],{"class":126},[109,140734,140735,140737,140739,140741,140743],{"class":111,"line":119},[109,140736,71645],{"class":133},[109,140738,52612],{"class":126},[109,140740,1314],{"class":133},[109,140742,52731],{"class":133},[109,140744,137],{"class":126},[109,140746,140747],{"class":111,"line":140},[109,140748,742],{"class":126},[19,140750,139606],{},[99,140752,140753],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,140754,140755,140761,140773],{"__ignoreMap":104},[109,140756,140757,140759],{"class":111,"line":112},[109,140758,52786],{"class":52475},[109,140760,16745],{"class":126},[109,140762,140763,140765,140767,140769,140771],{"class":111,"line":119},[109,140764,71645],{"class":133},[109,140766,52612],{"class":126},[109,140768,1314],{"class":133},[109,140770,52731],{"class":133},[109,140772,137],{"class":126},[109,140774,140775],{"class":111,"line":140},[109,140776,742],{"class":126},[19,140778,140779],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[27,140781,140782,140791,140794,140805],{},[30,140783,140784,140785,140787,140788,140790],{},"分为上下两块，上面是 ",[106,140786,132947],{}," 友情链接，下面是 ",[106,140789,132940],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[30,140792,140793],{},"把内容分别复制到相应模块中",[30,140795,140227,140796,140798,140799,140801,140802,140804],{},[106,140797,132947],{}," 设置 15px 的下外边距，给",[106,140800,132947],{}," 里面 的 ",[106,140803,1776],{}," 标签设置 左右 3px 的外边距",[30,140806,140807,140808,140810],{},"给",[106,140809,132940],{}," 设置 20px 的行高",[19,140812,139566],{},[99,140814,140815],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,140816,140817,140823,140835],{"__ignoreMap":104},[109,140818,140819,140821],{"class":111,"line":112},[109,140820,52786],{"class":52475},[109,140822,16745],{"class":126},[109,140824,140825,140827,140829,140831,140833],{"class":111,"line":119},[109,140826,71645],{"class":133},[109,140828,52612],{"class":126},[109,140830,1314],{"class":133},[109,140832,52731],{"class":133},[109,140834,137],{"class":126},[109,140836,140837],{"class":111,"line":140},[109,140838,742],{"class":126},[19,140840,139606],{},[99,140842,140843],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,140844,140845,140851,140863],{"__ignoreMap":104},[109,140846,140847,140849],{"class":111,"line":112},[109,140848,52786],{"class":52475},[109,140850,16745],{"class":126},[109,140852,140853,140855,140857,140859,140861],{"class":111,"line":119},[109,140854,71645],{"class":133},[109,140856,52612],{"class":126},[109,140858,1314],{"class":133},[109,140860,52731],{"class":133},[109,140862,137],{"class":126},[109,140864,140865],{"class":111,"line":140},[109,140866,742],{"class":126},[19,140868,140869],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1467,140871,140872],{},"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":104,"searchDepth":119,"depth":119,"links":140874},[140875,140876,140877,140884],{"id":139155,"depth":119,"text":139156},{"id":139174,"depth":119,"text":139175},{"id":139201,"depth":119,"text":139202,"children":140878},[140879,140880,140881,140882,140883],{"id":139205,"depth":140,"text":139206},{"id":139218,"depth":140,"text":139219},{"id":139242,"depth":140,"text":139243},{"id":139264,"depth":140,"text":139265},{"id":139336,"depth":140,"text":139337},{"id":139462,"depth":119,"text":139463,"children":140885},[140886,140887,140888,140889,140891],{"id":139466,"depth":140,"text":139467},{"id":139473,"depth":140,"text":139474},{"id":139645,"depth":140,"text":139646},{"id":140186,"depth":140,"text":140890},"15.4.4 nav导航模块制作",{"id":140484,"depth":140,"text":140485},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139147,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140898,"title":140899,"body":140900,"description":24550,"extension":1476,"meta":143302,"navigation":157,"path":143303,"seo":143304,"stem":143305,"__hash__":143306},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140901,"toc":143279},[140902,140905,140909,140913,140925,140928,140931,140934,140945,140947,140971,140973,140997,141002,141005,141007,141043,141045,141081,141084,141089,141092,141095,141098,141128,141135,141138,141148,141150,141184,141187,141221,141227,141244,141246,141282,141284,141320,141325,141350,141352,141378,141380,141404,141411,141414,141478,141480,141522,141524,141564,141571,141576,141578,141608,141610,141640,141644,141647,141654,141666,141668,141694,141696,141720,141723,141725,141749,141755,141765,141767,141797,141799,141829,141836,141877,141879,141915,141917,141953,141957,141960,141963,141966,141972,141977,141980,142003,142006,142030,142033,142057,142062,142065,142068,142071,142074,142077,142151,142153,142183,142185,142215,142218,142221,142253,142257,142261,142275,142284,142287,142292,142294,142388,142390,142484,142507,142509,142533,142535,142559,142566,142569,142579,142581,142605,142610,142618,142620,142650,142655,142695,142697,142723,142725,142751,142755,142758,142763,142766,142770,142778,142785,142793,142795,142825,142827,142857,142865,142868,142871,142873,142903,142905,142935,142938,142943,142945,142969,142971,142995,142998,143083,143085,143109,143111,143135,143139,143141,143165,143167,143201,143205,143219,143222,143227,143230,143235,143238,143268,143276],[10,140903,140899],{"id":140904},"_16-品优购项目下篇-主体与页面开发",[14,140906,140908],{"id":140907},"_161-项目主体模块制作","16.1 项目主体模块制作",[51,140910,140912],{"id":140911},"_1611-首页制作","16.1.1 首页制作",[19,140914,140915,140917,140918,140920,140921,140924],{},[23,140916,103233],{}," 主体模块是 ",[23,140919,75233],{}," 里面专有的，注意需要新的样式文件 ",[23,140922,140923],{},"index.css，"," 就不要写在common.css中了",[938,140926],{"style":127583,"src":140927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[938,140929],{"style":127583,"src":140930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140932,140933],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[27,140935,140936,140939,140942],{},[30,140937,140938],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[30,140940,140941],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[30,140943,140944],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140946,139566],{},[99,140948,140949],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,140950,140951,140957,140967],{"__ignoreMap":104},[109,140952,140953,140955],{"class":111,"line":112},[109,140954,131575],{"class":211},[109,140956,16745],{"class":126},[109,140958,140959,140961,140963,140965],{"class":111,"line":119},[109,140960,132207],{"class":133},[109,140962,52612],{"class":126},[109,140964,24910],{"class":133},[109,140966,137],{"class":126},[109,140968,140969],{"class":111,"line":140},[109,140970,742],{"class":126},[19,140972,139606],{},[99,140974,140975],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,140976,140977,140983,140993],{"__ignoreMap":104},[109,140978,140979,140981],{"class":111,"line":112},[109,140980,131575],{"class":211},[109,140982,16745],{"class":126},[109,140984,140985,140987,140989,140991],{"class":111,"line":119},[109,140986,132207],{"class":133},[109,140988,52612],{"class":126},[109,140990,24910],{"class":133},[109,140992,137],{"class":126},[109,140994,140995],{"class":111,"line":140},[109,140996,742],{"class":126},[765,140998,140999],{},[30,141000,141001],{},"左侧focus模块制作",[938,141003],{"style":127583,"src":141004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141006,139566],{},[99,141008,141009],{"className":127727,"code":129050,"language":127729,"meta":104,"style":104},[106,141010,141011,141019,141029,141039],{"__ignoreMap":104},[109,141012,141013,141015,141017],{"class":111,"line":112},[109,141014,54996],{"class":52475},[109,141016,63075],{"class":211},[109,141018,16745],{"class":126},[109,141020,141021,141023,141025,141027],{"class":111,"line":119},[109,141022,129065],{"class":133},[109,141024,52612],{"class":126},[109,141026,56064],{"class":133},[109,141028,137],{"class":126},[109,141030,141031,141033,141035,141037],{"class":111,"line":140},[109,141032,71973],{"class":133},[109,141034,52612],{"class":126},[109,141036,55912],{"class":133},[109,141038,137],{"class":126},[109,141040,141041],{"class":111,"line":154},[109,141042,742],{"class":126},[19,141044,139606],{},[99,141046,141047],{"className":127727,"code":129050,"language":127729,"meta":104,"style":104},[106,141048,141049,141057,141067,141077],{"__ignoreMap":104},[109,141050,141051,141053,141055],{"class":111,"line":112},[109,141052,54996],{"class":52475},[109,141054,63075],{"class":211},[109,141056,16745],{"class":126},[109,141058,141059,141061,141063,141065],{"class":111,"line":119},[109,141060,129065],{"class":133},[109,141062,52612],{"class":126},[109,141064,56064],{"class":133},[109,141066,137],{"class":126},[109,141068,141069,141071,141073,141075],{"class":111,"line":140},[109,141070,71973],{"class":133},[109,141072,52612],{"class":126},[109,141074,55912],{"class":133},[109,141076,137],{"class":126},[109,141078,141079],{"class":111,"line":154},[109,141080,742],{"class":126},[19,141082,141083],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[765,141085,141086],{"start":119},[30,141087,141088],{},"右侧newsflash模块制作",[938,141090],{"style":127583,"src":141091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141093,141094],{},"右侧的模块 分为上中下三个盒子",[19,141096,141097],{},"结构代码：",[99,141099,141100],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,141101,141102],{"__ignoreMap":104},[109,141103,141104,141106,141108,141110,141112,141114,141116,141118,141120,141122,141124,141126],{"class":111,"line":112},[109,141105,1320],{"class":126},[109,141107,938],{"class":52475},[109,141109,56414],{"class":211},[109,141111,130],{"class":126},[109,141113,135244],{"class":278},[109,141115,56422],{"class":211},[109,141117,130],{"class":126},[109,141119,135251],{"class":278},[109,141121,135254],{"class":211},[109,141123,130],{"class":126},[109,141125,135259],{"class":278},[109,141127,52482],{"class":126},[19,141129,141130,141131,141134],{},"1 号盒子为 ",[106,141132,141133],{},"news"," 新闻模块 高度为 165px",[938,141136],{"style":127583,"src":141137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141139,141140,141141,141144,141145],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[106,141142,141143],{},"news-hd","，下面是 ",[106,141146,141147],{},"news-bd",[19,141149,141097],{},[99,141151,141152],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,141153,141154,141158,141172,141176],{"__ignoreMap":104},[109,141155,141156],{"class":111,"line":112},[109,141157,131838],{"class":115},[109,141159,141160,141162,141164,141166,141168,141170],{"class":111,"line":119},[109,141161,1320],{"class":126},[109,141163,52786],{"class":52475},[109,141165,54661],{"class":211},[109,141167,130],{"class":126},[109,141169,131851],{"class":278},[109,141171,52482],{"class":126},[109,141173,141174],{"class":111,"line":140},[109,141175,131858],{"class":126},[109,141177,141178,141180,141182],{"class":111,"line":154},[109,141179,52960],{"class":126},[109,141181,52786],{"class":52475},[109,141183,52482],{"class":126},[19,141185,141186],{},"样式代码：",[99,141188,141189],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,141190,141191,141195,141209,141213],{"__ignoreMap":104},[109,141192,141193],{"class":111,"line":112},[109,141194,131838],{"class":115},[109,141196,141197,141199,141201,141203,141205,141207],{"class":111,"line":119},[109,141198,1320],{"class":126},[109,141200,52786],{"class":52475},[109,141202,54661],{"class":211},[109,141204,130],{"class":126},[109,141206,131851],{"class":278},[109,141208,52482],{"class":126},[109,141210,141211],{"class":111,"line":140},[109,141212,131858],{"class":126},[109,141214,141215,141217,141219],{"class":111,"line":154},[109,141216,52960],{"class":126},[109,141218,52786],{"class":52475},[109,141220,52482],{"class":126},[19,141222,141223,141224,141226],{},"上面是",[106,141225,141143],{},"，设置高度是 33px，设置下边框",[27,141228,141229,141235],{},[30,141230,141231,141232,141234],{},"里面放一个",[106,141233,24083],{}," 标题",[30,141236,141237,141238,141240,141241,141243],{},"放一个a",[106,141239,103868],{},"，内容是 更多，然后让 ",[106,141242,1776],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141245,141097],{},[99,141247,141248],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},[106,141249,141250,141258,141268,141278],{"__ignoreMap":104},[109,141251,141252,141254,141256],{"class":111,"line":112},[109,141253,52786],{"class":52475},[109,141255,138728],{"class":211},[109,141257,16745],{"class":126},[109,141259,141260,141262,141264,141266],{"class":111,"line":119},[109,141261,138735],{"class":133},[109,141263,52612],{"class":126},[109,141265,8978],{"class":278},[109,141267,137],{"class":126},[109,141269,141270,141272,141274,141276],{"class":111,"line":140},[109,141271,129343],{"class":133},[109,141273,52612],{"class":126},[109,141275,62044],{"class":133},[109,141277,137],{"class":126},[109,141279,141280],{"class":111,"line":154},[109,141281,742],{"class":126},[19,141283,141186],{},[99,141285,141286],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},[106,141287,141288,141296,141306,141316],{"__ignoreMap":104},[109,141289,141290,141292,141294],{"class":111,"line":112},[109,141291,52786],{"class":52475},[109,141293,138728],{"class":211},[109,141295,16745],{"class":126},[109,141297,141298,141300,141302,141304],{"class":111,"line":119},[109,141299,138735],{"class":133},[109,141301,52612],{"class":126},[109,141303,8978],{"class":278},[109,141305,137],{"class":126},[109,141307,141308,141310,141312,141314],{"class":111,"line":140},[109,141309,129343],{"class":133},[109,141311,52612],{"class":126},[109,141313,62044],{"class":133},[109,141315,137],{"class":126},[109,141317,141318],{"class":111,"line":154},[109,141319,742],{"class":126},[19,141321,141322,141323],{},"下面是",[106,141324,141147],{},[27,141326,141327,141335],{},[30,141328,141329,141330,102193,141332,141334],{},"里面包含 ",[106,141331,27],{},[106,141333,30],{}," 还有链接",[30,141336,140807,141337,141339,141340,141342,141343,141346,141347],{},[106,141338,30],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[106,141341,132393],{}," 2.设置 ",[106,141344,141345],{},"white-space: nowrap;"," 3. 设置 ",[106,141348,141349],{},"text-overflow: ellipsis;",[19,141351,141097],{},[99,141353,141355],{"className":127727,"code":141354,"language":127729,"meta":104,"style":104},"div {\n  overflow: hidden;\n}\n",[106,141356,141357,141363,141374],{"__ignoreMap":104},[109,141358,141359,141361],{"class":111,"line":112},[109,141360,52786],{"class":52475},[109,141362,16745],{"class":126},[109,141364,141365,141368,141370,141372],{"class":111,"line":119},[109,141366,141367],{"class":133},"  overflow",[109,141369,52612],{"class":126},[109,141371,62889],{"class":133},[109,141373,137],{"class":126},[109,141375,141376],{"class":111,"line":140},[109,141377,742],{"class":126},[19,141379,141186],{},[99,141381,141382],{"className":127727,"code":141354,"language":127729,"meta":104,"style":104},[106,141383,141384,141390,141400],{"__ignoreMap":104},[109,141385,141386,141388],{"class":111,"line":112},[109,141387,52786],{"class":52475},[109,141389,16745],{"class":126},[109,141391,141392,141394,141396,141398],{"class":111,"line":119},[109,141393,141367],{"class":133},[109,141395,52612],{"class":126},[109,141397,62889],{"class":133},[109,141399,137],{"class":126},[109,141401,141402],{"class":111,"line":140},[109,141403,742],{"class":126},[19,141405,141406,141407,141410],{},"2 号盒子为 ",[106,141408,141409],{},"lifeservice"," 生活服务模块 高度为 209px",[938,141412],{"style":127583,"src":141413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[27,141415,141416,141419,141429,141453,141464],{},[30,141417,141418],{},"设置边框（左右下边框）",[30,141420,141421,141422,141425,141426,141428],{},"里面的内容 是 ",[106,141423,141424],{},"ul > 12*li","，给",[106,141427,30],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[30,141430,141431,141432],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[27,141433,141434,141439,141448],{},[30,141435,141436,141438],{},[106,141437,141409],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[30,141440,141441,141442,141444,141445,141447],{},"可以让 ",[106,141443,141409],{}," 里面的 ",[106,141446,27],{}," 宽度为 252，就可以装的下 4 个 小 li",[30,141449,141450,141452],{},[106,141451,141409],{}," 盒子 overflow 隐藏多余的部分就可以了",[30,141454,117642,141455,141457,141458,141460,141461,141463],{},[106,141456,30],{}," 里面放一个 ",[106,141459,1345],{},"（里面放图标），下面的文本用 ",[106,141462,19],{}," 标签包裹",[30,141465,140227,141466,141468,141469,141471,141472,140261,141474,141477],{},[106,141467,1345],{}," 设置 24px宽和28px的高（注意 ",[106,141470,1345],{}," 是行内元素， 转成行内块），给 ",[106,141473,30],{},[106,141475,141476],{},"text-align:center"," 让里面内容居中显示",[19,141479,141097],{},[99,141481,141483],{"className":127727,"code":141482,"language":127729,"meta":104,"style":104},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[106,141484,141485,141503,141508,141518],{"__ignoreMap":104},[109,141486,141487,141489,141491,141493,141495,141497,141499,141501],{"class":111,"line":112},[109,141488,109],{"class":52475},[109,141490,13608],{"class":126},[109,141492,1776],{"class":52475},[109,141494,13608],{"class":126},[109,141496,24727],{"class":52475},[109,141498,13608],{"class":126},[109,141500,23],{"class":52475},[109,141502,16745],{"class":126},[109,141504,141505],{"class":111,"line":119},[109,141506,141507],{"class":115},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[109,141509,141510,141512,141514,141516],{"class":111,"line":140},[109,141511,129343],{"class":133},[109,141513,52612],{"class":126},[109,141515,129405],{"class":133},[109,141517,137],{"class":126},[109,141519,141520],{"class":111,"line":154},[109,141521,742],{"class":126},[19,141523,141186],{},[99,141525,141526],{"className":127727,"code":141482,"language":127729,"meta":104,"style":104},[106,141527,141528,141546,141550,141560],{"__ignoreMap":104},[109,141529,141530,141532,141534,141536,141538,141540,141542,141544],{"class":111,"line":112},[109,141531,109],{"class":52475},[109,141533,13608],{"class":126},[109,141535,1776],{"class":52475},[109,141537,13608],{"class":126},[109,141539,24727],{"class":52475},[109,141541,13608],{"class":126},[109,141543,23],{"class":52475},[109,141545,16745],{"class":126},[109,141547,141548],{"class":111,"line":119},[109,141549,141507],{"class":115},[109,141551,141552,141554,141556,141558],{"class":111,"line":140},[109,141553,129343],{"class":133},[109,141555,52612],{"class":126},[109,141557,129405],{"class":133},[109,141559,137],{"class":126},[109,141561,141562],{"class":111,"line":154},[109,141563,742],{"class":126},[19,141565,141566,141567,141570],{},"3 号盒子为 ",[106,141568,141569],{},"bargain"," 特价商品",[27,141572,141573],{},[30,141574,141575],{},"这个比较简单，直接插入一张图片即可",[19,141577,141097],{},[99,141579,141580],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,141581,141582],{"__ignoreMap":104},[109,141583,141584,141586,141588,141590,141592,141594,141596,141598,141600,141602,141604,141606],{"class":111,"line":112},[109,141585,1320],{"class":126},[109,141587,938],{"class":52475},[109,141589,56414],{"class":211},[109,141591,130],{"class":126},[109,141593,135244],{"class":278},[109,141595,56422],{"class":211},[109,141597,130],{"class":126},[109,141599,135251],{"class":278},[109,141601,135254],{"class":211},[109,141603,130],{"class":126},[109,141605,135259],{"class":278},[109,141607,52482],{"class":126},[19,141609,141186],{},[99,141611,141612],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,141613,141614],{"__ignoreMap":104},[109,141615,141616,141618,141620,141622,141624,141626,141628,141630,141632,141634,141636,141638],{"class":111,"line":112},[109,141617,1320],{"class":126},[109,141619,938],{"class":52475},[109,141621,56414],{"class":211},[109,141623,130],{"class":126},[109,141625,135244],{"class":278},[109,141627,56422],{"class":211},[109,141629,130],{"class":126},[109,141631,135251],{"class":278},[109,141633,135254],{"class":211},[109,141635,130],{"class":126},[109,141637,135259],{"class":278},[109,141639,52482],{"class":126},[51,141641,141643],{"id":141642},"_1612-推荐模块制作","16.1.2 推荐模块制作",[938,141645],{"style":127583,"src":141646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141648,141649,141650,141653],{},"大盒子 ",[106,141651,141652],{},"recom"," 推荐模块 recommend",[27,141655,141656],{},[30,141657,141658,141659,141661,141662,141665],{},"给这个 ",[106,141660,141652],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[106,141663,141664],{},"#ebebeb","），设置距离上边 12px",[19,141667,141097],{},[99,141669,141671],{"className":127727,"code":141670,"language":127729,"meta":104,"style":104},"div {\n  background-color: #f0f0f0;\n}\n",[106,141672,141673,141679,141690],{"__ignoreMap":104},[109,141674,141675,141677],{"class":111,"line":112},[109,141676,52786],{"class":52475},[109,141678,16745],{"class":126},[109,141680,141681,141683,141685,141688],{"class":111,"line":119},[109,141682,72053],{"class":133},[109,141684,52612],{"class":126},[109,141686,141687],{"class":133},"#f0f0f0",[109,141689,137],{"class":126},[109,141691,141692],{"class":111,"line":140},[109,141693,742],{"class":126},[19,141695,141186],{},[99,141697,141698],{"className":127727,"code":141670,"language":127729,"meta":104,"style":104},[106,141699,141700,141706,141716],{"__ignoreMap":104},[109,141701,141702,141704],{"class":111,"line":112},[109,141703,52786],{"class":52475},[109,141705,16745],{"class":126},[109,141707,141708,141710,141712,141714],{"class":111,"line":119},[109,141709,72053],{"class":133},[109,141711,52612],{"class":126},[109,141713,141687],{"class":133},[109,141715,137],{"class":126},[109,141717,141718],{"class":111,"line":140},[109,141719,742],{"class":126},[19,141721,141722],{},"里面包含 2 个盒子， 浮动即可",[19,141724,141097],{},[99,141726,141727],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,141728,141729,141735,141745],{"__ignoreMap":104},[109,141730,141731,141733],{"class":111,"line":112},[109,141732,131575],{"class":211},[109,141734,16745],{"class":126},[109,141736,141737,141739,141741,141743],{"class":111,"line":119},[109,141738,132207],{"class":133},[109,141740,52612],{"class":126},[109,141742,24910],{"class":133},[109,141744,137],{"class":126},[109,141746,141747],{"class":111,"line":140},[109,141748,742],{"class":126},[19,141750,141751,141752],{},"1 号盒子 ",[106,141753,141754],{},"recom_hd",[27,141756,141757,141760],{},[30,141758,141759],{},"设置宽度205px，高度163px",[30,141761,141231,141762,141764],{},[106,141763,938],{},"标签，插入图片即可",[19,141766,141097],{},[99,141768,141769],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,141770,141771],{"__ignoreMap":104},[109,141772,141773,141775,141777,141779,141781,141783,141785,141787,141789,141791,141793,141795],{"class":111,"line":112},[109,141774,1320],{"class":126},[109,141776,938],{"class":52475},[109,141778,56414],{"class":211},[109,141780,130],{"class":126},[109,141782,135244],{"class":278},[109,141784,56422],{"class":211},[109,141786,130],{"class":126},[109,141788,135251],{"class":278},[109,141790,135254],{"class":211},[109,141792,130],{"class":126},[109,141794,135259],{"class":278},[109,141796,52482],{"class":126},[19,141798,141186],{},[99,141800,141801],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,141802,141803],{"__ignoreMap":104},[109,141804,141805,141807,141809,141811,141813,141815,141817,141819,141821,141823,141825,141827],{"class":111,"line":112},[109,141806,1320],{"class":126},[109,141808,938],{"class":52475},[109,141810,56414],{"class":211},[109,141812,130],{"class":126},[109,141814,135244],{"class":278},[109,141816,56422],{"class":211},[109,141818,130],{"class":126},[109,141820,135251],{"class":278},[109,141822,135254],{"class":211},[109,141824,130],{"class":126},[109,141826,135259],{"class":278},[109,141828,52482],{"class":126},[19,141830,141831,141832,141835],{},"2 号盒子 ",[106,141833,141834],{},"recom_bd"," ，注意里面的小竖线",[27,141837,141838,141849,141852,141857,141862],{},[30,141839,141840,141841,141843,141844,141846,141847],{},"右侧结构里面放 ",[106,141842,27],{}," 包含 4个 ",[106,141845,30],{},"，每个li里面包含一个",[106,141848,938],{},[30,141850,141851],{},"直接利用切片工具把里面的内容当成一张图片",[30,141853,140227,141854,141856],{},[106,141855,30],{}," 设置浮动",[30,141858,140227,141859,141861],{},[106,141860,938],{}," 设置宽高，宽度 248px，高度 163px",[30,141863,141864,141865,141425,141868,141870,141871,141873,141874],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[106,141866,141867],{},"top 10px",[106,141869,30],{},"设置相对定位（注意，最后一个",[106,141872,30],{},"不用设置伪元素），可以利用 ",[106,141875,141876],{},"nth-child(-n+3){...}",[19,141878,141097],{},[99,141880,141881],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},[106,141882,141883,141891,141901,141911],{"__ignoreMap":104},[109,141884,141885,141887,141889],{"class":111,"line":112},[109,141886,52786],{"class":52475},[109,141888,138728],{"class":211},[109,141890,16745],{"class":126},[109,141892,141893,141895,141897,141899],{"class":111,"line":119},[109,141894,138735],{"class":133},[109,141896,52612],{"class":126},[109,141898,8978],{"class":278},[109,141900,137],{"class":126},[109,141902,141903,141905,141907,141909],{"class":111,"line":140},[109,141904,129343],{"class":133},[109,141906,52612],{"class":126},[109,141908,62044],{"class":133},[109,141910,137],{"class":126},[109,141912,141913],{"class":111,"line":154},[109,141914,742],{"class":126},[19,141916,141186],{},[99,141918,141919],{"className":127727,"code":139569,"language":127729,"meta":104,"style":104},[106,141920,141921,141929,141939,141949],{"__ignoreMap":104},[109,141922,141923,141925,141927],{"class":111,"line":112},[109,141924,52786],{"class":52475},[109,141926,138728],{"class":211},[109,141928,16745],{"class":126},[109,141930,141931,141933,141935,141937],{"class":111,"line":119},[109,141932,138735],{"class":133},[109,141934,52612],{"class":126},[109,141936,8978],{"class":278},[109,141938,137],{"class":126},[109,141940,141941,141943,141945,141947],{"class":111,"line":140},[109,141942,129343],{"class":133},[109,141944,52612],{"class":126},[109,141946,62044],{"class":133},[109,141948,137],{"class":126},[109,141950,141951],{"class":111,"line":154},[109,141952,742],{"class":126},[51,141954,141956],{"id":141955},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[938,141958],{"style":127583,"src":141959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141961,141962],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141964,141965],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141967,141968,141971],{},[106,141969,141970],{},"box_hd"," 制作",[19,141973,141751,141974,141976],{},[106,141975,141970],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[938,141978],{"style":127583,"src":141979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[27,141981,141982,141987,141992,141995],{},[30,141983,141984,141986],{},[106,141985,141970],{}," 给 30px 的高度，2个像素的下边框",[30,141988,141989,141990],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[106,141991,140238],{},[30,141993,141994],{},"左侧盒左浮动，右侧盒子右浮动",[30,141996,141997,141999,142000,142002],{},[106,141998,1776],{},"标签之间的距离用左右的",[106,142001,32058],{},"撑开即可",[19,142004,142005],{},"结构代码",[99,142007,142008],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,142009,142010,142016,142026],{"__ignoreMap":104},[109,142011,142012,142014],{"class":111,"line":112},[109,142013,131575],{"class":211},[109,142015,16745],{"class":126},[109,142017,142018,142020,142022,142024],{"class":111,"line":119},[109,142019,132207],{"class":133},[109,142021,52612],{"class":126},[109,142023,24910],{"class":133},[109,142025,137],{"class":126},[109,142027,142028],{"class":111,"line":140},[109,142029,742],{"class":126},[19,142031,142032],{},"样式代码",[99,142034,142035],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,142036,142037,142043,142053],{"__ignoreMap":104},[109,142038,142039,142041],{"class":111,"line":112},[109,142040,131575],{"class":211},[109,142042,16745],{"class":126},[109,142044,142045,142047,142049,142051],{"class":111,"line":119},[109,142046,132207],{"class":133},[109,142048,52612],{"class":126},[109,142050,24910],{"class":133},[109,142052,137],{"class":126},[109,142054,142055],{"class":111,"line":140},[109,142056,742],{"class":126},[19,142058,142059,141971],{},[106,142060,142061],{},"box_bd",[19,142063,142064],{},"2 号盒子 box_bd，不要给高度",[938,142066],{"style":127583,"src":142067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142069,142070],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142072,142073],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142075,142076],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[27,142078,142079,142091,142107],{},[30,142080,142081,142083,142084,142087,142088,142090],{},[106,142082,142061],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[106,142085,142086],{},"tab_content","，在",[106,142089,142086],{}," 里面包裹tab选项卡对应的内容",[30,142092,142093,142094,142097,142098,142100,142101,142103,142104,142106],{},"内容被一个大盒子包裹（",[106,142095,142096],{},"tab_list_item","），里面是 ",[106,142099,27],{}," 包裹 5个 ",[106,142102,30],{},"，每个",[106,142105,30],{},"设置对应的宽度，然后设置浮动",[30,142108,142109,142110,142112,142113,142115,142116],{},"而这5个",[106,142111,30],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[106,142114,30],{},"设置",[27,142117,142118,142136,142139],{},[30,142119,142120,142121,142123,142124,142126,142127,142129,142130,142132,142133,142135],{},"第一个小 ",[106,142122,30],{}," 分为上下结构，上面是 ",[106,142125,27],{}," 包裹 ",[106,142128,30],{}," ，",[106,142131,30],{},"里面包裹 ",[106,142134,1776],{},"，下面插入一张图片",[30,142137,142138],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[30,142140,142141,142142,142144,142145,142147,142148,142150],{},"后面的小 ",[106,142143,30],{}," 里面先放一个",[106,142146,1776],{},"标签，然后在",[106,142149,1776],{},"标签里面插入图片即可",[19,142152,142005],{},[99,142154,142155],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,142156,142157],{"__ignoreMap":104},[109,142158,142159,142161,142163,142165,142167,142169,142171,142173,142175,142177,142179,142181],{"class":111,"line":112},[109,142160,1320],{"class":126},[109,142162,938],{"class":52475},[109,142164,56414],{"class":211},[109,142166,130],{"class":126},[109,142168,135244],{"class":278},[109,142170,56422],{"class":211},[109,142172,130],{"class":126},[109,142174,135251],{"class":278},[109,142176,135254],{"class":211},[109,142178,130],{"class":126},[109,142180,135259],{"class":278},[109,142182,52482],{"class":126},[19,142184,142032],{},[99,142186,142187],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,142188,142189],{"__ignoreMap":104},[109,142190,142191,142193,142195,142197,142199,142201,142203,142205,142207,142209,142211,142213],{"class":111,"line":112},[109,142192,1320],{"class":126},[109,142194,938],{"class":52475},[109,142196,56414],{"class":211},[109,142198,130],{"class":126},[109,142200,135244],{"class":278},[109,142202,56422],{"class":211},[109,142204,130],{"class":126},[109,142206,135251],{"class":278},[109,142208,135254],{"class":211},[109,142210,130],{"class":126},[109,142212,135259],{"class":278},[109,142214,52482],{"class":126},[19,142216,142217],{},"tab栏切换需求！！！！！！介绍：",[938,142219],{"style":127583,"src":142220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[27,142222,142223,142231,142237,142240],{},[30,142224,142225,142228,142229],{},[106,142226,142227],{},"tab","栏的布局是 ",[106,142230,140238],{},[30,142232,142233,142234,142236],{},"有多少个",[106,142235,142227],{},"选项卡，那么对应就有多少个内容",[30,142238,142239],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[30,142241,142242,142243,142246,142247,142249,142250,142252],{},"等后面我们学习了",[106,142244,142245],{},"js","之后，我们就会配合",[106,142248,142245],{},"来实现，",[106,142251,142227],{},"栏的切换",[14,142254,142256],{"id":142255},"_162-列表制作","16.2 列表制作",[51,142258,142260],{"id":142259},"_1621-准备工作","16.2.1 准备工作",[27,142262,142263,142266,142269,142272],{},[30,142264,142265],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[30,142267,142268],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[30,142270,142271],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[30,142273,142274],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[51,142276,142278,142279,102193,142281,142283],{"id":142277},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[106,142280,132732],{},[106,142282,54888],{}," 修改",[938,142285],{"style":127583,"src":142286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[27,142288,142289],{},[30,142290,142291],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142293,141097],{},[99,142295,142296],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},[106,142297,142298,142302,142316,142320,142334,142338,142352,142356,142370,142374],{"__ignoreMap":104},[109,142299,142300],{"class":111,"line":112},[109,142301,133166],{"class":115},[109,142303,142304,142306,142308,142310,142312,142314],{"class":111,"line":119},[109,142305,133171],{"class":211},[109,142307,80982],{"class":126},[109,142309,130087],{"class":133},[109,142311,52612],{"class":126},[109,142313,133180],{"class":133},[109,142315,130657],{"class":126},[109,142317,142318],{"class":111,"line":140},[109,142319,133187],{"class":115},[109,142321,142322,142324,142326,142328,142330,142332],{"class":111,"line":154},[109,142323,133192],{"class":211},[109,142325,80982],{"class":126},[109,142327,130087],{"class":133},[109,142329,52612],{"class":126},[109,142331,55939],{"class":133},[109,142333,130657],{"class":126},[109,142335,142336],{"class":111,"line":161},[109,142337,133207],{"class":115},[109,142339,142340,142342,142344,142346,142348,142350],{"class":111,"line":167},[109,142341,133212],{"class":211},[109,142343,80982],{"class":126},[109,142345,130087],{"class":133},[109,142347,52612],{"class":126},[109,142349,56006],{"class":133},[109,142351,130657],{"class":126},[109,142353,142354],{"class":111,"line":185},[109,142355,133227],{"class":115},[109,142357,142358,142360,142362,142364,142366,142368],{"class":111,"line":201},[109,142359,133232],{"class":211},[109,142361,80982],{"class":126},[109,142363,130087],{"class":133},[109,142365,52612],{"class":126},[109,142367,87408],{"class":133},[109,142369,130657],{"class":126},[109,142371,142372],{"class":111,"line":206},[109,142373,133247],{"class":115},[109,142375,142376,142378,142380,142382,142384,142386],{"class":111,"line":218},[109,142377,133252],{"class":211},[109,142379,80982],{"class":126},[109,142381,130087],{"class":133},[109,142383,52612],{"class":126},[109,142385,133261],{"class":133},[109,142387,130657],{"class":126},[19,142389,141186],{},[99,142391,142392],{"className":127727,"code":133159,"language":127729,"meta":104,"style":104},[106,142393,142394,142398,142412,142416,142430,142434,142448,142452,142466,142470],{"__ignoreMap":104},[109,142395,142396],{"class":111,"line":112},[109,142397,133166],{"class":115},[109,142399,142400,142402,142404,142406,142408,142410],{"class":111,"line":119},[109,142401,133171],{"class":211},[109,142403,80982],{"class":126},[109,142405,130087],{"class":133},[109,142407,52612],{"class":126},[109,142409,133180],{"class":133},[109,142411,130657],{"class":126},[109,142413,142414],{"class":111,"line":140},[109,142415,133187],{"class":115},[109,142417,142418,142420,142422,142424,142426,142428],{"class":111,"line":154},[109,142419,133192],{"class":211},[109,142421,80982],{"class":126},[109,142423,130087],{"class":133},[109,142425,52612],{"class":126},[109,142427,55939],{"class":133},[109,142429,130657],{"class":126},[109,142431,142432],{"class":111,"line":161},[109,142433,133207],{"class":115},[109,142435,142436,142438,142440,142442,142444,142446],{"class":111,"line":167},[109,142437,133212],{"class":211},[109,142439,80982],{"class":126},[109,142441,130087],{"class":133},[109,142443,52612],{"class":126},[109,142445,56006],{"class":133},[109,142447,130657],{"class":126},[109,142449,142450],{"class":111,"line":185},[109,142451,133227],{"class":115},[109,142453,142454,142456,142458,142460,142462,142464],{"class":111,"line":201},[109,142455,133232],{"class":211},[109,142457,80982],{"class":126},[109,142459,130087],{"class":133},[109,142461,52612],{"class":126},[109,142463,87408],{"class":133},[109,142465,130657],{"class":126},[109,142467,142468],{"class":111,"line":206},[109,142469,133247],{"class":115},[109,142471,142472,142474,142476,142478,142480,142482],{"class":111,"line":218},[109,142473,133252],{"class":211},[109,142475,80982],{"class":126},[109,142477,130087],{"class":133},[109,142479,52612],{"class":126},[109,142481,133261],{"class":133},[109,142483,130657],{"class":126},[27,142485,142486,142497],{},[30,142487,142488,142489,142492,142493,102193,142495],{},"1 号盒子左侧浮动 ",[106,142490,142491],{},"sk_list"," 里面包含 ",[106,142494,27],{},[106,142496,30],{},[30,142498,142499,142500,142492,142503,102193,142505],{},"2 号盒子左侧浮动 ",[106,142501,142502],{},"sk_con",[106,142504,27],{},[106,142506,30],{},[19,142508,141097],{},[99,142510,142511],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,142512,142513,142519,142529],{"__ignoreMap":104},[109,142514,142515,142517],{"class":111,"line":112},[109,142516,131575],{"class":211},[109,142518,16745],{"class":126},[109,142520,142521,142523,142525,142527],{"class":111,"line":119},[109,142522,132207],{"class":133},[109,142524,52612],{"class":126},[109,142526,24910],{"class":133},[109,142528,137],{"class":126},[109,142530,142531],{"class":111,"line":140},[109,142532,742],{"class":126},[19,142534,141186],{},[99,142536,142537],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,142538,142539,142545,142555],{"__ignoreMap":104},[109,142540,142541,142543],{"class":111,"line":112},[109,142542,131575],{"class":211},[109,142544,16745],{"class":126},[109,142546,142547,142549,142551,142553],{"class":111,"line":119},[109,142548,132207],{"class":133},[109,142550,52612],{"class":126},[109,142552,24910],{"class":133},[109,142554,137],{"class":126},[109,142556,142557],{"class":111,"line":140},[109,142558,742],{"class":126},[51,142560,142562,142563],{"id":142561},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[106,142564,142565],{},"sk_container",[938,142567],{"style":127583,"src":142568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[27,142570,142571,142576],{},[30,142572,141751,142573,142575],{},[106,142574,142565],{}," 给宽度 1200，不要给高度",[30,142577,142578],{},"一定不要忘记清除浮动",[19,142580,141097],{},[99,142582,142583],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,142584,142585,142591,142601],{"__ignoreMap":104},[109,142586,142587,142589],{"class":111,"line":112},[109,142588,131575],{"class":211},[109,142590,16745],{"class":126},[109,142592,142593,142595,142597,142599],{"class":111,"line":119},[109,142594,132207],{"class":133},[109,142596,52612],{"class":126},[109,142598,24910],{"class":133},[109,142600,137],{"class":126},[109,142602,142603],{"class":111,"line":140},[109,142604,742],{"class":126},[765,142606,142607],{},[30,142608,142609],{},"sk_hd制作",[27,142611,142612],{},[30,142613,141831,142614,142617],{},[106,142615,142616],{},"sk_hd"," ，插入图片即可",[19,142619,141097],{},[99,142621,142622],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,142623,142624],{"__ignoreMap":104},[109,142625,142626,142628,142630,142632,142634,142636,142638,142640,142642,142644,142646,142648],{"class":111,"line":112},[109,142627,1320],{"class":126},[109,142629,938],{"class":52475},[109,142631,56414],{"class":211},[109,142633,130],{"class":126},[109,142635,135244],{"class":278},[109,142637,56422],{"class":211},[109,142639,130],{"class":126},[109,142641,135251],{"class":278},[109,142643,135254],{"class":211},[109,142645,130],{"class":126},[109,142647,135259],{"class":278},[109,142649,52482],{"class":126},[765,142651,142652],{"start":119},[30,142653,142654],{},"sk_bd制作",[27,142656,142657],{},[30,142658,142659,142660,142663,142664,102193,142666,142668],{},"3 号盒子 ",[106,142661,142662],{},"sk_bd"," ，里面包含很多的 ",[106,142665,27],{},[106,142667,30],{},[27,142669,142670,142679],{},[30,142671,142672,142673,142675,142676,142678],{},"当鼠标移入到 ",[106,142674,30],{}," 上面的时候显示红色的边框，在这里先给 ",[106,142677,30],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[30,142680,142681,142682,142684,142685,142687,142688,142691,142692,142694],{},"由于给每个 ",[106,142683,30],{}," 都设置了外边距，导致一行的最后一个 ",[106,142686,30],{}," 掉了下来，在这里我们利用 ",[106,142689,142690],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[106,142693,30],{},"，去掉外边距就好了",[19,142696,141097],{},[99,142698,142699],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,142700,142701,142707,142719],{"__ignoreMap":104},[109,142702,142703,142705],{"class":111,"line":112},[109,142704,52786],{"class":52475},[109,142706,16745],{"class":126},[109,142708,142709,142711,142713,142715,142717],{"class":111,"line":119},[109,142710,71645],{"class":133},[109,142712,52612],{"class":126},[109,142714,1314],{"class":133},[109,142716,52731],{"class":133},[109,142718,137],{"class":126},[109,142720,142721],{"class":111,"line":140},[109,142722,742],{"class":126},[19,142724,141186],{},[99,142726,142727],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,142728,142729,142735,142747],{"__ignoreMap":104},[109,142730,142731,142733],{"class":111,"line":112},[109,142732,52786],{"class":52475},[109,142734,16745],{"class":126},[109,142736,142737,142739,142741,142743,142745],{"class":111,"line":119},[109,142738,71645],{"class":133},[109,142740,52612],{"class":126},[109,142742,1314],{"class":133},[109,142744,52731],{"class":133},[109,142746,137],{"class":126},[109,142748,142749],{"class":111,"line":140},[109,142750,742],{"class":126},[14,142752,142754],{"id":142753},"_163-注册页面制作","16.3 注册页面制作",[938,142756],{"style":127583,"src":142757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142759,142760,142762],{},[23,142761,10343],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[938,142764],{"style":127583,"src":142765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[51,142767,142769],{"id":142768},"_1631-准备工作","16.3.1 准备工作",[27,142771,142772,142775],{},[30,142773,142774],{},"创建register.html，引入 base.css，引入favicon图标",[30,142776,142777],{},"创建register.css ，在html页面进行引入",[51,142779,142781,142782,142784],{"id":142780},"_1632-header-头部实现","16.3.2 ",[106,142783,132732],{}," 头部实现",[27,142786,142787,142790],{},[30,142788,142789],{},"整个内容用 版心 进行包裹",[30,142791,142792],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142794,141097],{},[99,142796,142797],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,142798,142799],{"__ignoreMap":104},[109,142800,142801,142803,142805,142807,142809,142811,142813,142815,142817,142819,142821,142823],{"class":111,"line":112},[109,142802,1320],{"class":126},[109,142804,938],{"class":52475},[109,142806,56414],{"class":211},[109,142808,130],{"class":126},[109,142810,135244],{"class":278},[109,142812,56422],{"class":211},[109,142814,130],{"class":126},[109,142816,135251],{"class":278},[109,142818,135254],{"class":211},[109,142820,130],{"class":126},[109,142822,135259],{"class":278},[109,142824,52482],{"class":126},[19,142826,141186],{},[99,142828,142829],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,142830,142831],{"__ignoreMap":104},[109,142832,142833,142835,142837,142839,142841,142843,142845,142847,142849,142851,142853,142855],{"class":111,"line":112},[109,142834,1320],{"class":126},[109,142836,938],{"class":52475},[109,142838,56414],{"class":211},[109,142840,130],{"class":126},[109,142842,135244],{"class":278},[109,142844,56422],{"class":211},[109,142846,130],{"class":126},[109,142848,135251],{"class":278},[109,142850,135254],{"class":211},[109,142852,130],{"class":126},[109,142854,135259],{"class":278},[109,142856,52482],{"class":126},[51,142858,142860,142861,142864],{"id":142859},"_1633-registerarea-主体模块实现","16.3.3 ",[106,142862,142863],{},"registerarea"," 主体模块实现",[938,142866],{"style":127583,"src":142867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142869,142870],{},"整个大盒子 高度为 522px，设置4个边框",[19,142872,141097],{},[99,142874,142875],{"className":127727,"code":131884,"language":127729,"meta":104,"style":104},[106,142876,142877,142883,142899],{"__ignoreMap":104},[109,142878,142879,142881],{"class":111,"line":112},[109,142880,52786],{"class":52475},[109,142882,16745],{"class":126},[109,142884,142885,142887,142889,142891,142893,142895,142897],{"class":111,"line":119},[109,142886,72071],{"class":133},[109,142888,52612],{"class":126},[109,142890,1755],{"class":133},[109,142892,52667],{"class":122},[109,142894,52696],{"class":133},[109,142896,131119],{"class":133},[109,142898,137],{"class":126},[109,142900,142901],{"class":111,"line":140},[109,142902,742],{"class":126},[19,142904,141186],{},[99,142906,142907],{"className":127727,"code":131884,"language":127729,"meta":104,"style":104},[106,142908,142909,142915,142931],{"__ignoreMap":104},[109,142910,142911,142913],{"class":111,"line":112},[109,142912,52786],{"class":52475},[109,142914,16745],{"class":126},[109,142916,142917,142919,142921,142923,142925,142927,142929],{"class":111,"line":119},[109,142918,72071],{"class":133},[109,142920,52612],{"class":126},[109,142922,1755],{"class":133},[109,142924,52667],{"class":122},[109,142926,52696],{"class":133},[109,142928,131119],{"class":133},[109,142930,137],{"class":126},[109,142932,142933],{"class":111,"line":140},[109,142934,742],{"class":126},[19,142936,142937],{},"1号盒子 是一个 h3 标签，放标题",[27,142939,142940],{},[30,142941,142942],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142944,141097],{},[99,142946,142947],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,142948,142949,142955,142965],{"__ignoreMap":104},[109,142950,142951,142953],{"class":111,"line":112},[109,142952,131575],{"class":211},[109,142954,16745],{"class":126},[109,142956,142957,142959,142961,142963],{"class":111,"line":119},[109,142958,132207],{"class":133},[109,142960,52612],{"class":126},[109,142962,24910],{"class":133},[109,142964,137],{"class":126},[109,142966,142967],{"class":111,"line":140},[109,142968,742],{"class":126},[19,142970,141186],{},[99,142972,142973],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,142974,142975,142981,142991],{"__ignoreMap":104},[109,142976,142977,142979],{"class":111,"line":112},[109,142978,131575],{"class":211},[109,142980,16745],{"class":126},[109,142982,142983,142985,142987,142989],{"class":111,"line":119},[109,142984,132207],{"class":133},[109,142986,52612],{"class":126},[109,142988,24910],{"class":133},[109,142990,137],{"class":126},[109,142992,142993],{"class":111,"line":140},[109,142994,742],{"class":126},[19,142996,142997],{},"2号盒子 里面放注册的内容",[27,142999,143000,143003,143012,143026,143039,143042,143045,143063,143077],{},[30,143001,143002],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[30,143004,143005,143006,143008,143009,143011],{},"里面的内容利用 ",[106,143007,27],{}," 包含 ",[106,143010,30],{}," 来实现的（不需要用表格）",[30,143013,140241,143014,143016,143017,143019,143020,143022,143023,143025],{},[106,143015,30],{}," 里面，左侧放 ",[106,143018,34783],{}," 标签， 中间放",[106,143021,54996],{}," 标签， 右侧放 ",[106,143024,109],{}," 提示信息",[30,143027,143028,143029,143031,143032,143034,143035,143038],{},"左侧 ",[106,143030,34783],{},"里面的文字都是右对齐，我们可以给",[106,143033,34783],{},"设置一个宽度（88px），然后利用",[106,143036,143037],{},"text-align"," 来设置右对齐",[30,143040,143041],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[30,143043,143044],{},"右侧 span修饰一下文字颜色",[30,143046,143047,143048],{},"提示信息的样式优化",[27,143049,143050,143053,143056],{},[30,143051,143052],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[30,143054,143055],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[30,143057,143058,143059,143062],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[106,143060,143061],{},"vertical-algin"," 来设置 图片与文字对齐方式",[30,143064,143065,143066],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[27,143067,143068,143074],{},[30,143069,143070,143071,143073],{},"设置 ",[106,143072,24727],{}," 的 左右 12px 的内边距，设置一下文字颜色",[30,143075,143076],{},"分别设置 背景颜色",[30,143078,143079,143080,143082],{},"同意协议 和 完成注册 都是用 ",[106,143081,30],{}," 进行包裹",[19,143084,141097],{},[99,143086,143087],{"className":127727,"code":141670,"language":127729,"meta":104,"style":104},[106,143088,143089,143095,143105],{"__ignoreMap":104},[109,143090,143091,143093],{"class":111,"line":112},[109,143092,52786],{"class":52475},[109,143094,16745],{"class":126},[109,143096,143097,143099,143101,143103],{"class":111,"line":119},[109,143098,72053],{"class":133},[109,143100,52612],{"class":126},[109,143102,141687],{"class":133},[109,143104,137],{"class":126},[109,143106,143107],{"class":111,"line":140},[109,143108,742],{"class":126},[19,143110,141186],{},[99,143112,143113],{"className":127727,"code":141670,"language":127729,"meta":104,"style":104},[106,143114,143115,143121,143131],{"__ignoreMap":104},[109,143116,143117,143119],{"class":111,"line":112},[109,143118,52786],{"class":52475},[109,143120,16745],{"class":126},[109,143122,143123,143125,143127,143129],{"class":111,"line":119},[109,143124,72053],{"class":133},[109,143126,52612],{"class":126},[109,143128,141687],{"class":133},[109,143130,137],{"class":126},[109,143132,143133],{"class":111,"line":140},[109,143134,742],{"class":126},[51,143136,143138],{"id":143137},"_1634-底部实现","16.3.4 底部实现",[19,143140,141097],{},[99,143142,143143],{"className":127727,"code":141670,"language":127729,"meta":104,"style":104},[106,143144,143145,143151,143161],{"__ignoreMap":104},[109,143146,143147,143149],{"class":111,"line":112},[109,143148,52786],{"class":52475},[109,143150,16745],{"class":126},[109,143152,143153,143155,143157,143159],{"class":111,"line":119},[109,143154,72053],{"class":133},[109,143156,52612],{"class":126},[109,143158,141687],{"class":133},[109,143160,137],{"class":126},[109,143162,143163],{"class":111,"line":140},[109,143164,742],{"class":126},[19,143166,141186],{},[99,143168,143169],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,143170,143171,143175,143189,143193],{"__ignoreMap":104},[109,143172,143173],{"class":111,"line":112},[109,143174,131838],{"class":115},[109,143176,143177,143179,143181,143183,143185,143187],{"class":111,"line":119},[109,143178,1320],{"class":126},[109,143180,52786],{"class":52475},[109,143182,54661],{"class":211},[109,143184,130],{"class":126},[109,143186,131851],{"class":278},[109,143188,52482],{"class":126},[109,143190,143191],{"class":111,"line":140},[109,143192,131858],{"class":126},[109,143194,143195,143197,143199],{"class":111,"line":154},[109,143196,52960],{"class":126},[109,143198,52786],{"class":52475},[109,143200,52482],{"class":126},[14,143202,143204],{"id":143203},"_164-项目总结","16.4 项目总结",[765,143206,143207,143210,143213,143216],{},[30,143208,143209],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[30,143211,143212],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[30,143214,143215],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[30,143217,143218],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[938,143220],{"style":127583,"src":143221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[765,143223,143224],{"start":161},[30,143225,143226],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[938,143228],{"style":127583,"src":143229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[765,143231,143232],{"start":167},[30,143233,143234],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[938,143236],{"style":127583,"src":143237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[99,143239,143240],{"className":128474,"code":137884,"language":128476,"meta":104,"style":104},[106,143241,143242],{"__ignoreMap":104},[109,143243,143244,143246,143248,143250,143252,143254,143256,143258,143260,143262,143264,143266],{"class":111,"line":112},[109,143245,1320],{"class":126},[109,143247,54996],{"class":52475},[109,143249,54999],{"class":211},[109,143251,130],{"class":126},[109,143253,63874],{"class":278},[109,143255,16093],{"class":211},[109,143257,130],{"class":126},[109,143259,137905],{"class":278},[109,143261,62195],{"class":211},[109,143263,130],{"class":126},[109,143265,137912],{"class":278},[109,143267,52482],{"class":126},[765,143269,143270,143273],{"start":185},[30,143271,143272],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[30,143274,143275],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1467,143277,143278],{},"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":104,"searchDepth":119,"depth":119,"links":143280},[143281,143286,143293,143301],{"id":140907,"depth":119,"text":140908,"children":143282},[143283,143284,143285],{"id":140911,"depth":140,"text":140912},{"id":141642,"depth":140,"text":141643},{"id":141955,"depth":140,"text":141956},{"id":142255,"depth":119,"text":142256,"children":143287},[143288,143289,143291],{"id":142259,"depth":140,"text":142260},{"id":142277,"depth":140,"text":143290},"16.2.2 列表页 header 和 nav 修改",{"id":142561,"depth":140,"text":143292},"16.2.3 列表页主体 sk_container",{"id":142753,"depth":119,"text":142754,"children":143294},[143295,143296,143298,143300],{"id":142768,"depth":140,"text":142769},{"id":142780,"depth":140,"text":143297},"16.3.2 header 头部实现",{"id":142859,"depth":140,"text":143299},"16.3.3 registerarea 主体模块实现",{"id":143137,"depth":140,"text":143138},{"id":143203,"depth":119,"text":143204},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140899,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143308,"title":143309,"body":143310,"description":24550,"extension":1476,"meta":143418,"navigation":157,"path":143419,"seo":143420,"stem":143421,"__hash__":143422},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143311,"toc":143413},[143312,143315,143319,143322,143325,143334,143343,143347,143352,143359,143377,143380,143383,143386,143389,143392,143395,143398,143401,143404,143407,143410],[10,143313,143309],{"id":143314},"_17-web服务器与网站发布",[14,143316,143318],{"id":143317},"_171-web服务器","17.1 Web服务器",[19,143320,143321],{},"把自己网站上传到服务器上，可以让其他人访问",[938,143323],{"style":127583,"src":143324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143326,143327,143330,143331],{},[23,143328,143329],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[23,143332,143333],{},"Web 服务器等",[19,143335,143336,143337,102193,143340,26915],{},"根据服务器在网络中所在的位置不同，又可分为 ",[23,143338,143339],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[23,143341,143342],{},"远程服务器",[51,143344,143346],{"id":143345},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143348,143349],{},[23,143350,143351],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143353,143354,143355],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[1776,143356,143357],{"href":143357,"rel":143358},"http:\u002F\u002Ffree.3v.do\u002F",[25039],[27,143360,143361,143364,143367,143374],{},[30,143362,143363],{},"去免费空间网站注册账号。",[30,143365,143366],{},"记录下主机名、用户名、密码、域名。",[30,143368,143369,143370,143373],{},"利用 ",[106,143371,143372],{},"utftp"," 软件 上传网站到远程服务器",[30,143375,143376],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143378,143379],{},"使用软件上传，对上传软件文件进行解压",[938,143381],{"style":127583,"src":143382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[938,143384],{"style":127583,"src":143385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143387,143388],{},"输入刚刚申请的服务器账号信息：",[938,143390],{"style":127583,"src":143391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[938,143393],{"style":127583,"src":143394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[938,143396],{"style":127583,"src":143397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[938,143399],{"style":127583,"src":143400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143402,143403],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[938,143405],{"style":127583,"src":143406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143408,143409],{},"浏览器输入域名即可访问",[19,143411,143412],{},"首页一定必须是index",{"title":104,"searchDepth":119,"depth":119,"links":143414},[143415],{"id":143317,"depth":119,"text":143318,"children":143416},[143417],{"id":143345,"depth":140,"text":143346},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143309,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143424,"title":143425,"body":143426,"description":24550,"extension":1476,"meta":144353,"navigation":157,"path":144354,"seo":144355,"stem":144356,"__hash__":144357},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143427,"toc":144336},[143428,143431,143435,143438,143441,143452,143455,143459,143463,143468,143471,143474,143477,143480,143484,143510,143514,143518,143521,143524,143528,143561,143565,143568,143571,143635,143639,143643,143646,143649,143652,143656,143701,143705,143708,143738,143742,143746,143749,143752,143756,143759,143828,143831,143939,143941,143947,143951,143954,143957,144053,144056,144060,144084,144088,144091,144095,144098,144102,144105,144108,144111,144114,144118,144121,144124,144128,144132,144135,144138,144141,144144,144148,144151,144155,144158,144161,144206,144210,144214,144217,144220,144223,144255,144259,144262,144296,144300,144303,144333],[10,143429,143425],{"id":143430},"_18-2d动画与3d转换",[14,143432,143434],{"id":143433},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143436,143437],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143439,143440],{},"转换（transform）你可以简单理解为变形",[27,143442,143443,143446,143449],{},[30,143444,143445],{},"移动：translate",[30,143447,143448],{},"旋转：rotate",[30,143450,143451],{},"缩放：scale",[938,143453],{"style":127583,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[51,143456,143458],{"id":143457},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23171,143460,143462],{"id":143461},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143464,143465,143466],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[23,143467,134386],{},[938,143469],{"style":127583,"src":143470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143472,143473],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143475,143476],{},"对于行内元素无效",[19,143478,143479],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23171,143481,143483],{"id":143482},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[99,143485,143486],{"className":127727,"code":139916,"language":127729,"meta":104,"style":104},[106,143487,143488,143494,143506],{"__ignoreMap":104},[109,143489,143490,143492],{"class":111,"line":112},[109,143491,52786],{"class":52475},[109,143493,16745],{"class":126},[109,143495,143496,143498,143500,143502,143504],{"class":111,"line":119},[109,143497,71645],{"class":133},[109,143499,52612],{"class":126},[109,143501,1314],{"class":133},[109,143503,52731],{"class":133},[109,143505,137],{"class":126},[109,143507,143508],{"class":111,"line":140},[109,143509,742],{"class":126},[51,143511,143513],{"id":143512},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23171,143515,143517],{"id":143516},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143519,143520],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[938,143522],{"style":127583,"src":143523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23171,143525,143527],{"id":143526},"_18122-旋转效果","18.1.2.2 旋转效果",[99,143529,143531],{"className":127727,"code":143530,"language":127729,"meta":104,"style":104},"div {\n  transform: rotate(45deg);\n}\n",[106,143532,143533,143539,143557],{"__ignoreMap":104},[109,143534,143535,143537],{"class":111,"line":112},[109,143536,52786],{"class":52475},[109,143538,16745],{"class":126},[109,143540,143541,143543,143545,143548,143550,143552,143555],{"class":111,"line":119},[109,143542,137711],{"class":133},[109,143544,52612],{"class":126},[109,143546,143547],{"class":133},"rotate",[109,143549,714],{"class":126},[109,143551,2061],{"class":133},[109,143553,143554],{"class":122},"deg",[109,143556,720],{"class":126},[109,143558,143559],{"class":111,"line":140},[109,143560,742],{"class":126},[23171,143562,143564],{"id":143563},"_18123-三角做法","18.1.2.3 三角做法",[19,143566,143567],{},"该下标当经过最外层大盒子时会实现向上反转",[938,143569],{"style":127583,"src":143570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[99,143572,143573],{"className":127727,"code":136247,"language":127729,"meta":104,"style":104},[106,143574,143575,143579,143585,143595,143605,143621,143631],{"__ignoreMap":104},[109,143576,143577],{"class":111,"line":112},[109,143578,136254],{"class":115},[109,143580,143581,143583],{"class":111,"line":119},[109,143582,136259],{"class":211},[109,143584,16745],{"class":126},[109,143586,143587,143589,143591,143593],{"class":111,"line":140},[109,143588,71743],{"class":133},[109,143590,52612],{"class":126},[109,143592,1314],{"class":133},[109,143594,137],{"class":126},[109,143596,143597,143599,143601,143603],{"class":111,"line":154},[109,143598,71963],{"class":133},[109,143600,52612],{"class":126},[109,143602,1314],{"class":133},[109,143604,137],{"class":126},[109,143606,143607,143609,143611,143613,143615,143617,143619],{"class":111,"line":161},[109,143608,72071],{"class":133},[109,143610,52612],{"class":126},[109,143612,1008],{"class":133},[109,143614,52667],{"class":122},[109,143616,52696],{"class":133},[109,143618,65166],{"class":133},[109,143620,137],{"class":126},[109,143622,143623,143625,143627,143629],{"class":111,"line":167},[109,143624,136302],{"class":133},[109,143626,52612],{"class":126},[109,143628,63544],{"class":133},[109,143630,137],{"class":126},[109,143632,143633],{"class":111,"line":185},[109,143634,742],{"class":126},[51,143636,143638],{"id":143637},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23171,143640,143642],{"id":143641},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143644,143645],{},"设置中心点",[938,143647],{"style":127583,"src":143648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143650,143651],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23171,143653,143655],{"id":143654},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[99,143657,143659],{"className":127727,"code":143658,"language":127729,"meta":104,"style":104},"\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",[106,143660,143661,143666,143672,143687,143692,143697],{"__ignoreMap":104},[109,143662,143663],{"class":111,"line":112},[109,143664,143665],{"class":115},"\u002F* 转换中心点 *\u002F\n",[109,143667,143668,143670],{"class":111,"line":119},[109,143669,52786],{"class":52475},[109,143671,16745],{"class":126},[109,143673,143674,143677,143679,143681,143683,143685],{"class":111,"line":140},[109,143675,143676],{"class":133},"  transform-origin",[109,143678,52612],{"class":126},[109,143680,52767],{"class":133},[109,143682,18317],{"class":133},[109,143684,131590],{"class":126},[109,143686,136400],{"class":115},[109,143688,143689],{"class":111,"line":154},[109,143690,143691],{"class":115},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[109,143693,143694],{"class":111,"line":161},[109,143695,143696],{"class":115},"  \u002F* transform-origin: left top; *\u002F\n",[109,143698,143699],{"class":111,"line":167},[109,143700,742],{"class":126},[23171,143702,143704],{"id":143703},"_18133-旋转案例","18.1.3.3 旋转案例",[938,143706],{"style":127583,"src":143707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[99,143709,143710],{"className":127727,"code":143530,"language":127729,"meta":104,"style":104},[106,143711,143712,143718,143734],{"__ignoreMap":104},[109,143713,143714,143716],{"class":111,"line":112},[109,143715,52786],{"class":52475},[109,143717,16745],{"class":126},[109,143719,143720,143722,143724,143726,143728,143730,143732],{"class":111,"line":119},[109,143721,137711],{"class":133},[109,143723,52612],{"class":126},[109,143725,143547],{"class":133},[109,143727,714],{"class":126},[109,143729,2061],{"class":133},[109,143731,143554],{"class":122},[109,143733,720],{"class":126},[109,143735,143736],{"class":111,"line":140},[109,143737,742],{"class":126},[51,143739,143741],{"id":143740},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23171,143743,143745],{"id":143744},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143747,143748],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[938,143750],{"style":127583,"src":143751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23171,143753,143755],{"id":143754},"_18142-分页按钮","18.1.4.2 分页按钮",[938,143757],{"style":127583,"src":143758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[99,143760,143762],{"className":127727,"code":143761,"language":127729,"meta":104,"style":104},"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",[106,143763,143764,143770,143786,143790,143794,143799,143805,143819,143824],{"__ignoreMap":104},[109,143765,143766,143768],{"class":111,"line":112},[109,143767,52786],{"class":52475},[109,143769,16745],{"class":126},[109,143771,143772,143774,143776,143779,143781,143784],{"class":111,"line":119},[109,143773,137711],{"class":133},[109,143775,52612],{"class":126},[109,143777,143778],{"class":133},"scale",[109,143780,714],{"class":126},[109,143782,143783],{"class":133},"1.2",[109,143785,720],{"class":126},[109,143787,143788],{"class":111,"line":140},[109,143789,742],{"class":126},[109,143791,143792],{"class":111,"line":154},[109,143793,137188],{"class":126},[109,143795,143796],{"class":111,"line":161},[109,143797,143798],{"class":115},"\u002F* 2D 缩放 *\u002F\n",[109,143800,143801,143803],{"class":111,"line":167},[109,143802,52786],{"class":52475},[109,143804,16745],{"class":126},[109,143806,143807,143809,143811,143813,143815,143817],{"class":111,"line":185},[109,143808,137711],{"class":133},[109,143810,52612],{"class":126},[109,143812,143778],{"class":133},[109,143814,714],{"class":126},[109,143816,143783],{"class":133},[109,143818,720],{"class":126},[109,143820,143821],{"class":111,"line":201},[109,143822,143823],{"class":115},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[109,143825,143826],{"class":111,"line":206},[109,143827,742],{"class":126},[19,143829,143830],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[99,143832,143834],{"className":127727,"code":143833,"language":127729,"meta":104,"style":104},"\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",[106,143835,143836,143841,143851,143872,143893,143897,143902,143908,143935],{"__ignoreMap":104},[109,143837,143838],{"class":111,"line":112},[109,143839,143840],{"class":115},"\u002F* 定义动画 *\u002F\n",[109,143842,143843,143846,143849],{"class":111,"line":119},[109,143844,143845],{"class":122},"@keyframes",[109,143847,143848],{"class":6553}," move",[109,143850,16745],{"class":126},[109,143852,143853,143856,143858,143860,143862,143865,143867,143869],{"class":111,"line":140},[109,143854,143855],{"class":211},"  0%",[109,143857,80982],{"class":126},[109,143859,49309],{"class":133},[109,143861,52612],{"class":126},[109,143863,143864],{"class":133},"translateX",[109,143866,714],{"class":126},[109,143868,1314],{"class":133},[109,143870,143871],{"class":126},"); }\n",[109,143873,143874,143877,143879,143881,143883,143885,143887,143889,143891],{"class":111,"line":154},[109,143875,143876],{"class":211},"  100%",[109,143878,80982],{"class":126},[109,143880,49309],{"class":133},[109,143882,52612],{"class":126},[109,143884,143864],{"class":133},[109,143886,714],{"class":126},[109,143888,1351],{"class":133},[109,143890,52667],{"class":122},[109,143892,143871],{"class":126},[109,143894,143895],{"class":111,"line":161},[109,143896,742],{"class":126},[109,143898,143899],{"class":111,"line":167},[109,143900,143901],{"class":115},"\u002F* 调用动画 *\u002F\n",[109,143903,143904,143906],{"class":111,"line":185},[109,143905,52786],{"class":52475},[109,143907,16745],{"class":126},[109,143909,143910,143913,143915,143917,143919,143921,143923,143925,143927,143930,143933],{"class":111,"line":201},[109,143911,143912],{"class":133},"  animation",[109,143914,52612],{"class":126},[109,143916,136413],{"class":133},[109,143918,26293],{"class":133},[109,143920,2227],{"class":122},[109,143922,79855],{"class":133},[109,143924,734],{"class":133},[109,143926,2227],{"class":122},[109,143928,143929],{"class":133}," infinite",[109,143931,143932],{"class":133}," alternate",[109,143934,137],{"class":126},[109,143936,143937],{"class":111,"line":206},[109,143938,742],{"class":126},[19,143940,143830],{},[99,143942,143945],{"className":143943,"code":143944,"language":6524},[6522],"\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",[106,143946,143944],{"__ignoreMap":104},[23171,143948,143950],{"id":143949},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143952,143953],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[938,143955],{"style":127583,"src":143956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[99,143958,143959],{"className":127727,"code":143833,"language":127729,"meta":104,"style":104},[106,143960,143961,143965,143973,143991,144011,144015,144019,144025,144049],{"__ignoreMap":104},[109,143962,143963],{"class":111,"line":112},[109,143964,143840],{"class":115},[109,143966,143967,143969,143971],{"class":111,"line":119},[109,143968,143845],{"class":122},[109,143970,143848],{"class":6553},[109,143972,16745],{"class":126},[109,143974,143975,143977,143979,143981,143983,143985,143987,143989],{"class":111,"line":140},[109,143976,143855],{"class":211},[109,143978,80982],{"class":126},[109,143980,49309],{"class":133},[109,143982,52612],{"class":126},[109,143984,143864],{"class":133},[109,143986,714],{"class":126},[109,143988,1314],{"class":133},[109,143990,143871],{"class":126},[109,143992,143993,143995,143997,143999,144001,144003,144005,144007,144009],{"class":111,"line":154},[109,143994,143876],{"class":211},[109,143996,80982],{"class":126},[109,143998,49309],{"class":133},[109,144000,52612],{"class":126},[109,144002,143864],{"class":133},[109,144004,714],{"class":126},[109,144006,1351],{"class":133},[109,144008,52667],{"class":122},[109,144010,143871],{"class":126},[109,144012,144013],{"class":111,"line":161},[109,144014,742],{"class":126},[109,144016,144017],{"class":111,"line":167},[109,144018,143901],{"class":115},[109,144020,144021,144023],{"class":111,"line":185},[109,144022,52786],{"class":52475},[109,144024,16745],{"class":126},[109,144026,144027,144029,144031,144033,144035,144037,144039,144041,144043,144045,144047],{"class":111,"line":201},[109,144028,143912],{"class":133},[109,144030,52612],{"class":126},[109,144032,136413],{"class":133},[109,144034,26293],{"class":133},[109,144036,2227],{"class":122},[109,144038,79855],{"class":133},[109,144040,734],{"class":133},[109,144042,2227],{"class":122},[109,144044,143929],{"class":133},[109,144046,143932],{"class":133},[109,144048,137],{"class":126},[109,144050,144051],{"class":111,"line":206},[109,144052,742],{"class":126},[19,144054,144055],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[51,144057,144059],{"id":144058},"_1823-知识点回顾","18.2.3 知识点回顾",[99,144061,144062],{"className":127727,"code":129896,"language":127729,"meta":104,"style":104},[106,144063,144064,144070,144080],{"__ignoreMap":104},[109,144065,144066,144068],{"class":111,"line":112},[109,144067,52786],{"class":52475},[109,144069,16745],{"class":126},[109,144071,144072,144074,144076,144078],{"class":111,"line":119},[109,144073,129909],{"class":133},[109,144075,52612],{"class":126},[109,144077,62911],{"class":133},[109,144079,137],{"class":126},[109,144081,144082],{"class":111,"line":140},[109,144083,742],{"class":126},[14,144085,144087],{"id":144086},"_183-3d-转换","18.3 3D 转换",[19,144089,144090],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[51,144092,144094],{"id":144093},"_1831-坐标轴认识","18.3.1 坐标轴认识",[938,144096],{"style":127583,"src":144097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[51,144099,144101],{"id":144100},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[938,144103],{"style":127583,"src":144104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144106,144107],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144109,144110],{},"translate3d的效果需要搭配透视perspective来使用",[938,144112],{"style":127583,"src":144113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[51,144115,144117],{"id":144116},"_1833-透视-perspective","18.3.3 透视 perspective",[938,144119],{"style":127583,"src":144120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144122,144123],{},"透视写在父盒子上，单位为像素",[51,144125,144127],{"id":144126},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23171,144129,144131],{"id":144130},"_18341-分开解释","18.3.4.1 分开解释",[938,144133],{"style":127583,"src":144134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[938,144136],{"style":127583,"src":144137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[938,144139],{"style":127583,"src":144140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144142,144143],{},"总结来说就是左手原则",[23171,144145,144147],{"id":144146},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[938,144149],{"style":127583,"src":144150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[51,144152,144154],{"id":144153},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[938,144156],{"style":127583,"src":144157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[938,144159],{"style":127583,"src":144160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[99,144162,144164],{"className":127727,"code":144163,"language":127729,"meta":104,"style":104},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[106,144165,144166,144172,144185,144202],{"__ignoreMap":104},[109,144167,144168,144170],{"class":111,"line":112},[109,144169,52786],{"class":52475},[109,144171,16745],{"class":126},[109,144173,144174,144177,144179,144181,144183],{"class":111,"line":119},[109,144175,144176],{"class":133},"  perspective",[109,144178,52612],{"class":126},[109,144180,66249],{"class":133},[109,144182,52667],{"class":122},[109,144184,137],{"class":126},[109,144186,144187,144189,144191,144194,144196,144198,144200],{"class":111,"line":140},[109,144188,137711],{"class":133},[109,144190,52612],{"class":126},[109,144192,144193],{"class":133},"rotateX",[109,144195,714],{"class":126},[109,144197,2061],{"class":133},[109,144199,143554],{"class":122},[109,144201,720],{"class":126},[109,144203,144204],{"class":111,"line":154},[109,144205,742],{"class":126},[51,144207,144209],{"id":144208},"_1836-案例","18.3.6 案例",[23171,144211,144213],{"id":144212},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[938,144215],{"style":127583,"src":144216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[938,144218],{"style":127583,"src":144219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[938,144221],{"style":127583,"src":144222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[99,144224,144226],{"className":127727,"code":144225,"language":127729,"meta":104,"style":104},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[106,144227,144228,144233,144239,144251],{"__ignoreMap":104},[109,144229,144230],{"class":111,"line":112},[109,144231,144232],{"class":115},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[109,144234,144235,144237],{"class":111,"line":119},[109,144236,134724],{"class":211},[109,144238,16745],{"class":126},[109,144240,144241,144243,144245,144247,144249],{"class":111,"line":140},[109,144242,144176],{"class":133},[109,144244,52612],{"class":126},[109,144246,66249],{"class":133},[109,144248,52667],{"class":122},[109,144250,137],{"class":126},[109,144252,144253],{"class":111,"line":154},[109,144254,742],{"class":126},[23171,144256,144258],{"id":144257},"_18362-3d导航栏","18.3.6.2 3D导航栏",[938,144260],{"style":127583,"src":144261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[99,144263,144264],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,144265,144266,144270,144284,144288],{"__ignoreMap":104},[109,144267,144268],{"class":111,"line":112},[109,144269,131838],{"class":115},[109,144271,144272,144274,144276,144278,144280,144282],{"class":111,"line":119},[109,144273,1320],{"class":126},[109,144275,52786],{"class":52475},[109,144277,54661],{"class":211},[109,144279,130],{"class":126},[109,144281,131851],{"class":278},[109,144283,52482],{"class":126},[109,144285,144286],{"class":111,"line":140},[109,144287,131858],{"class":126},[109,144289,144290,144292,144294],{"class":111,"line":154},[109,144291,52960],{"class":126},[109,144293,52786],{"class":52475},[109,144295,52482],{"class":126},[23171,144297,144299],{"id":144298},"_18363-旋转木马","18.3.6.3 旋转木马",[938,144301],{"style":127583,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[99,144304,144305],{"className":127727,"code":143530,"language":127729,"meta":104,"style":104},[106,144306,144307,144313,144329],{"__ignoreMap":104},[109,144308,144309,144311],{"class":111,"line":112},[109,144310,52786],{"class":52475},[109,144312,16745],{"class":126},[109,144314,144315,144317,144319,144321,144323,144325,144327],{"class":111,"line":119},[109,144316,137711],{"class":133},[109,144318,52612],{"class":126},[109,144320,143547],{"class":133},[109,144322,714],{"class":126},[109,144324,2061],{"class":133},[109,144326,143554],{"class":122},[109,144328,720],{"class":126},[109,144330,144331],{"class":111,"line":140},[109,144332,742],{"class":126},[1467,144334,144335],{},"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":104,"searchDepth":119,"depth":119,"links":144337},[144338,144345],{"id":143433,"depth":119,"text":143434,"children":144339},[144340,144341,144342,144343,144344],{"id":143457,"depth":140,"text":143458},{"id":143512,"depth":140,"text":143513},{"id":143637,"depth":140,"text":143638},{"id":143740,"depth":140,"text":143741},{"id":144058,"depth":140,"text":144059},{"id":144086,"depth":119,"text":144087,"children":144346},[144347,144348,144349,144350,144351,144352],{"id":144093,"depth":140,"text":144094},{"id":144100,"depth":140,"text":144101},{"id":144116,"depth":140,"text":144117},{"id":144126,"depth":140,"text":144127},{"id":144153,"depth":140,"text":144154},{"id":144208,"depth":140,"text":144209},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143425,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144359,"title":144360,"body":144361,"description":24550,"extension":1476,"meta":144564,"navigation":157,"path":144565,"seo":144566,"stem":144567,"__hash__":144568},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144362,"toc":144553},[144363,144366,144370,144373,144376,144380,144383,144386,144389,144393,144396,144400,144403,144407,144410,144414,144428,144432,144457,144460,144463,144480,144484,144488,144491,144494,144498,144501,144504,144522,144526,144529,144543,144547,144550],[10,144364,144360],{"id":144365},"_19-移动端基础-前缀现状与视口",[14,144367,144369],{"id":144368},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[938,144371],{"style":127583,"src":144372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144374,144375],{},"意思就是加个前缀，增加兼容性",[14,144377,144379],{"id":144378},"_192-移动端现状认识","19.2 移动端现状认识",[938,144381],{"style":127583,"src":144382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144384,144385],{},"调试方法：",[938,144387],{"style":127583,"src":144388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144390,144392],{"id":144391},"_193-视口","19.3 视口",[19,144394,144395],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[51,144397,144399],{"id":144398},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[938,144401],{"style":127583,"src":144402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[51,144404,144406],{"id":144405},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[938,144408],{"style":127583,"src":144409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[51,144411,144413],{"id":144412},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[27,144415,144416,144419,144422,144425],{},[30,144417,144418],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[30,144420,144421],{},"理想视口，对设备来讲，是最理想的视口尺寸",[30,144423,144424],{},"需要手动添写meta视口标签通知浏览器操作",[30,144426,144427],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[51,144429,144431],{"id":144430},"_1934-meta视口标签","19.3.4 meta视口标签",[99,144433,144435],{"className":128474,"code":144434,"language":128476,"meta":104,"style":104},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[106,144436,144437],{"__ignoreMap":104},[109,144438,144439,144441,144443,144445,144447,144449,144451,144453,144455],{"class":111,"line":112},[109,144440,1320],{"class":126},[109,144442,52519],{"class":52475},[109,144444,16093],{"class":211},[109,144446,130],{"class":126},[109,144448,52566],{"class":278},[109,144450,52546],{"class":211},[109,144452,130],{"class":126},[109,144454,52573],{"class":278},[109,144456,52482],{"class":126},[938,144458],{"style":127583,"src":144459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144461,144462],{},"标准视口设置：",[765,144464,144465,144468,144471,144474,144477],{},[30,144466,144467],{},"视口宽度和设备保持一致",[30,144469,144470],{},"视口的默认缩放比例1.0",[30,144472,144473],{},"不允许用户自行缩放",[30,144475,144476],{},"最大允许的缩放比例1.0",[30,144478,144479],{},"最小允许的缩放比例1.0",[51,144481,144483],{"id":144482},"_1935-二倍图","19.3.5 二倍图",[23171,144485,144487],{"id":144486},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[938,144489],{"style":127583,"src":144490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[938,144492],{"style":127583,"src":144493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23171,144495,144497],{"id":144496},"_19352-多倍图","19.3.5.2 多倍图",[938,144499],{"style":127583,"src":144500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144502,144503],{},"二倍图法，代码如下：",[99,144505,144507],{"className":127727,"code":144506,"language":127729,"meta":104,"style":104},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[106,144508,144509,144514],{"__ignoreMap":104},[109,144510,144511],{"class":111,"line":112},[109,144512,144513],{"class":115},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[109,144515,144516,144519],{"class":111,"line":119},[109,144517,144518],{"class":52475},"background-size",[109,144520,144521],{"class":126},": 50% 50%;\n",[23171,144523,144525],{"id":144524},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[938,144527],{"style":127583,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[765,144530,144531,144534,144537,144540],{},[30,144532,144533],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[30,144535,144536],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[30,144538,144539],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[30,144541,144542],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23171,144544,144546],{"id":144545},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[938,144548],{"style":127583,"src":144549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1467,144551,144552],{},"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":104,"searchDepth":119,"depth":119,"links":144554},[144555,144556,144557],{"id":144368,"depth":119,"text":144369},{"id":144378,"depth":119,"text":144379},{"id":144391,"depth":119,"text":144392,"children":144558},[144559,144560,144561,144562,144563],{"id":144398,"depth":140,"text":144399},{"id":144405,"depth":140,"text":144406},{"id":144412,"depth":140,"text":144413},{"id":144430,"depth":140,"text":144431},{"id":144482,"depth":140,"text":144483},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144360,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144570,"title":144571,"body":144572,"description":24550,"extension":1476,"meta":145449,"navigation":157,"path":145450,"seo":145451,"stem":145452,"__hash__":145453},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144573,"toc":145433},[144574,144577,144581,144588,144591,144598,144601,144606,144609,144613,144617,144624,144627,144630,144634,144637,144640,144643,144646,144649,144653,144656,144660,144662,144665,144668,144671,144674,144676,144679,144681,144711,144713,144743,144747,144750,144754,144757,144774,144777,144780,144856,144858,144861,144864,144867,144870,144872,144875,144878,144882,144904,144907,144910,144914,144917,144923,144926,144930,144933,144936,144940,144943,144946,144949,144953,144956,144959,144962,144965,144969,144972,144976,144983,144986,144989,144992,144995,145005,145008,145011,145018,145021,145025,145028,145031,145035,145038,145041,145044,145089,145092,145095,145098,145100,145229,145231,145269,145272,145275,145277,145395,145397,145431],[10,144575,144571],{"id":144576},"_20-移动端布局实战上篇",[14,144578,144580],{"id":144579},"_201-移动端主流方案","20.1 移动端主流方案",[765,144582,144583],{},[30,144584,144585],{},[23,144586,144587],{},"单独移动端页面（主流）",[938,144589],{"style":127583,"src":144590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[765,144592,144593],{"start":119},[30,144594,144595],{},[23,144596,144597],{},"响应式兼容PC移动端",[938,144599],{"style":127583,"src":144600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[765,144602,144603],{"start":140},[30,144604,144605],{},"两种页面选型布局方式",[938,144607],{"style":127583,"src":144608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144610,144612],{"id":144611},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[51,144614,144616],{"id":144615},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144618,144619,144620],{},"官网地址： ",[1776,144621,144622],{"href":144622,"rel":144623},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25039],[938,144625],{"style":127583,"src":144626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[938,144628],{"style":127583,"src":144629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[51,144631,144633],{"id":144632},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[938,144635],{"style":127583,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[938,144638],{"style":127583,"src":144639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144641,144642],{},"去除高亮：",[19,144644,144645],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144647,144648],{},"-webkit- tap-highlight-color: transparent;",[14,144650,144652],{"id":144651},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[938,144654],{"style":127583,"src":144655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144657,144659],{"id":144658},"_204-流式布局案例","20.4 流式布局案例",[19,144661,1574],{},[19,144663,144664],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144666,144667],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144669,144670],{},"图片格式：",[938,144672],{"style":127583,"src":144673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144675,136770],{},[938,144677],{"style":127583,"src":144678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144680,141097],{},[99,144682,144683],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,144684,144685],{"__ignoreMap":104},[109,144686,144687,144689,144691,144693,144695,144697,144699,144701,144703,144705,144707,144709],{"class":111,"line":112},[109,144688,1320],{"class":126},[109,144690,938],{"class":52475},[109,144692,56414],{"class":211},[109,144694,130],{"class":126},[109,144696,135244],{"class":278},[109,144698,56422],{"class":211},[109,144700,130],{"class":126},[109,144702,135251],{"class":278},[109,144704,135254],{"class":211},[109,144706,130],{"class":126},[109,144708,135259],{"class":278},[109,144710,52482],{"class":126},[19,144712,141186],{},[99,144714,144715],{"className":128474,"code":135229,"language":128476,"meta":104,"style":104},[106,144716,144717],{"__ignoreMap":104},[109,144718,144719,144721,144723,144725,144727,144729,144731,144733,144735,144737,144739,144741],{"class":111,"line":112},[109,144720,1320],{"class":126},[109,144722,938],{"class":52475},[109,144724,56414],{"class":211},[109,144726,130],{"class":126},[109,144728,135244],{"class":278},[109,144730,56422],{"class":211},[109,144732,130],{"class":126},[109,144734,135251],{"class":278},[109,144736,135254],{"class":211},[109,144738,130],{"class":126},[109,144740,135259],{"class":278},[109,144742,52482],{"class":126},[14,144744,144746],{"id":144745},"_205-flex布局","20.5 flex布局",[938,144748],{"style":127583,"src":144749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[51,144751,144753],{"id":144752},"_2051-布局原理","20.5.1 布局原理",[19,144755,144756],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[27,144758,144759,144762,144765,144768,144771],{},[30,144760,144761],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[30,144763,144764],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[30,144766,144767],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[30,144769,144770],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[30,144772,144773],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144775,144776],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144778,144779],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[99,144781,144783],{"className":127727,"code":144782,"language":127729,"meta":104,"style":104},"\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",[106,144784,144785,144790,144797,144807,144819,144830,144841,144852],{"__ignoreMap":104},[109,144786,144787],{"class":111,"line":112},[109,144788,144789],{"class":115},"\u002F* Flex 弹性布局 *\u002F\n",[109,144791,144792,144795],{"class":111,"line":119},[109,144793,144794],{"class":211},".container",[109,144796,16745],{"class":126},[109,144798,144799,144801,144803,144805],{"class":111,"line":140},[109,144800,129343],{"class":133},[109,144802,52612],{"class":126},[109,144804,52652],{"class":133},[109,144806,137],{"class":126},[109,144808,144809,144812,144814,144817],{"class":111,"line":154},[109,144810,144811],{"class":133},"  flex-direction",[109,144813,52612],{"class":126},[109,144815,144816],{"class":133},"row",[109,144818,137],{"class":126},[109,144820,144821,144824,144826,144828],{"class":111,"line":161},[109,144822,144823],{"class":133},"  justify-content",[109,144825,52612],{"class":126},[109,144827,52843],{"class":133},[109,144829,137],{"class":126},[109,144831,144832,144835,144837,144839],{"class":111,"line":167},[109,144833,144834],{"class":133},"  align-items",[109,144836,52612],{"class":126},[109,144838,52767],{"class":133},[109,144840,137],{"class":126},[109,144842,144843,144846,144848,144850],{"class":111,"line":185},[109,144844,144845],{"class":133},"  flex-wrap",[109,144847,52612],{"class":126},[109,144849,79785],{"class":133},[109,144851,137],{"class":126},[109,144853,144854],{"class":111,"line":201},[109,144855,742],{"class":126},[19,144857,71628],{},[19,144859,144860],{},".form-item .male-label {",[19,144862,144863],{},"   margin-right: 20px;",[19,144865,144866],{},"   display: inline-flex;",[19,144868,144869],{},"   align-items: center;",[19,144871,2476],{},[938,144873],{"style":127583,"src":144874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[938,144876],{"style":127583,"src":144877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[51,144879,144881],{"id":144880},"_2052-常见父项属性","20.5.2 常见父项属性",[765,144883,144884,144887,144890,144893,144896,144899,144902],{},[30,144885,144886],{},"flex-direction：设置主轴的方向",[30,144888,144889],{},"justify-content：设置主轴上的子元素排列方式",[30,144891,144892],{},"flex-wrap：设置子元素是否换行",[30,144894,144895],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[30,144897,144898],{},"align-items：设置侧轴上的子元素排列方式（单行）",[30,144900,144901],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[30,144903,144886],{},[938,144905],{"style":127583,"src":144906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[938,144908],{"style":127583,"src":144909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[765,144911,144912],{"start":119},[30,144913,144889],{},[938,144915],{"style":127583,"src":144916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144918,144919,144922],{},[106,144920,144921],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144924,144925],{},"跟着主轴走",[765,144927,144928],{"start":140},[30,144929,144892],{},[938,144931],{"style":127583,"src":144932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144934,144935],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[765,144937,144938],{"start":154},[30,144939,144895],{},[938,144941],{"style":127583,"src":144942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144944,144945],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144947,144948],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[765,144950,144951],{"start":161},[30,144952,144898],{},[938,144954],{"style":127583,"src":144955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144957,144958],{},"align-items与align-content之间的区别：",[19,144960,144961],{},"单找items，多找content",[938,144963],{"style":127583,"src":144964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[765,144966,144967],{"start":167},[30,144968,144901],{},[938,144970],{"style":127583,"src":144971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[51,144973,144975],{"id":144974},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[765,144977,144978],{},[30,144979,144980],{},[23,144981,144982],{},"flex 属性",[19,144984,144985],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[938,144987],{"style":127583,"src":144988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144990,144991],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144993,144994],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[765,144996,144997],{"start":119},[30,144998,144999,14968,145002],{},[23,145000,145001],{},"align-self",[23,145003,145004],{},"控制子项自己在侧轴上的排列方式",[938,145006],{"style":127583,"src":145007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145009,145010],{},"单个子盒子在父盒子侧轴上的排列方式",[765,145012,145013],{"start":140},[30,145014,145015,145017],{},[23,145016,96472],{}," 属性定义项目的排列顺序",[938,145019],{"style":127583,"src":145020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[51,145022,145024],{"id":145023},"_2054-背景线性渐变","20.5.4 背景线性渐变",[938,145026],{"style":127583,"src":145027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145029,145030],{},"必须要添加浏览器的私有前缀",[51,145032,145034],{"id":145033},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145036,145037],{},"学到最重要的知识：",[19,145039,145040],{},"flex处理这样的布局思路",[938,145042],{"style":127583,"src":145043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[99,145045,145047],{"className":127727,"code":145046,"language":127729,"meta":104,"style":104},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[106,145048,145049,145055,145065,145075,145085],{"__ignoreMap":104},[109,145050,145051,145053],{"class":111,"line":112},[109,145052,144794],{"class":211},[109,145054,16745],{"class":126},[109,145056,145057,145059,145061,145063],{"class":111,"line":119},[109,145058,129343],{"class":133},[109,145060,52612],{"class":126},[109,145062,52652],{"class":133},[109,145064,137],{"class":126},[109,145066,145067,145069,145071,145073],{"class":111,"line":140},[109,145068,144823],{"class":133},[109,145070,52612],{"class":126},[109,145072,52767],{"class":133},[109,145074,137],{"class":126},[109,145076,145077,145079,145081,145083],{"class":111,"line":154},[109,145078,144834],{"class":133},[109,145080,52612],{"class":126},[109,145082,52767],{"class":133},[109,145084,137],{"class":126},[109,145086,145087],{"class":111,"line":161},[109,145088,742],{"class":126},[19,145090,145091],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145093,145094],{},"使用属性选择器",[938,145096],{"style":127583,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145099,70064],{},[99,145101,145103],{"className":128474,"code":145102,"language":128476,"meta":104,"style":104},"\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",[106,145104,145105,145110,145124,145129,145149,145154,145173,145178,145197,145202,145221],{"__ignoreMap":104},[109,145106,145107],{"class":111,"line":112},[109,145108,145109],{"class":115},"\u003C!-- 携程网移动端案例结构 -->\n",[109,145111,145112,145114,145116,145118,145120,145122],{"class":111,"line":119},[109,145113,1320],{"class":126},[109,145115,52786],{"class":52475},[109,145117,54661],{"class":211},[109,145119,130],{"class":126},[109,145121,93498],{"class":278},[109,145123,52482],{"class":126},[109,145125,145126],{"class":111,"line":140},[109,145127,145128],{"class":115},"  \u003C!-- 搜索栏 -->\n",[109,145130,145131,145133,145135,145137,145139,145142,145145,145147],{"class":111,"line":154},[109,145132,53319],{"class":126},[109,145134,52786],{"class":52475},[109,145136,54661],{"class":211},[109,145138,130],{"class":126},[109,145140,145141],{"class":278},"\"search-index\"",[109,145143,145144],{"class":126},">...\u003C\u002F",[109,145146,52786],{"class":52475},[109,145148,52482],{"class":126},[109,145150,145151],{"class":111,"line":161},[109,145152,145153],{"class":115},"  \u003C!-- 焦点图 -->\n",[109,145155,145156,145158,145160,145162,145164,145167,145169,145171],{"class":111,"line":167},[109,145157,53319],{"class":126},[109,145159,52786],{"class":52475},[109,145161,54661],{"class":211},[109,145163,130],{"class":126},[109,145165,145166],{"class":278},"\"focus\"",[109,145168,145144],{"class":126},[109,145170,52786],{"class":52475},[109,145172,52482],{"class":126},[109,145174,145175],{"class":111,"line":185},[109,145176,145177],{"class":115},"  \u003C!-- 主导航 -->\n",[109,145179,145180,145182,145184,145186,145188,145191,145193,145195],{"class":111,"line":201},[109,145181,53319],{"class":126},[109,145183,52786],{"class":52475},[109,145185,54661],{"class":211},[109,145187,130],{"class":126},[109,145189,145190],{"class":278},"\"local-nav\"",[109,145192,145144],{"class":126},[109,145194,52786],{"class":52475},[109,145196,52482],{"class":126},[109,145198,145199],{"class":111,"line":206},[109,145200,145201],{"class":115},"  \u003C!-- 子导航 -->\n",[109,145203,145204,145206,145208,145210,145212,145215,145217,145219],{"class":111,"line":218},[109,145205,53319],{"class":126},[109,145207,52786],{"class":52475},[109,145209,54661],{"class":211},[109,145211,130],{"class":126},[109,145213,145214],{"class":278},"\"nav-common\"",[109,145216,145144],{"class":126},[109,145218,52786],{"class":52475},[109,145220,52482],{"class":126},[109,145222,145223,145225,145227],{"class":111,"line":223},[109,145224,52960],{"class":126},[109,145226,52786],{"class":52475},[109,145228,52482],{"class":126},[19,145230,71628],{},[99,145232,145233],{"className":127727,"code":138179,"language":127729,"meta":104,"style":104},[106,145234,145235,145249,145265],{"__ignoreMap":104},[109,145236,145237,145239,145241,145243,145245,145247],{"class":111,"line":112},[109,145238,54996],{"class":52475},[109,145240,1289],{"class":126},[109,145242,104282],{"class":211},[109,145244,130],{"class":122},[109,145246,63874],{"class":278},[109,145248,138196],{"class":126},[109,145250,145251,145253,145255,145257,145259,145261,145263],{"class":111,"line":119},[109,145252,72071],{"class":133},[109,145254,52612],{"class":126},[109,145256,1755],{"class":133},[109,145258,52667],{"class":122},[109,145260,52696],{"class":133},[109,145262,131307],{"class":133},[109,145264,137],{"class":126},[109,145266,145267],{"class":111,"line":140},[109,145268,742],{"class":126},[19,145270,145271],{},"总代码和效果展示：",[938,145273],{"style":127583,"src":145274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145276,70064],{},[99,145278,145279],{"className":128474,"code":145102,"language":128476,"meta":104,"style":104},[106,145280,145281,145285,145299,145303,145321,145325,145343,145347,145365,145369,145387],{"__ignoreMap":104},[109,145282,145283],{"class":111,"line":112},[109,145284,145109],{"class":115},[109,145286,145287,145289,145291,145293,145295,145297],{"class":111,"line":119},[109,145288,1320],{"class":126},[109,145290,52786],{"class":52475},[109,145292,54661],{"class":211},[109,145294,130],{"class":126},[109,145296,93498],{"class":278},[109,145298,52482],{"class":126},[109,145300,145301],{"class":111,"line":140},[109,145302,145128],{"class":115},[109,145304,145305,145307,145309,145311,145313,145315,145317,145319],{"class":111,"line":154},[109,145306,53319],{"class":126},[109,145308,52786],{"class":52475},[109,145310,54661],{"class":211},[109,145312,130],{"class":126},[109,145314,145141],{"class":278},[109,145316,145144],{"class":126},[109,145318,52786],{"class":52475},[109,145320,52482],{"class":126},[109,145322,145323],{"class":111,"line":161},[109,145324,145153],{"class":115},[109,145326,145327,145329,145331,145333,145335,145337,145339,145341],{"class":111,"line":167},[109,145328,53319],{"class":126},[109,145330,52786],{"class":52475},[109,145332,54661],{"class":211},[109,145334,130],{"class":126},[109,145336,145166],{"class":278},[109,145338,145144],{"class":126},[109,145340,52786],{"class":52475},[109,145342,52482],{"class":126},[109,145344,145345],{"class":111,"line":185},[109,145346,145177],{"class":115},[109,145348,145349,145351,145353,145355,145357,145359,145361,145363],{"class":111,"line":201},[109,145350,53319],{"class":126},[109,145352,52786],{"class":52475},[109,145354,54661],{"class":211},[109,145356,130],{"class":126},[109,145358,145190],{"class":278},[109,145360,145144],{"class":126},[109,145362,52786],{"class":52475},[109,145364,52482],{"class":126},[109,145366,145367],{"class":111,"line":206},[109,145368,145201],{"class":115},[109,145370,145371,145373,145375,145377,145379,145381,145383,145385],{"class":111,"line":218},[109,145372,53319],{"class":126},[109,145374,52786],{"class":52475},[109,145376,54661],{"class":211},[109,145378,130],{"class":126},[109,145380,145214],{"class":278},[109,145382,145144],{"class":126},[109,145384,52786],{"class":52475},[109,145386,52482],{"class":126},[109,145388,145389,145391,145393],{"class":111,"line":223},[109,145390,52960],{"class":126},[109,145392,52786],{"class":52475},[109,145394,52482],{"class":126},[19,145396,71628],{},[99,145398,145399],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,145400,145401,145405,145419,145423],{"__ignoreMap":104},[109,145402,145403],{"class":111,"line":112},[109,145404,131838],{"class":115},[109,145406,145407,145409,145411,145413,145415,145417],{"class":111,"line":119},[109,145408,1320],{"class":126},[109,145410,52786],{"class":52475},[109,145412,54661],{"class":211},[109,145414,130],{"class":126},[109,145416,131851],{"class":278},[109,145418,52482],{"class":126},[109,145420,145421],{"class":111,"line":140},[109,145422,131858],{"class":126},[109,145424,145425,145427,145429],{"class":111,"line":154},[109,145426,52960],{"class":126},[109,145428,52786],{"class":52475},[109,145430,52482],{"class":126},[1467,145432,139128],{},{"title":104,"searchDepth":119,"depth":119,"links":145434},[145435,145436,145440,145441,145442],{"id":144579,"depth":119,"text":144580},{"id":144611,"depth":119,"text":144612,"children":145437},[145438,145439],{"id":144615,"depth":140,"text":144616},{"id":144632,"depth":140,"text":144633},{"id":144651,"depth":119,"text":144652},{"id":144658,"depth":119,"text":144659},{"id":144745,"depth":119,"text":144746,"children":145443},[145444,145445,145446,145447,145448],{"id":144752,"depth":140,"text":144753},{"id":144880,"depth":140,"text":144881},{"id":144974,"depth":140,"text":144975},{"id":145023,"depth":140,"text":145024},{"id":145033,"depth":140,"text":145034},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144571,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145455,"title":145456,"body":145457,"description":24550,"extension":1476,"meta":146684,"navigation":157,"path":146685,"seo":146686,"stem":146687,"__hash__":146688},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145458,"toc":146662},[145459,145462,145466,145470,145473,145476,145480,145485,145488,145491,145494,145497,145500,145557,145560,145565,145568,145571,145575,145586,145590,145593,145596,145603,145608,145612,145615,145621,145624,145628,145631,145638,145641,145644,145651,145654,145661,145664,145667,145674,145677,145680,145682,145699,145703,145706,145709,145712,145716,145719,145722,145725,145728,145731,145734,145736,145739,145742,145804,145807,145917,145924,145930,145933,145936,145940,145943,145947,145952,145955,145962,145965,145971,145976,145979,145982,145985,145988,145991,145994,145997,146000,146056,146058,146084,146088,146091,146094,146097,146105,146108,146111,146115,146171,146174,146178,146184,146195,146198,146203,146206,146209,146215,146218,146221,146224,146227,146230,146233,146236,146239,146264,146270,146273,146276,146279,146282,146285,146288,146293,146296,146299,146302,146310,146313,146320,146323,146326,146328,146352,146354,146357,146360,146363,146366,146369,146372,146375,146409,146412,146415,146449,146456,146459,146462,146465,146468,146471,146474,146481,146484,146487,146490,146493,146500,146503,146506,146513,146516,146519,146523,146526,146529,146532,146535,146538,146541,146544,146547,146549,146573,146575,146599,146603,146614,146617,146620,146623,146626,146629,146632,146635,146638,146641,146644,146647,146650,146653,146656,146659],[10,145460,145456],{"id":145461},"_21-移动端布局实战下篇",[14,145463,145465],{"id":145464},"_211-rem适配布局","21.1 rem适配布局",[51,145467,145469],{"id":145468},"_2111-rem单位","21.1.1 rem单位",[938,145471],{"style":127583,"src":145472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145474,145475],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[51,145477,145479],{"id":145478},"_2112-媒体查询","21.1.2 媒体查询",[765,145481,145482],{},[30,145483,145484],{},"参数介绍",[938,145486],{"style":127583,"src":145487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[938,145489],{"style":127583,"src":145490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[938,145492],{"style":127583,"src":145493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[938,145495],{"style":127583,"src":145496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[938,145498],{"style":127583,"src":145499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[99,145501,145503],{"className":127727,"code":145502,"language":127729,"meta":104,"style":104},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[106,145504,145505,145510,145529,145536,145549,145553],{"__ignoreMap":104},[109,145506,145507],{"class":111,"line":112},[109,145508,145509],{"class":115},"\u002F* 媒体查询 *\u002F\n",[109,145511,145512,145515,145517,145520,145522,145525,145527],{"class":111,"line":119},[109,145513,145514],{"class":122},"@media",[109,145516,285],{"class":126},[109,145518,145519],{"class":133},"max-width",[109,145521,52612],{"class":126},[109,145523,145524],{"class":133},"768",[109,145526,52667],{"class":122},[109,145528,13615],{"class":126},[109,145530,145531,145534],{"class":111,"line":140},[109,145532,145533],{"class":211},"  .container",[109,145535,16745],{"class":126},[109,145537,145538,145541,145543,145545,145547],{"class":111,"line":154},[109,145539,145540],{"class":133},"    width",[109,145542,52612],{"class":126},[109,145544,1351],{"class":133},[109,145546,1865],{"class":122},[109,145548,137],{"class":126},[109,145550,145551],{"class":111,"line":161},[109,145552,128523],{"class":126},[109,145554,145555],{"class":111,"line":167},[109,145556,742],{"class":126},[19,145558,145559],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[765,145561,145562],{"start":119},[30,145563,145564],{},"引入资源",[938,145566],{"style":127583,"src":145567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145569,145570],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[51,145572,145574],{"id":145573},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[27,145576,145577,145580,145583],{},[30,145578,145579],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[30,145581,145582],{},"媒体查询可以根据不同设备宽度来修改样式",[30,145584,145585],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145587,145589],{"id":145588},"_212-less基础","21.2 Less基础",[19,145591,145592],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145594,145595],{},"Less可以解决该问题，它是css的扩展语言",[19,145597,145598,145599],{},"Less中文网址： ",[1776,145600,145601],{"href":145601,"rel":145602},"http:\u002F\u002Flesscss.cn\u002F",[25039],[19,145604,145605],{},[23,145606,145607],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[51,145609,145611],{"id":145610},"_2121-less安装","21.2.1 less安装",[19,145613,145614],{},"如果使用vscode，则无需进行下方安装步骤",[19,145616,145617],{},[1776,145618,145619],{"href":145619,"rel":145620},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25039],[938,145622],{"style":127583,"src":145623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[51,145625,145627],{"id":145626},"_2122-less使用","21.2.2 less使用",[19,145629,145630],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[765,145632,145633],{},[30,145634,145635],{},[23,145636,145637],{},"Less 变量",[938,145639],{"style":127583,"src":145640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[938,145642],{"style":127583,"src":145643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[765,145645,145646],{"start":119},[30,145647,145648],{},[23,145649,145650],{},"Less 编译",[938,145652],{"style":127583,"src":145653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[765,145655,145656],{"start":140},[30,145657,145658],{},[23,145659,145660],{},"Less 嵌套",[938,145662],{"style":127583,"src":145663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[938,145665],{"style":127583,"src":145666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[765,145668,145669],{"start":154},[30,145670,145671],{},[23,145672,145673],{},"Less 运算",[938,145675],{"style":127583,"src":145676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145678,145679],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145681,1574],{},[27,145683,145684,145687,145690,145693,145696],{},[30,145685,145686],{},"乘号（*）和除号（\u002F）的写法",[30,145688,145689],{},"运算符中间左右有个空格隔开 1px + 5",[30,145691,145692],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[30,145694,145695],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[30,145697,145698],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145700,145702],{"id":145701},"_213-rem-适配方案","21.3 rem 适配方案",[19,145704,145705],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145707,145708],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[938,145710],{"style":127583,"src":145711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[51,145713,145715],{"id":145714},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145717,145718],{},"rem + 媒体查询 + less 技术",[938,145720],{"style":127583,"src":145721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145723,145724],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145726,145727],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[938,145729],{"style":127583,"src":145730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145732,145733],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145735,15806],{},[938,145737],{"style":127583,"src":145738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145740,145741],{},"index.html:",[99,145743,145745],{"className":127727,"code":145744,"language":127729,"meta":104,"style":104},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[106,145746,145747,145752,145758,145774,145778,145784,145800],{"__ignoreMap":104},[109,145748,145749],{"class":111,"line":112},[109,145750,145751],{"class":115},"\u002F* rem 适配方案 *\u002F\n",[109,145753,145754,145756],{"class":111,"line":119},[109,145755,51810],{"class":52475},[109,145757,16745],{"class":126},[109,145759,145760,145762,145764,145767,145769,145771],{"class":111,"line":140},[109,145761,71801],{"class":133},[109,145763,52612],{"class":126},[109,145765,145766],{"class":133},"62.5",[109,145768,1865],{"class":122},[109,145770,131590],{"class":126},[109,145772,145773],{"class":115},"\u002F* 1rem = 10px *\u002F\n",[109,145775,145776],{"class":111,"line":154},[109,145777,742],{"class":126},[109,145779,145780,145782],{"class":111,"line":161},[109,145781,131575],{"class":211},[109,145783,16745],{"class":126},[109,145785,145786,145788,145790,145792,145795,145797],{"class":111,"line":167},[109,145787,71743],{"class":133},[109,145789,52612],{"class":126},[109,145791,1008],{"class":133},[109,145793,145794],{"class":122},"rem",[109,145796,131590],{"class":126},[109,145798,145799],{"class":115},"\u002F* 100px *\u002F\n",[109,145801,145802],{"class":111,"line":185},[109,145803,742],{"class":126},[19,145805,145806],{},"common.less",[99,145808,145810],{"className":127727,"code":145809,"language":127729,"meta":104,"style":104},"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",[106,145811,145812,145818,145833,145837,145843,145857,145861,145865,145869,145875,145889,145893,145899,145913],{"__ignoreMap":104},[109,145813,145814,145816],{"class":111,"line":112},[109,145815,51810],{"class":52475},[109,145817,16745],{"class":126},[109,145819,145820,145822,145824,145826,145828,145830],{"class":111,"line":119},[109,145821,71801],{"class":133},[109,145823,52612],{"class":126},[109,145825,145766],{"class":133},[109,145827,1865],{"class":122},[109,145829,27242],{"class":126},[109,145831,145832],{"class":115},"\u002F* 10px *\u002F\n",[109,145834,145835],{"class":111,"line":140},[109,145836,742],{"class":126},[109,145838,145839,145841],{"class":111,"line":154},[109,145840,52786],{"class":52475},[109,145842,16745],{"class":126},[109,145844,145845,145847,145849,145851,145853,145855],{"class":111,"line":161},[109,145846,71743],{"class":133},[109,145848,52612],{"class":126},[109,145850,1008],{"class":133},[109,145852,145794],{"class":122},[109,145854,27242],{"class":126},[109,145856,145799],{"class":115},[109,145858,145859],{"class":111,"line":167},[109,145860,742],{"class":126},[109,145862,145863],{"class":111,"line":185},[109,145864,137188],{"class":126},[109,145866,145867],{"class":111,"line":201},[109,145868,145751],{"class":115},[109,145870,145871,145873],{"class":111,"line":206},[109,145872,51810],{"class":52475},[109,145874,16745],{"class":126},[109,145876,145877,145879,145881,145883,145885,145887],{"class":111,"line":218},[109,145878,71801],{"class":133},[109,145880,52612],{"class":126},[109,145882,145766],{"class":133},[109,145884,1865],{"class":122},[109,145886,131590],{"class":126},[109,145888,145773],{"class":115},[109,145890,145891],{"class":111,"line":223},[109,145892,742],{"class":126},[109,145894,145895,145897],{"class":111,"line":229},[109,145896,131575],{"class":211},[109,145898,16745],{"class":126},[109,145900,145901,145903,145905,145907,145909,145911],{"class":111,"line":244},[109,145902,71743],{"class":133},[109,145904,52612],{"class":126},[109,145906,1008],{"class":133},[109,145908,145794],{"class":122},[109,145910,131590],{"class":126},[109,145912,145799],{"class":115},[109,145914,145915],{"class":111,"line":258},[109,145916,742],{"class":126},[19,145918,145919,145920,145923],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24727,145921,145922],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[99,145925,145928],{"className":145926,"code":145927,"language":6524},[6522],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[106,145929,145927],{"__ignoreMap":104},[19,145931,145932],{},"less保存时会自动变成.css文件",[19,145934,145935],{},"好好搞懂上述代码写法",[51,145937,145939],{"id":145938},"_2132-样式导入样式","21.3.2 样式导入样式",[938,145941],{"style":127583,"src":145942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[51,145944,145946],{"id":145945},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[765,145948,145949],{},[30,145950,145951],{},"准备工作",[938,145953],{"style":127583,"src":145954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145956,145957,145958],{},"github地址：",[1776,145959,145960],{"href":145960,"rel":145961},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25039],[19,145963,145964],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145966,145967,145968],{},"js文件引入到index.html中使用的是",[106,145969,145970],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[765,145972,145973],{"start":119},[30,145974,145975],{},"vscode插件",[938,145977],{"style":127583,"src":145978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145980,145981],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145983,145984],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[938,145986],{"style":127583,"src":145987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145989,145990],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[938,145992],{"style":127583,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145995,145996],{},"修改成75就可以，alt+z为快捷键",[19,145998,145999],{},"index.css：",[99,146001,146002],{"className":127727,"code":145744,"language":127729,"meta":104,"style":104},[106,146003,146004,146008,146014,146028,146032,146038,146052],{"__ignoreMap":104},[109,146005,146006],{"class":111,"line":112},[109,146007,145751],{"class":115},[109,146009,146010,146012],{"class":111,"line":119},[109,146011,51810],{"class":52475},[109,146013,16745],{"class":126},[109,146015,146016,146018,146020,146022,146024,146026],{"class":111,"line":140},[109,146017,71801],{"class":133},[109,146019,52612],{"class":126},[109,146021,145766],{"class":133},[109,146023,1865],{"class":122},[109,146025,131590],{"class":126},[109,146027,145773],{"class":115},[109,146029,146030],{"class":111,"line":154},[109,146031,742],{"class":126},[109,146033,146034,146036],{"class":111,"line":161},[109,146035,131575],{"class":211},[109,146037,16745],{"class":126},[109,146039,146040,146042,146044,146046,146048,146050],{"class":111,"line":167},[109,146041,71743],{"class":133},[109,146043,52612],{"class":126},[109,146045,1008],{"class":133},[109,146047,145794],{"class":122},[109,146049,131590],{"class":126},[109,146051,145799],{"class":115},[109,146053,146054],{"class":111,"line":185},[109,146055,742],{"class":126},[19,146057,145741],{},[99,146059,146060],{"className":127727,"code":128131,"language":127729,"meta":104,"style":104},[106,146061,146062,146068,146080],{"__ignoreMap":104},[109,146063,146064,146066],{"class":111,"line":112},[109,146065,52975],{"class":52475},[109,146067,16745],{"class":126},[109,146069,146070,146072,146074,146076,146078],{"class":111,"line":119},[109,146071,71801],{"class":133},[109,146073,52612],{"class":126},[109,146075,2133],{"class":133},[109,146077,52667],{"class":122},[109,146079,137],{"class":126},[109,146081,146082],{"class":111,"line":140},[109,146083,742],{"class":126},[14,146085,146087],{"id":146086},"_214-响应式开发","21.4 响应式开发",[19,146089,146090],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[938,146092],{"style":127583,"src":146093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146095,146096],{},"做法：",[27,146098,146099,146102],{},[30,146100,146101],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[30,146103,146104],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[938,146106],{"style":127583,"src":146107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146109,146110],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[51,146112,146114],{"id":146113},"_2141-简单代码示范","21.4.1 简单代码示范",[99,146116,146117],{"className":127727,"code":145744,"language":127729,"meta":104,"style":104},[106,146118,146119,146123,146129,146143,146147,146153,146167],{"__ignoreMap":104},[109,146120,146121],{"class":111,"line":112},[109,146122,145751],{"class":115},[109,146124,146125,146127],{"class":111,"line":119},[109,146126,51810],{"class":52475},[109,146128,16745],{"class":126},[109,146130,146131,146133,146135,146137,146139,146141],{"class":111,"line":140},[109,146132,71801],{"class":133},[109,146134,52612],{"class":126},[109,146136,145766],{"class":133},[109,146138,1865],{"class":122},[109,146140,131590],{"class":126},[109,146142,145773],{"class":115},[109,146144,146145],{"class":111,"line":154},[109,146146,742],{"class":126},[109,146148,146149,146151],{"class":111,"line":161},[109,146150,131575],{"class":211},[109,146152,16745],{"class":126},[109,146154,146155,146157,146159,146161,146163,146165],{"class":111,"line":167},[109,146156,71743],{"class":133},[109,146158,52612],{"class":126},[109,146160,1008],{"class":133},[109,146162,145794],{"class":122},[109,146164,131590],{"class":126},[109,146166,145799],{"class":115},[109,146168,146169],{"class":111,"line":185},[109,146170,742],{"class":126},[19,146172,146173],{},"父盒子一般命名为container",[51,146175,146177],{"id":146176},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146179,146180,146181],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[23,146182,146183],{},"使得 Web 开发更加快捷",[27,146185,146186],{},[30,146187,146188,146189],{},"官网：",[23,146190,146191],{},[1776,146192,146193],{"href":146193,"rel":146194},"http:\u002F\u002Fgetbootstrap.com\u002F",[25039],[19,146196,146197],{},"可以直接去官网拿现成的东西",[765,146199,146200],{},[30,146201,146202],{},"Bootstrap的使用",[19,146204,146205],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146207,146208],{},"Bootstrap 使用四步曲：",[19,146210,146211,146214],{},[23,146212,146213],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[938,146216],{"style":127583,"src":146217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146219,146220],{},"打开Bootstrap官网，然后下载",[938,146222],{"style":127583,"src":146223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[938,146225],{"style":127583,"src":146226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146228,146229],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146231,146232],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146234,146235],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[938,146237],{"style":127583,"src":146238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[99,146240,146242],{"className":127727,"code":146241,"language":127729,"meta":104,"style":104},".center {\n  color: red;\n}\n",[106,146243,146244,146250,146260],{"__ignoreMap":104},[109,146245,146246,146248],{"class":111,"line":112},[109,146247,128018],{"class":211},[109,146249,16745],{"class":126},[109,146251,146252,146254,146256,146258],{"class":111,"line":119},[109,146253,72080],{"class":133},[109,146255,52612],{"class":126},[109,146257,58596],{"class":133},[109,146259,137],{"class":126},[109,146261,146262],{"class":111,"line":140},[109,146263,742],{"class":126},[19,146265,146266,146269],{},[106,146267,146268],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[938,146271],{"style":127583,"src":146272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[938,146274],{"style":127583,"src":146275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[938,146277],{"style":127583,"src":146278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146280,146281],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[938,146283],{"style":127583,"src":146284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146286,146287],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[765,146289,146290],{"start":119},[30,146291,146292],{},"布局容器",[938,146294],{"style":127583,"src":146295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146297,146298],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146300,146301],{},"container-fluid用于移动式布局比较方便",[765,146303,146304],{"start":140},[30,146305,146306,146307],{},"bootstrap ",[23,146308,146309],{},"栅格系统原理",[938,146311],{"style":127583,"src":146312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[765,146314,146315],{"start":154},[30,146316,146317],{},[23,146318,146319],{},"栅格选项参数",[938,146321],{"style":127583,"src":146322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146324,146325],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146327,15806],{},[99,146329,146330],{"className":127727,"code":146241,"language":127729,"meta":104,"style":104},[106,146331,146332,146338,146348],{"__ignoreMap":104},[109,146333,146334,146336],{"class":111,"line":112},[109,146335,128018],{"class":211},[109,146337,16745],{"class":126},[109,146339,146340,146342,146344,146346],{"class":111,"line":119},[109,146341,72080],{"class":133},[109,146343,52612],{"class":126},[109,146345,58596],{"class":133},[109,146347,137],{"class":126},[109,146349,146350],{"class":111,"line":140},[109,146351,742],{"class":126},[19,146353,136770],{},[938,146355],{"style":127583,"src":146356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146358,146359],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146361,146362],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146364,146365],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146367,146368],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146370,146371],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146373,146374],{},"汇总展示说明：",[99,146376,146377],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,146378,146379,146383,146397,146401],{"__ignoreMap":104},[109,146380,146381],{"class":111,"line":112},[109,146382,131838],{"class":115},[109,146384,146385,146387,146389,146391,146393,146395],{"class":111,"line":119},[109,146386,1320],{"class":126},[109,146388,52786],{"class":52475},[109,146390,54661],{"class":211},[109,146392,130],{"class":126},[109,146394,131851],{"class":278},[109,146396,52482],{"class":126},[109,146398,146399],{"class":111,"line":140},[109,146400,131858],{"class":126},[109,146402,146403,146405,146407],{"class":111,"line":154},[109,146404,52960],{"class":126},[109,146406,52786],{"class":52475},[109,146408,52482],{"class":126},[938,146410],{"style":127583,"src":146411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146413,146414],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[99,146416,146417],{"className":128474,"code":131831,"language":128476,"meta":104,"style":104},[106,146418,146419,146423,146437,146441],{"__ignoreMap":104},[109,146420,146421],{"class":111,"line":112},[109,146422,131838],{"class":115},[109,146424,146425,146427,146429,146431,146433,146435],{"class":111,"line":119},[109,146426,1320],{"class":126},[109,146428,52786],{"class":52475},[109,146430,54661],{"class":211},[109,146432,130],{"class":126},[109,146434,131851],{"class":278},[109,146436,52482],{"class":126},[109,146438,146439],{"class":111,"line":140},[109,146440,131858],{"class":126},[109,146442,146443,146445,146447],{"class":111,"line":154},[109,146444,52960],{"class":126},[109,146446,52786],{"class":52475},[109,146448,52482],{"class":126},[765,146450,146451],{"start":161},[30,146452,146453],{},[23,146454,146455],{},"列嵌套",[938,146457],{"style":127583,"src":146458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146460,146461],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146463,146464],{},"没加row内部这样：",[938,146466],{"style":127583,"src":146467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146469,146470],{},"加上row之后内部为：",[938,146472],{"style":127583,"src":146473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[765,146475,146476],{"start":167},[30,146477,146478],{},[23,146479,146480],{},"列偏移",[938,146482],{"style":127583,"src":146483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146485,146486],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146488,146489],{},"要加偏移量，即偏移份数",[19,146491,146492],{},"偏移的份数=12-两个盒子的份数",[765,146494,146495],{"start":185},[30,146496,146497],{},[23,146498,146499],{},"列排序",[938,146501],{"style":127583,"src":146502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146504,146505],{},"pull拉左；push推右",[765,146507,146508],{"start":201},[30,146509,146510],{},[23,146511,146512],{},"响应式工具",[938,146514],{"style":127583,"src":146515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146517,146518],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[51,146520,146522],{"id":146521},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146524,146525],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146527,146528],{},"ul {",[19,146530,146531],{},"list-style: none;",[19,146533,146534],{},"margin:0;",[19,146536,146537],{},"padding:0; }",[938,146539],{"style":127583,"src":146540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[938,146542],{"style":127583,"src":146543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146545,146546],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146548,70064],{},[99,146550,146551],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,146552,146553,146559,146569],{"__ignoreMap":104},[109,146554,146555,146557],{"class":111,"line":112},[109,146556,131575],{"class":211},[109,146558,16745],{"class":126},[109,146560,146561,146563,146565,146567],{"class":111,"line":119},[109,146562,132207],{"class":133},[109,146564,52612],{"class":126},[109,146566,24910],{"class":133},[109,146568,137],{"class":126},[109,146570,146571],{"class":111,"line":140},[109,146572,742],{"class":126},[19,146574,71628],{},[99,146576,146577],{"className":127727,"code":140397,"language":127729,"meta":104,"style":104},[106,146578,146579,146585,146595],{"__ignoreMap":104},[109,146580,146581,146583],{"class":111,"line":112},[109,146582,131575],{"class":211},[109,146584,16745],{"class":126},[109,146586,146587,146589,146591,146593],{"class":111,"line":119},[109,146588,132207],{"class":133},[109,146590,52612],{"class":126},[109,146592,24910],{"class":133},[109,146594,137],{"class":126},[109,146596,146597],{"class":111,"line":140},[109,146598,742],{"class":126},[14,146600,146602],{"id":146601},"_215-swiper-插件使用","21.5 swiper 插件使用",[27,146604,146605,146608,146611],{},[30,146606,146607],{},"下载需要的css和js文件html页面中 引入相关文件",[30,146609,146610],{},"官网找到类似案例，复制html结构，css样式 js 语法",[30,146612,146613],{},"根据需求定制修改模块",[938,146615],{"style":127583,"src":146616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146618,146619],{},"解压后将这两部分放到项目中",[938,146621],{"style":127583,"src":146622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146624,146625],{},"这个插件可以帮助我们实现轮播图效果",[19,146627,146628],{},"用法：",[938,146630],{"style":127583,"src":146631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146633,146634],{},"找到自己喜欢的",[938,146636],{"style":127583,"src":146637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146639,146640],{},"右键，查看网页源代码",[938,146642],{"style":127583,"src":146643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146645,146646],{},"复制人家的结构内容",[19,146648,146649],{},"然后去看API文档：",[938,146651],{"style":127583,"src":146652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146654,146655],{},"可以看看如何修改样式",[19,146657,146658],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1467,146660,146661],{},"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":104,"searchDepth":119,"depth":119,"links":146663},[146664,146669,146673,146678,146683],{"id":145464,"depth":119,"text":145465,"children":146665},[146666,146667,146668],{"id":145468,"depth":140,"text":145469},{"id":145478,"depth":140,"text":145479},{"id":145573,"depth":140,"text":145574},{"id":145588,"depth":119,"text":145589,"children":146670},[146671,146672],{"id":145610,"depth":140,"text":145611},{"id":145626,"depth":140,"text":145627},{"id":145701,"depth":119,"text":145702,"children":146674},[146675,146676,146677],{"id":145714,"depth":140,"text":145715},{"id":145938,"depth":140,"text":145939},{"id":145945,"depth":140,"text":145946},{"id":146086,"depth":119,"text":146087,"children":146679},[146680,146681,146682],{"id":146113,"depth":140,"text":146114},{"id":146176,"depth":140,"text":146177},{"id":146521,"depth":140,"text":146522},{"id":146601,"depth":119,"text":146602},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145456,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146690,"title":146691,"body":146692,"description":24550,"extension":1476,"meta":146912,"navigation":157,"path":146913,"seo":146914,"stem":146915,"__hash__":146916},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146693,"toc":146908},[146694,146697,146701,146704,146719,146724,146727,146732,146767,146772,146784,146789,146802,146807,146824,146829,146849,146854,146872,146875,146878,146881,146884,146888,146891,146894,146897,146900,146903,146906],[10,146695,146691],{"id":146696},"_22-代码提交与新型相对单位",[14,146698,146700],{"id":146699},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146702,146703],{},"法1：",[765,146705,146706,146713,146716],{},[30,146707,146708,146709],{},"登录网站注册：",[1776,146710,146711],{"href":146711,"rel":146712},"https:\u002F\u002Fgitee.com\u002F",[25039],[30,146714,146715],{},"码云创建新的仓库",[30,146717,146718],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[27,146720,146721],{},[30,146722,146723],{},"在网站根目录右键-- Git Bash Here",[938,146725],{"style":127583,"src":146726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[27,146728,146729],{},[30,146730,146731],{},"如果是第一次利用git提交，请配置好全局选项",[99,146733,146735],{"className":118471,"code":146734,"language":118473,"meta":104,"style":104},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[106,146736,146737,146753],{"__ignoreMap":104},[109,146738,146739,146742,146744,146747,146750],{"class":111,"line":112},[109,146740,146741],{"class":211},"git",[109,146743,120894],{"class":278},[109,146745,146746],{"class":133}," --global",[109,146748,146749],{"class":278}," user.name",[109,146751,146752],{"class":278}," \"你的名字\"\n",[109,146754,146755,146757,146759,146761,146764],{"class":111,"line":119},[109,146756,146741],{"class":211},[109,146758,120894],{"class":278},[109,146760,146746],{"class":133},[109,146762,146763],{"class":278}," user.email",[109,146765,146766],{"class":278}," \"你的邮箱\"\n",[27,146768,146769],{},[30,146770,146771],{},"初始化仓库",[99,146773,146775],{"className":118471,"code":146774,"language":118473,"meta":104,"style":104},"git init\n",[106,146776,146777],{"__ignoreMap":104},[109,146778,146779,146781],{"class":111,"line":112},[109,146780,146741],{"class":211},[109,146782,146783],{"class":278}," init\n",[27,146785,146786],{},[30,146787,146788],{},"把本地文件放到暂存区",[99,146790,146792],{"className":118471,"code":146791,"language":118473,"meta":104,"style":104},"git add .\n",[106,146793,146794],{"__ignoreMap":104},[109,146795,146796,146798,146800],{"class":111,"line":112},[109,146797,146741],{"class":211},[109,146799,6546],{"class":278},[109,146801,29916],{"class":278},[27,146803,146804],{},[30,146805,146806],{},"把本地文件放到本地仓库里面",[99,146808,146810],{"className":118471,"code":146809,"language":118473,"meta":104,"style":104},"git commit -m \"first commit\"\n",[106,146811,146812],{"__ignoreMap":104},[109,146813,146814,146816,146819,146821],{"class":111,"line":112},[109,146815,146741],{"class":211},[109,146817,146818],{"class":278}," commit",[109,146820,102057],{"class":133},[109,146822,146823],{"class":278}," \"first commit\"\n",[27,146825,146826],{},[30,146827,146828],{},"链接远程仓库",[99,146830,146832],{"className":118471,"code":146831,"language":118473,"meta":104,"style":104},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[106,146833,146834],{"__ignoreMap":104},[109,146835,146836,146838,146841,146843,146846],{"class":111,"line":112},[109,146837,146741],{"class":211},[109,146839,146840],{"class":278}," remote",[109,146842,6546],{"class":278},[109,146844,146845],{"class":278}," origin",[109,146847,146848],{"class":278}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[27,146850,146851],{},[30,146852,146853],{},"把本地仓库的文件推送到远程仓库 push",[99,146855,146857],{"className":118471,"code":146856,"language":118473,"meta":104,"style":104},"git push -u origin master\n",[106,146858,146859],{"__ignoreMap":104},[109,146860,146861,146863,146865,146867,146869],{"class":111,"line":112},[109,146862,146741],{"class":211},[109,146864,30191],{"class":278},[109,146866,29465],{"class":133},[109,146868,146845],{"class":278},[109,146870,146871],{"class":278}," master\n",[938,146873],{"style":127583,"src":146874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146876,146877],{},"上方方法暂未实现，后边学完git后在整",[19,146879,146880],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[938,146882],{"style":127583,"src":146883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146885,146887],{"id":146886},"_222-新型相对单位","22.2 新型相对单位",[938,146889],{"style":127583,"src":146890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[938,146892],{"style":127583,"src":146893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146895,146896],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146898,146899],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[938,146901],{"style":127583,"src":146902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146904,146905],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1467,146907,25132],{},{"title":104,"searchDepth":119,"depth":119,"links":146909},[146910,146911],{"id":146699,"depth":119,"text":146700},{"id":146886,"depth":119,"text":146887},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146691,"description":24550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146918,"title":146919,"body":146920,"description":146924,"extension":1476,"meta":146925,"navigation":157,"path":146926,"seo":146927,"stem":146928,"__hash__":146929},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146921,"toc":146922},[],{"title":104,"searchDepth":119,"depth":119,"links":146923},[],"自己正经开始学编程的第一门语言！",{"category":94014},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146919,"description":146924},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146931,"title":146932,"body":146933,"description":24550,"extension":1476,"meta":148080,"navigation":157,"path":148081,"seo":148082,"stem":148083,"__hash__":148084},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146934,"toc":148056},[146935,146938,146942,146945,146948,146973,146976,146982,146986,146989,147016,147019,147059,147062,147074,147077,147083,147087,147091,147118,147135,147142,147146,147149,147175,147178,147182,147185,147225,147228,147245,147251,147255,147260,147304,147307,147325,147328,147396,147400,147407,147410,147425,147428,147437,147440,147451,147454,147463,147466,147483,147486,147501,147505,147509,147512,147514,147534,147538,147541,147544,147555,147558,147564,147568,147574,147601,147604,147616,147619,147630,147633,147639,147643,147649,147699,147702,147744,147747,147780,147783,147817,147821,147824,147844,147847,147883,147886,147899,147903,147907,147913,147916,147929,147933,147936,147942,147945,147949,147952,147955,148004,148008,148024,148030,148037,148043,148053],[10,146936,146932],{"id":146937},"_1-python环境与第一个程序",[14,146939,146941],{"id":146940},"_11-什么是python","1.1 什么是Python",[19,146943,146944],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146946,146947],{},"理解 Python 时抓住三个关键词：",[765,146949,146950,146953,146956],{},[30,146951,146952],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[30,146954,146955],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[30,146957,146958,146959,1750,146962,1750,146965,1750,146968,1750,146970,29560],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[106,146960,146961],{},"os",[106,146963,146964],{},"sys",[106,146966,146967],{},"json",[106,146969,59035],{},[106,146971,146972],{},"datetime",[19,146974,146975],{},"Python 程序的运行链路：",[99,146977,146980],{"className":146978,"code":146979,"language":6524,"meta":104},[6522],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[106,146981,146979],{"__ignoreMap":104},[14,146983,146985],{"id":146984},"_12-python解释器","1.2 Python解释器",[19,146987,146988],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[99,146990,146992],{"className":24996,"code":146991,"language":24998,"meta":104,"style":104},"python --version\npython3 --version\npython\npython3\n",[106,146993,146994,147000,147006,147011],{"__ignoreMap":104},[109,146995,146996,146998],{"class":111,"line":112},[109,146997,31555],{"class":211},[109,146999,27468],{"class":133},[109,147001,147002,147004],{"class":111,"line":119},[109,147003,102054],{"class":211},[109,147005,27468],{"class":133},[109,147007,147008],{"class":111,"line":140},[109,147009,147010],{"class":211},"python\n",[109,147012,147013],{"class":111,"line":154},[109,147014,147015],{"class":211},"python3\n",[19,147017,147018],{},"进入交互模式后，可以直接输入表达式：",[99,147020,147022],{"className":31553,"code":147021,"language":31555,"meta":104,"style":104},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[106,147023,147024,147035,147040,147054],{"__ignoreMap":104},[109,147025,147026,147029,147031,147033],{"class":111,"line":112},[109,147027,147028],{"class":122},">>>",[109,147030,26293],{"class":133},[109,147032,46741],{"class":122},[109,147034,48898],{"class":133},[109,147036,147037],{"class":111,"line":119},[109,147038,147039],{"class":133},"3\n",[109,147041,147042,147044,147047,147049,147052],{"class":111,"line":140},[109,147043,147028],{"class":122},[109,147045,147046],{"class":133}," print",[109,147048,714],{"class":126},[109,147050,147051],{"class":278},"\"hello python\"",[109,147053,1330],{"class":126},[109,147055,147056],{"class":111,"line":154},[109,147057,147058],{"class":126},"hello python\n",[19,147060,147061],{},"退出交互模式：",[99,147063,147065],{"className":31553,"code":147064,"language":31555,"meta":104,"style":104},"exit()\n",[106,147066,147067],{"__ignoreMap":104},[109,147068,147069,147072],{"class":111,"line":112},[109,147070,147071],{"class":133},"exit",[109,147073,803],{"class":126},[19,147075,147076],{},"或使用快捷键：",[99,147078,147081],{"className":147079,"code":147080,"language":6524,"meta":104},[6522],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[106,147082,147080],{"__ignoreMap":104},[14,147084,147086],{"id":147085},"_13-安装python","1.3 安装Python",[51,147088,147090],{"id":147089},"_131-windows安装","1.3.1 Windows安装",[765,147092,147093,147100,147103,147109,147115],{},[30,147094,147095,147096],{},"打开 Python 官网：",[1776,147097,147098],{"href":147098,"rel":147099},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25039],[30,147101,147102],{},"下载 Windows Installer。",[30,147104,147105,147106,29560],{},"安装时勾选 ",[106,147107,147108],{},"Add Python to PATH",[30,147110,147111,147112,29560],{},"点击 ",[106,147113,147114],{},"Install Now",[30,147116,147117],{},"安装完成后打开命令提示符验证：",[99,147119,147121],{"className":24996,"code":147120,"language":24998,"meta":104,"style":104},"python --version\npip --version\n",[106,147122,147123,147129],{"__ignoreMap":104},[109,147124,147125,147127],{"class":111,"line":112},[109,147126,31555],{"class":211},[109,147128,27468],{"class":133},[109,147130,147131,147133],{"class":111,"line":119},[109,147132,25005],{"class":211},[109,147134,27468],{"class":133},[19,147136,147137,147138,147141],{},"如果提示 ",[106,147139,147140],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[51,147143,147145],{"id":147144},"_132-macos安装","1.3.2 macOS安装",[19,147147,147148],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[99,147150,147152],{"className":24996,"code":147151,"language":24998,"meta":104,"style":104},"brew install python\npython3 --version\npip3 --version\n",[106,147153,147154,147163,147169],{"__ignoreMap":104},[109,147155,147156,147159,147161],{"class":111,"line":112},[109,147157,147158],{"class":211},"brew",[109,147160,25008],{"class":278},[109,147162,125493],{"class":278},[109,147164,147165,147167],{"class":111,"line":119},[109,147166,102054],{"class":211},[109,147168,27468],{"class":133},[109,147170,147171,147173],{"class":111,"line":140},[109,147172,120875],{"class":211},[109,147174,27468],{"class":133},[19,147176,147177],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[51,147179,147181],{"id":147180},"_133-linux安装","1.3.3 Linux安装",[19,147183,147184],{},"Ubuntu\u002FDebian：",[99,147186,147188],{"className":24996,"code":147187,"language":24998,"meta":104,"style":104},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[106,147189,147190,147198,147213,147219],{"__ignoreMap":104},[109,147191,147192,147194,147196],{"class":111,"line":112},[109,147193,25751],{"class":211},[109,147195,118492],{"class":278},[109,147197,27417],{"class":278},[109,147199,147200,147202,147204,147206,147208,147210],{"class":111,"line":119},[109,147201,25751],{"class":211},[109,147203,118492],{"class":278},[109,147205,25008],{"class":278},[109,147207,105578],{"class":278},[109,147209,101973],{"class":278},[109,147211,147212],{"class":278}," python3-venv\n",[109,147214,147215,147217],{"class":111,"line":140},[109,147216,102054],{"class":211},[109,147218,27468],{"class":133},[109,147220,147221,147223],{"class":111,"line":154},[109,147222,120875],{"class":211},[109,147224,27468],{"class":133},[19,147226,147227],{},"Fedora：",[99,147229,147231],{"className":24996,"code":147230,"language":24998,"meta":104,"style":104},"sudo dnf install python3 python3-pip\n",[106,147232,147233],{"__ignoreMap":104},[109,147234,147235,147237,147239,147241,147243],{"class":111,"line":112},[109,147236,25751],{"class":211},[109,147238,27490],{"class":278},[109,147240,25008],{"class":278},[109,147242,105578],{"class":278},[109,147244,120940],{"class":278},[19,147246,147247,147248,147250],{},"Linux 上通常使用 ",[106,147249,102054],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147252,147254],{"id":147253},"_14-pip包管理器","1.4 pip包管理器",[19,147256,147257,147259],{},[106,147258,25005],{}," 用来安装第三方库。",[99,147261,147263],{"className":24996,"code":147262,"language":24998,"meta":104,"style":104},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[106,147264,147265,147274,147283,147291,147297],{"__ignoreMap":104},[109,147266,147267,147269,147271],{"class":111,"line":112},[109,147268,25005],{"class":211},[109,147270,25008],{"class":278},[109,147272,147273],{"class":278}," requests\n",[109,147275,147276,147278,147281],{"class":111,"line":119},[109,147277,25005],{"class":211},[109,147279,147280],{"class":278}," uninstall",[109,147282,147273],{"class":278},[109,147284,147285,147287,147289],{"class":111,"line":140},[109,147286,25005],{"class":211},[109,147288,118749],{"class":278},[109,147290,147273],{"class":278},[109,147292,147293,147295],{"class":111,"line":154},[109,147294,25005],{"class":211},[109,147296,120130],{"class":278},[109,147298,147299,147301],{"class":111,"line":161},[109,147300,25005],{"class":211},[109,147302,147303],{"class":278}," freeze\n",[19,147305,147306],{},"国内网络较慢时可以临时使用镜像：",[99,147308,147310],{"className":24996,"code":147309,"language":24998,"meta":104,"style":104},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[106,147311,147312],{"__ignoreMap":104},[109,147313,147314,147316,147318,147321,147323],{"class":111,"line":112},[109,147315,25005],{"class":211},[109,147317,25008],{"class":278},[109,147319,147320],{"class":278}," requests",[109,147322,27605],{"class":133},[109,147324,120903],{"class":278},[19,147326,147327],{},"常见第三方库：",[1677,147329,147330,147339],{},[1680,147331,147332],{},[1683,147333,147334,147337],{},[1686,147335,147336],{},"库",[1686,147338,103871],{},[1723,147340,147341,147349,147356,147364,147372,147380,147388],{},[1683,147342,147343,147346],{},[1728,147344,147345],{},"requests",[1728,147347,147348],{},"网络请求",[1683,147350,147351,147353],{},[1728,147352,101801],{},[1728,147354,147355],{},"数值计算",[1683,147357,147358,147361],{},[1728,147359,147360],{},"pandas",[1728,147362,147363],{},"表格数据处理",[1683,147365,147366,147369],{},[1728,147367,147368],{},"matplotlib",[1728,147370,147371],{},"绘图",[1683,147373,147374,147377],{},[1728,147375,147376],{},"pyecharts",[1728,147378,147379],{},"ECharts 图表",[1683,147381,147382,147385],{},[1728,147383,147384],{},"flask",[1728,147386,147387],{},"Web 后端",[1683,147389,147390,147393],{},[1728,147391,147392],{},"pytest",[1728,147394,147395],{},"自动化测试",[14,147397,147399],{"id":147398},"_15-虚拟环境","1.5 虚拟环境",[19,147401,147402,147403,147406],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[106,147404,147405],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147408,147409],{},"创建虚拟环境：",[99,147411,147413],{"className":24996,"code":147412,"language":24998,"meta":104,"style":104},"python -m venv .venv\n",[106,147414,147415],{"__ignoreMap":104},[109,147416,147417,147419,147421,147423],{"class":111,"line":112},[109,147418,31555],{"class":211},[109,147420,102057],{"class":133},[109,147422,102060],{"class":278},[109,147424,102063],{"class":278},[19,147426,147427],{},"Windows 激活：",[99,147429,147431],{"className":24996,"code":147430,"language":24998,"meta":104,"style":104},".venv\\Scripts\\activate\n",[106,147432,147433],{"__ignoreMap":104},[109,147434,147435],{"class":111,"line":112},[109,147436,147430],{"class":211},[19,147438,147439],{},"macOS\u002FLinux 激活：",[99,147441,147443],{"className":24996,"code":147442,"language":24998,"meta":104,"style":104},"source .venv\u002Fbin\u002Factivate\n",[106,147444,147445],{"__ignoreMap":104},[109,147446,147447,147449],{"class":111,"line":112},[109,147448,102068],{"class":133},[109,147450,102071],{"class":278},[19,147452,147453],{},"退出虚拟环境：",[99,147455,147457],{"className":24996,"code":147456,"language":24998,"meta":104,"style":104},"deactivate\n",[106,147458,147459],{"__ignoreMap":104},[109,147460,147461],{"class":111,"line":112},[109,147462,147456],{"class":211},[19,147464,147465],{},"保存依赖：",[99,147467,147469],{"className":24996,"code":147468,"language":24998,"meta":104,"style":104},"pip freeze > requirements.txt\n",[106,147470,147471],{"__ignoreMap":104},[109,147472,147473,147475,147478,147480],{"class":111,"line":112},[109,147474,25005],{"class":211},[109,147476,147477],{"class":278}," freeze",[109,147479,27397],{"class":122},[109,147481,147482],{"class":278}," requirements.txt\n",[19,147484,147485],{},"安装依赖：",[99,147487,147489],{"className":24996,"code":147488,"language":24998,"meta":104,"style":104},"pip install -r requirements.txt\n",[106,147490,147491],{"__ignoreMap":104},[109,147492,147493,147495,147497,147499],{"class":111,"line":112},[109,147494,25005],{"class":211},[109,147496,25008],{"class":278},[109,147498,120814],{"class":133},[109,147500,147482],{"class":278},[14,147502,147504],{"id":147503},"_16-开发工具","1.6 开发工具",[51,147506,147508],{"id":147507},"_161-pycharm","1.6.1 PyCharm",[19,147510,147511],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147513,123237],{},[765,147515,147516,147519,147522,147528,147531],{},[30,147517,147518],{},"New Project：创建项目。",[30,147520,147521],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[30,147523,147524,147525,127158],{},"New Python File：创建 ",[106,147526,147527],{},".py",[30,147529,147530],{},"Run：运行当前文件。",[30,147532,147533],{},"Debug：断点调试。",[51,147535,147537],{"id":147536},"_162-vs-code","1.6.2 VS Code",[19,147539,147540],{},"VS Code 轻量，适合后续多语言开发。",[19,147542,147543],{},"建议安装插件：",[765,147545,147546,147549,147552],{},[30,147547,147548],{},"Python。",[30,147550,147551],{},"Pylance。",[30,147553,147554],{},"Jupyter。",[19,147556,147557],{},"选择解释器：",[99,147559,147562],{"className":147560,"code":147561,"language":6524,"meta":104},[6522],"Ctrl + Shift + P -> Python: Select Interpreter\n",[106,147563,147561],{"__ignoreMap":104},[14,147565,147567],{"id":147566},"_17-第一个python程序","1.7 第一个Python程序",[19,147569,147570,147571,25793],{},"创建文件 ",[106,147572,147573],{},"hello.py",[99,147575,147577],{"className":31553,"code":147576,"language":31555,"meta":104,"style":104},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[106,147578,147579,147590],{"__ignoreMap":104},[109,147580,147581,147583,147585,147588],{"class":111,"line":112},[109,147582,31590],{"class":133},[109,147584,714],{"class":126},[109,147586,147587],{"class":278},"\"Hello World\"",[109,147589,1330],{"class":126},[109,147591,147592,147594,147596,147599],{"class":111,"line":119},[109,147593,31590],{"class":133},[109,147595,714],{"class":126},[109,147597,147598],{"class":278},"\"你好，Python\"",[109,147600,1330],{"class":126},[19,147602,147603],{},"在终端运行：",[99,147605,147607],{"className":24996,"code":147606,"language":24998,"meta":104,"style":104},"python hello.py\n",[106,147608,147609],{"__ignoreMap":104},[109,147610,147611,147613],{"class":111,"line":112},[109,147612,31555],{"class":211},[109,147614,147615],{"class":278}," hello.py\n",[19,147617,147618],{},"或：",[99,147620,147622],{"className":24996,"code":147621,"language":24998,"meta":104,"style":104},"python3 hello.py\n",[106,147623,147624],{"__ignoreMap":104},[109,147625,147626,147628],{"class":111,"line":112},[109,147627,102054],{"class":211},[109,147629,147615],{"class":278},[19,147631,147632],{},"输出：",[99,147634,147637],{"className":147635,"code":147636,"language":6524,"meta":104},[6522],"Hello World\n你好，Python\n",[106,147638,147636],{"__ignoreMap":104},[14,147640,147642],{"id":147641},"_18-print函数","1.8 print函数",[19,147644,147645,147648],{},[106,147646,147647],{},"print()"," 用来输出内容。",[99,147650,147652],{"className":31553,"code":147651,"language":31555,"meta":104,"style":104},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[106,147653,147654,147664,147674,147684],{"__ignoreMap":104},[109,147655,147656,147658,147660,147662],{"class":111,"line":112},[109,147657,31590],{"class":133},[109,147659,714],{"class":126},[109,147661,7175],{"class":278},[109,147663,1330],{"class":126},[109,147665,147666,147668,147670,147672],{"class":111,"line":119},[109,147667,31590],{"class":133},[109,147669,714],{"class":126},[109,147671,1351],{"class":133},[109,147673,1330],{"class":126},[109,147675,147676,147678,147680,147682],{"class":111,"line":140},[109,147677,31590],{"class":133},[109,147679,714],{"class":126},[109,147681,1592],{"class":133},[109,147683,1330],{"class":126},[109,147685,147686,147688,147690,147693,147695,147697],{"class":111,"line":154},[109,147687,31590],{"class":133},[109,147689,714],{"class":126},[109,147691,147692],{"class":278},"\"年龄:\"",[109,147694,13608],{"class":126},[109,147696,2182],{"class":133},[109,147698,1330],{"class":126},[19,147700,147701],{},"多个内容用逗号隔开，默认中间加空格：",[99,147703,147705],{"className":31553,"code":147704,"language":31555,"meta":104,"style":104},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[106,147706,147707,147717,147727],{"__ignoreMap":104},[109,147708,147709,147712,147714],{"class":111,"line":112},[109,147710,147711],{"class":126},"name ",[109,147713,130],{"class":122},[109,147715,147716],{"class":278}," \"张三\"\n",[109,147718,147719,147722,147724],{"class":111,"line":119},[109,147720,147721],{"class":126},"age ",[109,147723,130],{"class":122},[109,147725,147726],{"class":133}," 18\n",[109,147728,147729,147731,147733,147736,147739,147741],{"class":111,"line":140},[109,147730,31590],{"class":133},[109,147732,714],{"class":126},[109,147734,147735],{"class":278},"\"姓名:\"",[109,147737,147738],{"class":126},", name, ",[109,147740,147692],{"class":278},[109,147742,147743],{"class":126},", age)\n",[19,147745,147746],{},"修改分隔符：",[99,147748,147750],{"className":31553,"code":147749,"language":31555,"meta":104,"style":104},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[106,147751,147752],{"__ignoreMap":104},[109,147753,147754,147756,147758,147761,147763,147765,147767,147769,147771,147774,147776,147778],{"class":111,"line":112},[109,147755,31590],{"class":133},[109,147757,714],{"class":126},[109,147759,147760],{"class":278},"\"2024\"",[109,147762,13608],{"class":126},[109,147764,55491],{"class":278},[109,147766,13608],{"class":126},[109,147768,55491],{"class":278},[109,147770,13608],{"class":126},[109,147772,147773],{"class":6553},"sep",[109,147775,130],{"class":122},[109,147777,33658],{"class":278},[109,147779,1330],{"class":126},[19,147781,147782],{},"修改结尾符：",[99,147784,147786],{"className":31553,"code":147785,"language":31555,"meta":104,"style":104},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[106,147787,147788,147806],{"__ignoreMap":104},[109,147789,147790,147792,147794,147796,147798,147800,147802,147804],{"class":111,"line":112},[109,147791,31590],{"class":133},[109,147793,714],{"class":126},[109,147795,7175],{"class":278},[109,147797,13608],{"class":126},[109,147799,46976],{"class":6553},[109,147801,130],{"class":122},[109,147803,5697],{"class":278},[109,147805,1330],{"class":126},[109,147807,147808,147810,147812,147815],{"class":111,"line":119},[109,147809,31590],{"class":133},[109,147811,714],{"class":126},[109,147813,147814],{"class":278},"\"python\"",[109,147816,1330],{"class":126},[14,147818,147820],{"id":147819},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147822,147823],{},"交互运行适合临时验证：",[99,147825,147827],{"className":31553,"code":147826,"language":31555,"meta":104,"style":104},">>> 10 * 3\n30\n",[106,147828,147829,147839],{"__ignoreMap":104},[109,147830,147831,147833,147835,147837],{"class":111,"line":112},[109,147832,147028],{"class":122},[109,147834,134],{"class":133},[109,147836,797],{"class":122},[109,147838,121211],{"class":133},[109,147840,147841],{"class":111,"line":119},[109,147842,147843],{"class":133},"30\n",[19,147845,147846],{},"脚本运行适合保存程序：",[99,147848,147850],{"className":31553,"code":147849,"language":31555,"meta":104,"style":104},"price = 8\ncount = 5\nprint(price * count)\n",[106,147851,147852,147862,147871],{"__ignoreMap":104},[109,147853,147854,147857,147859],{"class":111,"line":112},[109,147855,147856],{"class":126},"price ",[109,147858,130],{"class":122},[109,147860,147861],{"class":133}," 8\n",[109,147863,147864,147867,147869],{"class":111,"line":119},[109,147865,147866],{"class":126},"count ",[109,147868,130],{"class":122},[109,147870,55602],{"class":133},[109,147872,147873,147875,147878,147880],{"class":111,"line":140},[109,147874,31590],{"class":133},[109,147876,147877],{"class":126},"(price ",[109,147879,1988],{"class":122},[109,147881,147882],{"class":126}," count)\n",[19,147884,147885],{},"实际学习中推荐：",[765,147887,147888,147891,147896],{},[30,147889,147890],{},"临时试一个语法，用交互模式。",[30,147892,147893,147894,127158],{},"写完整练习，用 ",[106,147895,147527],{},[30,147897,147898],{},"写项目，用独立目录和虚拟环境。",[14,147900,147902],{"id":147901},"_110-常见错误","1.10 常见错误",[51,147904,147906],{"id":147905},"_1101-命令找不到","1.10.1 命令找不到",[99,147908,147911],{"className":147909,"code":147910,"language":6524,"meta":104},[6522],"python: command not found\n",[106,147912,147910],{"__ignoreMap":104},[19,147914,147915],{},"原因：",[765,147917,147918,147921,147924],{},[30,147919,147920],{},"没安装 Python。",[30,147922,147923],{},"PATH 没配置。",[30,147925,147926,147927,29560],{},"Linux\u002FmacOS 应该使用 ",[106,147928,102054],{},[51,147930,147932],{"id":147931},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147934,147935],{},"不要把文件命名为：",[99,147937,147940],{"className":147938,"code":147939,"language":6524,"meta":104},[6522],"random.py\njson.py\ntime.py\nrequests.py\n",[106,147941,147939],{"__ignoreMap":104},[19,147943,147944],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[51,147946,147948],{"id":147947},"_1103-中文乱码","1.10.3 中文乱码",[19,147950,147951],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147953,147954],{},"如果读写文件出现乱码，要明确指定编码：",[99,147956,147958],{"className":31553,"code":147957,"language":31555,"meta":104,"style":104},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[106,147959,147960,147994],{"__ignoreMap":104},[109,147961,147962,147964,147967,147969,147972,147974,147977,147979,147982,147984,147987,147989,147991],{"class":111,"line":112},[109,147963,109008],{"class":122},[109,147965,147966],{"class":133}," open",[109,147968,714],{"class":126},[109,147970,147971],{"class":278},"\"data.txt\"",[109,147973,13608],{"class":126},[109,147975,147976],{"class":278},"\"r\"",[109,147978,13608],{"class":126},[109,147980,147981],{"class":6553},"encoding",[109,147983,130],{"class":122},[109,147985,147986],{"class":278},"\"utf-8\"",[109,147988,14887],{"class":126},[109,147990,32558],{"class":122},[109,147992,147993],{"class":126}," f:\n",[109,147995,147996,147999,148001],{"class":111,"line":119},[109,147997,147998],{"class":126},"    content ",[109,148000,130],{"class":122},[109,148002,148003],{"class":126}," f.read()\n",[14,148005,148007],{"id":148006},"_111-本章练习","1.11 本章练习",[765,148009,148010,148013,148019],{},[30,148011,148012],{},"安装 Python，并在终端输出版本号。",[30,148014,148015,148016,148018],{},"新建 ",[106,148017,147573],{},"，输出自己的姓名、年龄、学习目标。",[30,148020,105541,148021,148023],{},[106,148022,147647],{}," 输出下面格式：",[99,148025,148028],{"className":148026,"code":148027,"language":6524,"meta":104},[6522],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[106,148029,148027],{"__ignoreMap":104},[765,148031,148032],{"start":154},[30,148033,105541,148034,148036],{},[106,148035,147773],{}," 输出日期：",[99,148038,148041],{"className":148039,"code":148040,"language":6524,"meta":104},[6522],"2024-10-10\n",[106,148042,148040],{"__ignoreMap":104},[765,148044,148045],{"start":161},[30,148046,105541,148047,148049,148050,148052],{},[106,148048,46976],{}," 让两次 ",[106,148051,147647],{}," 输出在同一行。",[1467,148054,148055],{},"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":104,"searchDepth":119,"depth":119,"links":148057},[148058,148059,148060,148065,148066,148067,148071,148072,148073,148074,148079],{"id":146940,"depth":119,"text":146941},{"id":146984,"depth":119,"text":146985},{"id":147085,"depth":119,"text":147086,"children":148061},[148062,148063,148064],{"id":147089,"depth":140,"text":147090},{"id":147144,"depth":140,"text":147145},{"id":147180,"depth":140,"text":147181},{"id":147253,"depth":119,"text":147254},{"id":147398,"depth":119,"text":147399},{"id":147503,"depth":119,"text":147504,"children":148068},[148069,148070],{"id":147507,"depth":140,"text":147508},{"id":147536,"depth":140,"text":147537},{"id":147566,"depth":119,"text":147567},{"id":147641,"depth":119,"text":147642},{"id":147819,"depth":119,"text":147820},{"id":147901,"depth":119,"text":147902,"children":148075},[148076,148077,148078],{"id":147905,"depth":140,"text":147906},{"id":147931,"depth":140,"text":147932},{"id":147947,"depth":140,"text":147948},{"id":148006,"depth":119,"text":148007},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146932,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148086,"title":148087,"body":148088,"description":24550,"extension":1476,"meta":150492,"navigation":157,"path":150493,"seo":150494,"stem":150495,"__hash__":150496},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148089,"toc":150477},[148090,148093,148097,148100,148103,148120,148123,148165,148168,148172,148175,148178,148215,148218,148252,148255,148347,148351,148365,148368,148395,148398,148402,148505,148512,148515,148532,148536,148543,148732,148735,148808,148812,148815,148899,148902,148934,148938,149142,149145,149149,149155,149257,149260,149516,149520,149523,149526,149540,149542,149728,149732,150094,150100,150104,150107,150231,150234,150413,150416,150420,150453,150457,150474],[10,148091,148087],{"id":148092},"_10-json与pyecharts折线图",[14,148094,148096],{"id":148095},"_101-数据可视化","10.1 数据可视化",[19,148098,148099],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148101,148102],{},"常见图表：",[765,148104,148105,148108,148111,148114,148117],{},[30,148106,148107],{},"折线图：看趋势。",[30,148109,148110],{},"柱状图：看分类对比。",[30,148112,148113],{},"饼图：看占比。",[30,148115,148116],{},"地图：看地域分布。",[30,148118,148119],{},"散点图：看两个变量之间的关系。",[19,148121,148122],{},"Python 可视化常用库：",[1677,148124,148125,148133],{},[1680,148126,148127],{},[1683,148128,148129,148131],{},[1686,148130,147336],{},[1686,148132,24914],{},[1723,148134,148135,148142,148150,148157],{},[1683,148136,148137,148139],{},[1728,148138,147368],{},[1728,148140,148141],{},"基础、经典、可定制",[1683,148143,148144,148147],{},[1728,148145,148146],{},"seaborn",[1728,148148,148149],{},"统计图表更美观",[1683,148151,148152,148154],{},[1728,148153,147376],{},[1728,148155,148156],{},"生成交互式网页图表",[1683,148158,148159,148162],{},[1728,148160,148161],{},"plotly",[1728,148163,148164],{},"交互图表能力强",[19,148166,148167],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148169,148171],{"id":148170},"_102-json回顾","10.2 JSON回顾",[19,148173,148174],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148176,148177],{},"Python 字典：",[99,148179,148181],{"className":31553,"code":148180,"language":31555,"meta":104,"style":104},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[106,148182,148183,148191,148202,148211],{"__ignoreMap":104},[109,148184,148185,148187,148189],{"class":111,"line":112},[109,148186,102833],{"class":126},[109,148188,130],{"class":122},[109,148190,16745],{"class":126},[109,148192,148193,148196,148198,148200],{"class":111,"line":119},[109,148194,148195],{"class":278},"    \"name\"",[109,148197,52612],{"class":126},[109,148199,70444],{"class":278},[109,148201,32641],{"class":126},[109,148203,148204,148207,148209],{"class":111,"line":140},[109,148205,148206],{"class":278},"    \"value\"",[109,148208,52612],{"class":126},[109,148210,98633],{"class":133},[109,148212,148213],{"class":111,"line":154},[109,148214,742],{"class":126},[19,148216,148217],{},"JSON 字符串：",[99,148219,148222],{"className":148220,"code":148221,"language":146967,"meta":104,"style":104},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[106,148223,148224,148228,148239,148248],{"__ignoreMap":104},[109,148225,148226],{"class":111,"line":112},[109,148227,808],{"class":126},[109,148229,148230,148233,148235,148237],{"class":111,"line":119},[109,148231,148232],{"class":133},"  \"name\"",[109,148234,52612],{"class":126},[109,148236,70444],{"class":278},[109,148238,32641],{"class":126},[109,148240,148241,148244,148246],{"class":111,"line":140},[109,148242,148243],{"class":133},"  \"value\"",[109,148245,52612],{"class":126},[109,148247,98633],{"class":133},[109,148249,148250],{"class":111,"line":154},[109,148251,742],{"class":126},[19,148253,148254],{},"Python 与 JSON 的转换：",[99,148256,148258],{"className":31553,"code":148257,"language":31555,"meta":104,"style":104},"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",[106,148259,148260,148267,148271,148296,148300,148319,148326,148330,148340],{"__ignoreMap":104},[109,148261,148262,148264],{"class":111,"line":112},[109,148263,31567],{"class":122},[109,148265,148266],{"class":126}," json\n",[109,148268,148269],{"class":111,"line":119},[109,148270,158],{"emptyLinePlaceholder":157},[109,148272,148273,148275,148277,148279,148281,148283,148285,148287,148290,148292,148294],{"class":111,"line":140},[109,148274,102833],{"class":126},[109,148276,130],{"class":122},[109,148278,5785],{"class":126},[109,148280,63854],{"class":278},[109,148282,52612],{"class":126},[109,148284,70444],{"class":278},[109,148286,13608],{"class":126},[109,148288,148289],{"class":278},"\"value\"",[109,148291,52612],{"class":126},[109,148293,1351],{"class":133},[109,148295,742],{"class":126},[109,148297,148298],{"class":111,"line":154},[109,148299,158],{"emptyLinePlaceholder":157},[109,148301,148302,148305,148307,148310,148313,148315,148317],{"class":111,"line":161},[109,148303,148304],{"class":126},"json_text ",[109,148306,130],{"class":122},[109,148308,148309],{"class":126}," json.dumps(data, ",[109,148311,148312],{"class":6553},"ensure_ascii",[109,148314,130],{"class":122},[109,148316,35162],{"class":133},[109,148318,1330],{"class":126},[109,148320,148321,148323],{"class":111,"line":167},[109,148322,31590],{"class":133},[109,148324,148325],{"class":126},"(json_text)\n",[109,148327,148328],{"class":111,"line":185},[109,148329,158],{"emptyLinePlaceholder":157},[109,148331,148332,148335,148337],{"class":111,"line":201},[109,148333,148334],{"class":126},"new_data ",[109,148336,130],{"class":122},[109,148338,148339],{"class":126}," json.loads(json_text)\n",[109,148341,148342,148344],{"class":111,"line":206},[109,148343,31590],{"class":133},[109,148345,148346],{"class":126},"(new_data)\n",[14,148348,148350],{"id":148349},"_103-安装pyecharts","10.3 安装pyecharts",[99,148352,148354],{"className":24996,"code":148353,"language":24998,"meta":104,"style":104},"pip install pyecharts\n",[106,148355,148356],{"__ignoreMap":104},[109,148357,148358,148360,148362],{"class":111,"line":112},[109,148359,25005],{"class":211},[109,148361,25008],{"class":278},[109,148363,148364],{"class":278}," pyecharts\n",[19,148366,148367],{},"验证：",[99,148369,148371],{"className":31553,"code":148370,"language":31555,"meta":104,"style":104},"import pyecharts\n\nprint(pyecharts.__version__)\n",[106,148372,148373,148379,148383],{"__ignoreMap":104},[109,148374,148375,148377],{"class":111,"line":112},[109,148376,31567],{"class":122},[109,148378,148364],{"class":126},[109,148380,148381],{"class":111,"line":119},[109,148382,158],{"emptyLinePlaceholder":157},[109,148384,148385,148387,148390,148393],{"class":111,"line":140},[109,148386,31590],{"class":133},[109,148388,148389],{"class":126},"(pyecharts.",[109,148391,148392],{"class":133},"__version__",[109,148394,1330],{"class":126},[19,148396,148397],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148399,148401],{"id":148400},"_104-第一个折线图","10.4 第一个折线图",[99,148403,148405],{"className":31553,"code":148404,"language":31555,"meta":104,"style":104},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[106,148406,148407,148419,148423,148433,148463,148495],{"__ignoreMap":104},[109,148408,148409,148411,148414,148416],{"class":111,"line":112},[109,148410,31912],{"class":122},[109,148412,148413],{"class":126}," pyecharts.charts ",[109,148415,31567],{"class":122},[109,148417,148418],{"class":126}," Line\n",[109,148420,148421],{"class":111,"line":119},[109,148422,158],{"emptyLinePlaceholder":157},[109,148424,148425,148428,148430],{"class":111,"line":140},[109,148426,148427],{"class":126},"line ",[109,148429,130],{"class":122},[109,148431,148432],{"class":126}," Line()\n",[109,148434,148435,148438,148441,148443,148446,148448,148451,148453,148456,148458,148461],{"class":111,"line":154},[109,148436,148437],{"class":126},"line.add_xaxis([",[109,148439,148440],{"class":278},"\"周一\"",[109,148442,13608],{"class":126},[109,148444,148445],{"class":278},"\"周二\"",[109,148447,13608],{"class":126},[109,148449,148450],{"class":278},"\"周三\"",[109,148452,13608],{"class":126},[109,148454,148455],{"class":278},"\"周四\"",[109,148457,13608],{"class":126},[109,148459,148460],{"class":278},"\"周五\"",[109,148462,5994],{"class":126},[109,148464,148465,148468,148471,148473,148475,148477,148479,148481,148483,148485,148488,148490,148493],{"class":111,"line":161},[109,148466,148467],{"class":126},"line.add_yaxis(",[109,148469,148470],{"class":278},"\"销售额\"",[109,148472,78693],{"class":126},[109,148474,1351],{"class":133},[109,148476,13608],{"class":126},[109,148478,2349],{"class":133},[109,148480,13608],{"class":126},[109,148482,2394],{"class":133},[109,148484,13608],{"class":126},[109,148486,148487],{"class":133},"150",[109,148489,13608],{"class":126},[109,148491,148492],{"class":133},"180",[109,148494,5994],{"class":126},[109,148496,148497,148500,148503],{"class":111,"line":167},[109,148498,148499],{"class":126},"line.render(",[109,148501,148502],{"class":278},"\"line.html\"",[109,148504,1330],{"class":126},[19,148506,148507,148508,148511],{},"运行后会生成 ",[106,148509,148510],{},"line.html","，用浏览器打开即可看到图表。",[19,148513,148514],{},"核心步骤：",[765,148516,148517,148520,148523,148526,148529],{},[30,148518,148519],{},"导入图表类。",[30,148521,148522],{},"创建图表对象。",[30,148524,148525],{},"添加 x 轴数据。",[30,148527,148528],{},"添加 y 轴数据。",[30,148530,148531],{},"渲染为 HTML。",[14,148533,148535],{"id":148534},"_105-全局配置","10.5 全局配置",[19,148537,148538,148539,148542],{},"常用配置在 ",[106,148540,148541],{},"pyecharts.options"," 中。",[99,148544,148546],{"className":31553,"code":148545,"language":31555,"meta":104,"style":104},"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",[106,148547,148548,148565,148575,148579,148587,148611,148639,148644,148663,148682,148700,148720,148724],{"__ignoreMap":104},[109,148549,148550,148552,148555,148557,148560,148562],{"class":111,"line":112},[109,148551,31912],{"class":122},[109,148553,148554],{"class":126}," pyecharts ",[109,148556,31567],{"class":122},[109,148558,148559],{"class":126}," options ",[109,148561,32558],{"class":122},[109,148563,148564],{"class":126}," opts\n",[109,148566,148567,148569,148571,148573],{"class":111,"line":119},[109,148568,31912],{"class":122},[109,148570,148413],{"class":126},[109,148572,31567],{"class":122},[109,148574,148418],{"class":126},[109,148576,148577],{"class":111,"line":140},[109,148578,158],{"emptyLinePlaceholder":157},[109,148580,148581,148583,148585],{"class":111,"line":154},[109,148582,148427],{"class":126},[109,148584,130],{"class":122},[109,148586,148432],{"class":126},[109,148588,148589,148591,148593,148595,148597,148599,148601,148603,148605,148607,148609],{"class":111,"line":161},[109,148590,148437],{"class":126},[109,148592,148440],{"class":278},[109,148594,13608],{"class":126},[109,148596,148445],{"class":278},[109,148598,13608],{"class":126},[109,148600,148450],{"class":278},[109,148602,13608],{"class":126},[109,148604,148455],{"class":278},[109,148606,13608],{"class":126},[109,148608,148460],{"class":278},[109,148610,5994],{"class":126},[109,148612,148613,148615,148617,148619,148621,148623,148625,148627,148629,148631,148633,148635,148637],{"class":111,"line":167},[109,148614,148467],{"class":126},[109,148616,148470],{"class":278},[109,148618,78693],{"class":126},[109,148620,1351],{"class":133},[109,148622,13608],{"class":126},[109,148624,2349],{"class":133},[109,148626,13608],{"class":126},[109,148628,2394],{"class":133},[109,148630,13608],{"class":126},[109,148632,148487],{"class":133},[109,148634,13608],{"class":126},[109,148636,148492],{"class":133},[109,148638,5994],{"class":126},[109,148640,148641],{"class":111,"line":185},[109,148642,148643],{"class":126},"line.set_global_opts(\n",[109,148645,148646,148649,148651,148654,148656,148658,148661],{"class":111,"line":201},[109,148647,148648],{"class":6553},"    title_opts",[109,148650,130],{"class":122},[109,148652,148653],{"class":126},"opts.TitleOpts(",[109,148655,52582],{"class":6553},[109,148657,130],{"class":122},[109,148659,148660],{"class":278},"\"一周销售额\"",[109,148662,39222],{"class":126},[109,148664,148665,148668,148670,148673,148675,148677,148680],{"class":111,"line":206},[109,148666,148667],{"class":6553},"    xaxis_opts",[109,148669,130],{"class":122},[109,148671,148672],{"class":126},"opts.AxisOpts(",[109,148674,80985],{"class":6553},[109,148676,130],{"class":122},[109,148678,148679],{"class":278},"\"日期\"",[109,148681,39222],{"class":126},[109,148683,148684,148687,148689,148691,148693,148695,148698],{"class":111,"line":218},[109,148685,148686],{"class":6553},"    yaxis_opts",[109,148688,130],{"class":122},[109,148690,148672],{"class":126},[109,148692,80985],{"class":6553},[109,148694,130],{"class":122},[109,148696,148697],{"class":278},"\"金额\"",[109,148699,39222],{"class":126},[109,148701,148702,148705,148707,148710,148713,148715,148718],{"class":111,"line":223},[109,148703,148704],{"class":6553},"    tooltip_opts",[109,148706,130],{"class":122},[109,148708,148709],{"class":126},"opts.TooltipOpts(",[109,148711,148712],{"class":6553},"trigger",[109,148714,130],{"class":122},[109,148716,148717],{"class":278},"\"axis\"",[109,148719,39222],{"class":126},[109,148721,148722],{"class":111,"line":229},[109,148723,1330],{"class":126},[109,148725,148726,148728,148730],{"class":111,"line":244},[109,148727,148499],{"class":126},[109,148729,148502],{"class":278},[109,148731,1330],{"class":126},[19,148733,148734],{},"常见全局配置：",[1677,148736,148737,148746],{},[1680,148738,148739],{},[1683,148740,148741,148744],{},[1686,148742,148743],{},"配置",[1686,148745,103871],{},[1723,148747,148748,148758,148768,148778,148788,148798],{},[1683,148749,148750,148755],{},[1728,148751,148752],{},[106,148753,148754],{},"TitleOpts",[1728,148756,148757],{},"标题",[1683,148759,148760,148765],{},[1728,148761,148762],{},[106,148763,148764],{},"LegendOpts",[1728,148766,148767],{},"图例",[1683,148769,148770,148775],{},[1728,148771,148772],{},[106,148773,148774],{},"TooltipOpts",[1728,148776,148777],{},"提示框",[1683,148779,148780,148785],{},[1728,148781,148782],{},[106,148783,148784],{},"AxisOpts",[1728,148786,148787],{},"坐标轴",[1683,148789,148790,148795],{},[1728,148791,148792],{},[106,148793,148794],{},"VisualMapOpts",[1728,148796,148797],{},"视觉映射",[1683,148799,148800,148805],{},[1728,148801,148802],{},[106,148803,148804],{},"DataZoomOpts",[1728,148806,148807],{},"区域缩放",[14,148809,148811],{"id":148810},"_106-系列配置","10.6 系列配置",[19,148813,148814],{},"系列配置作用于某一组数据。",[99,148816,148818],{"className":31553,"code":148817,"language":31555,"meta":104,"style":104},"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",[106,148819,148820,148825,148836,148865,148876,148895],{"__ignoreMap":104},[109,148821,148822],{"class":111,"line":112},[109,148823,148824],{"class":126},"line.add_yaxis(\n",[109,148826,148827,148830,148832,148834],{"class":111,"line":119},[109,148828,148829],{"class":6553},"    series_name",[109,148831,130],{"class":122},[109,148833,148470],{"class":278},[109,148835,32641],{"class":126},[109,148837,148838,148841,148843,148845,148847,148849,148851,148853,148855,148857,148859,148861,148863],{"class":111,"line":140},[109,148839,148840],{"class":6553},"    y_axis",[109,148842,130],{"class":122},[109,148844,1289],{"class":126},[109,148846,1351],{"class":133},[109,148848,13608],{"class":126},[109,148850,2349],{"class":133},[109,148852,13608],{"class":126},[109,148854,2394],{"class":133},[109,148856,13608],{"class":126},[109,148858,148487],{"class":133},[109,148860,13608],{"class":126},[109,148862,148492],{"class":133},[109,148864,89011],{"class":126},[109,148866,148867,148870,148872,148874],{"class":111,"line":154},[109,148868,148869],{"class":6553},"    is_smooth",[109,148871,130],{"class":122},[109,148873,32651],{"class":133},[109,148875,32641],{"class":126},[109,148877,148878,148881,148883,148886,148889,148891,148893],{"class":111,"line":161},[109,148879,148880],{"class":6553},"    label_opts",[109,148882,130],{"class":122},[109,148884,148885],{"class":126},"opts.LabelOpts(",[109,148887,148888],{"class":6553},"is_show",[109,148890,130],{"class":122},[109,148892,32651],{"class":133},[109,148894,39222],{"class":126},[109,148896,148897],{"class":111,"line":167},[109,148898,1330],{"class":126},[19,148900,148901],{},"常用参数：",[765,148903,148904,148910,148916,148922,148928],{},[30,148905,148906,148909],{},[106,148907,148908],{},"series_name","：系列名称。",[30,148911,148912,148915],{},[106,148913,148914],{},"y_axis","：y 轴数据。",[30,148917,148918,148921],{},[106,148919,148920],{},"is_smooth","：是否平滑曲线。",[30,148923,148924,148927],{},[106,148925,148926],{},"label_opts","：标签配置。",[30,148929,148930,148933],{},[106,148931,148932],{},"symbol_size","：标记点大小。",[14,148935,148937],{"id":148936},"_107-多条折线","10.7 多条折线",[99,148939,148941],{"className":31553,"code":148940,"language":31555,"meta":104,"style":104},"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",[106,148942,148943,148957,148967,148971,149000,149004,149012,149017,149055,149092,149096,149113,149129,149133],{"__ignoreMap":104},[109,148944,148945,148947,148949,148951,148953,148955],{"class":111,"line":112},[109,148946,31912],{"class":122},[109,148948,148554],{"class":126},[109,148950,31567],{"class":122},[109,148952,148559],{"class":126},[109,148954,32558],{"class":122},[109,148956,148564],{"class":126},[109,148958,148959,148961,148963,148965],{"class":111,"line":119},[109,148960,31912],{"class":122},[109,148962,148413],{"class":126},[109,148964,31567],{"class":122},[109,148966,148418],{"class":126},[109,148968,148969],{"class":111,"line":140},[109,148970,158],{"emptyLinePlaceholder":157},[109,148972,148973,148976,148978,148980,148982,148984,148986,148988,148990,148992,148994,148996,148998],{"class":111,"line":154},[109,148974,148975],{"class":126},"dates ",[109,148977,130],{"class":122},[109,148979,53401],{"class":126},[109,148981,148440],{"class":278},[109,148983,13608],{"class":126},[109,148985,148445],{"class":278},[109,148987,13608],{"class":126},[109,148989,148450],{"class":278},[109,148991,13608],{"class":126},[109,148993,148455],{"class":278},[109,148995,13608],{"class":126},[109,148997,148460],{"class":278},[109,148999,34421],{"class":126},[109,149001,149002],{"class":111,"line":161},[109,149003,158],{"emptyLinePlaceholder":157},[109,149005,149006,149008,149010],{"class":111,"line":167},[109,149007,148427],{"class":126},[109,149009,130],{"class":122},[109,149011,148432],{"class":126},[109,149013,149014],{"class":111,"line":185},[109,149015,149016],{"class":126},"line.add_xaxis(dates)\n",[109,149018,149019,149021,149024,149026,149028,149030,149033,149035,149037,149039,149041,149043,149045,149047,149049,149051,149053],{"class":111,"line":201},[109,149020,148467],{"class":126},[109,149022,149023],{"class":278},"\"线上销售\"",[109,149025,78693],{"class":126},[109,149027,1351],{"class":133},[109,149029,13608],{"class":126},[109,149031,149032],{"class":133},"130",[109,149034,13608],{"class":126},[109,149036,2349],{"class":133},[109,149038,13608],{"class":126},[109,149040,22221],{"class":133},[109,149042,13608],{"class":126},[109,149044,3098],{"class":133},[109,149046,113377],{"class":126},[109,149048,148920],{"class":6553},[109,149050,130],{"class":122},[109,149052,32651],{"class":133},[109,149054,1330],{"class":126},[109,149056,149057,149059,149062,149064,149066,149068,149070,149072,149074,149076,149078,149080,149082,149084,149086,149088,149090],{"class":111,"line":206},[109,149058,148467],{"class":126},[109,149060,149061],{"class":278},"\"线下销售\"",[109,149063,78693],{"class":126},[109,149065,2144],{"class":133},[109,149067,13608],{"class":126},[109,149069,2394],{"class":133},[109,149071,13608],{"class":126},[109,149073,1351],{"class":133},[109,149075,13608],{"class":126},[109,149077,2349],{"class":133},[109,149079,13608],{"class":126},[109,149081,148487],{"class":133},[109,149083,113377],{"class":126},[109,149085,148920],{"class":6553},[109,149087,130],{"class":122},[109,149089,32651],{"class":133},[109,149091,1330],{"class":126},[109,149093,149094],{"class":111,"line":218},[109,149095,148643],{"class":126},[109,149097,149098,149100,149102,149104,149106,149108,149111],{"class":111,"line":223},[109,149099,148648],{"class":6553},[109,149101,130],{"class":122},[109,149103,148653],{"class":126},[109,149105,52582],{"class":6553},[109,149107,130],{"class":122},[109,149109,149110],{"class":278},"\"线上线下销售趋势\"",[109,149112,39222],{"class":126},[109,149114,149115,149117,149119,149121,149123,149125,149127],{"class":111,"line":229},[109,149116,148704],{"class":6553},[109,149118,130],{"class":122},[109,149120,148709],{"class":126},[109,149122,148712],{"class":6553},[109,149124,130],{"class":122},[109,149126,148717],{"class":278},[109,149128,39222],{"class":126},[109,149130,149131],{"class":111,"line":244},[109,149132,1330],{"class":126},[109,149134,149135,149137,149140],{"class":111,"line":258},[109,149136,148499],{"class":126},[109,149138,149139],{"class":278},"\"sales.html\"",[109,149141,1330],{"class":126},[19,149143,149144],{},"多条折线适合比较不同指标或不同地区。",[14,149146,149148],{"id":149147},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149150,149151,149152,25793],{},"假设 ",[106,149153,149154],{},"sales.json",[99,149156,149158],{"className":148220,"code":149157,"language":146967,"meta":104,"style":104},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[106,149159,149160,149165,149197,149225,149253],{"__ignoreMap":104},[109,149161,149162],{"class":111,"line":112},[109,149163,149164],{"class":126},"[\n",[109,149166,149167,149170,149173,149175,149177,149179,149182,149184,149186,149188,149191,149193,149195],{"class":111,"line":119},[109,149168,149169],{"class":126},"  {",[109,149171,149172],{"class":133},"\"date\"",[109,149174,52612],{"class":126},[109,149176,148440],{"class":278},[109,149178,13608],{"class":126},[109,149180,149181],{"class":133},"\"online\"",[109,149183,52612],{"class":126},[109,149185,1351],{"class":133},[109,149187,13608],{"class":126},[109,149189,149190],{"class":133},"\"offline\"",[109,149192,52612],{"class":126},[109,149194,2144],{"class":133},[109,149196,6267],{"class":126},[109,149198,149199,149201,149203,149205,149207,149209,149211,149213,149215,149217,149219,149221,149223],{"class":111,"line":140},[109,149200,149169],{"class":126},[109,149202,149172],{"class":133},[109,149204,52612],{"class":126},[109,149206,148445],{"class":278},[109,149208,13608],{"class":126},[109,149210,149181],{"class":133},[109,149212,52612],{"class":126},[109,149214,149032],{"class":133},[109,149216,13608],{"class":126},[109,149218,149190],{"class":133},[109,149220,52612],{"class":126},[109,149222,2394],{"class":133},[109,149224,6267],{"class":126},[109,149226,149227,149229,149231,149233,149235,149237,149239,149241,149243,149245,149247,149249,149251],{"class":111,"line":154},[109,149228,149169],{"class":126},[109,149230,149172],{"class":133},[109,149232,52612],{"class":126},[109,149234,148450],{"class":278},[109,149236,13608],{"class":126},[109,149238,149181],{"class":133},[109,149240,52612],{"class":126},[109,149242,2349],{"class":133},[109,149244,13608],{"class":126},[109,149246,149190],{"class":133},[109,149248,52612],{"class":126},[109,149250,1351],{"class":133},[109,149252,742],{"class":126},[109,149254,149255],{"class":111,"line":161},[109,149256,34421],{"class":126},[19,149258,149259],{},"读取并绘图：",[99,149261,149263],{"className":31553,"code":149262,"language":31555,"meta":104,"style":104},"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",[106,149264,149265,149271,149285,149295,149299,149331,149344,149348,149356,149365,149374,149378,149390,149399,149408,149417,149421,149429,149433,149450,149467,149471,149488,149504,149508],{"__ignoreMap":104},[109,149266,149267,149269],{"class":111,"line":112},[109,149268,31567],{"class":122},[109,149270,148266],{"class":126},[109,149272,149273,149275,149277,149279,149281,149283],{"class":111,"line":119},[109,149274,31912],{"class":122},[109,149276,148554],{"class":126},[109,149278,31567],{"class":122},[109,149280,148559],{"class":126},[109,149282,32558],{"class":122},[109,149284,148564],{"class":126},[109,149286,149287,149289,149291,149293],{"class":111,"line":140},[109,149288,31912],{"class":122},[109,149290,148413],{"class":126},[109,149292,31567],{"class":122},[109,149294,148418],{"class":126},[109,149296,149297],{"class":111,"line":154},[109,149298,158],{"emptyLinePlaceholder":157},[109,149300,149301,149303,149305,149307,149310,149312,149314,149316,149318,149320,149322,149324,149326,149329],{"class":111,"line":161},[109,149302,109008],{"class":122},[109,149304,147966],{"class":133},[109,149306,714],{"class":126},[109,149308,149309],{"class":278},"\"sales.json\"",[109,149311,13608],{"class":126},[109,149313,147976],{"class":278},[109,149315,13608],{"class":126},[109,149317,147981],{"class":6553},[109,149319,130],{"class":122},[109,149321,147986],{"class":278},[109,149323,14887],{"class":126},[109,149325,32558],{"class":122},[109,149327,149328],{"class":6553}," file",[109,149330,5082],{"class":126},[109,149332,149333,149335,149337,149340,149342],{"class":111,"line":167},[109,149334,102596],{"class":126},[109,149336,130],{"class":122},[109,149338,149339],{"class":126}," json.load(",[109,149341,46529],{"class":6553},[109,149343,1330],{"class":126},[109,149345,149346],{"class":111,"line":185},[109,149347,158],{"emptyLinePlaceholder":157},[109,149349,149350,149352,149354],{"class":111,"line":201},[109,149351,148975],{"class":126},[109,149353,130],{"class":122},[109,149355,53013],{"class":126},[109,149357,149358,149361,149363],{"class":111,"line":206},[109,149359,149360],{"class":126},"online_sales ",[109,149362,130],{"class":122},[109,149364,53013],{"class":126},[109,149366,149367,149370,149372],{"class":111,"line":218},[109,149368,149369],{"class":126},"offline_sales ",[109,149371,130],{"class":122},[109,149373,53013],{"class":126},[109,149375,149376],{"class":111,"line":223},[109,149377,158],{"emptyLinePlaceholder":157},[109,149379,149380,149382,149385,149387],{"class":111,"line":229},[109,149381,4372],{"class":122},[109,149383,149384],{"class":126}," item ",[109,149386,27218],{"class":122},[109,149388,149389],{"class":126}," data:\n",[109,149391,149392,149395,149397],{"class":111,"line":244},[109,149393,149394],{"class":126},"    dates.append(item[",[109,149396,149172],{"class":278},[109,149398,5994],{"class":126},[109,149400,149401,149404,149406],{"class":111,"line":258},[109,149402,149403],{"class":126},"    online_sales.append(item[",[109,149405,149181],{"class":278},[109,149407,5994],{"class":126},[109,149409,149410,149413,149415],{"class":111,"line":263},[109,149411,149412],{"class":126},"    offline_sales.append(item[",[109,149414,149190],{"class":278},[109,149416,5994],{"class":126},[109,149418,149419],{"class":111,"line":269},[109,149420,158],{"emptyLinePlaceholder":157},[109,149422,149423,149425,149427],{"class":111,"line":304},[109,149424,148427],{"class":126},[109,149426,130],{"class":122},[109,149428,148432],{"class":126},[109,149430,149431],{"class":111,"line":331},[109,149432,149016],{"class":126},[109,149434,149435,149437,149439,149442,149444,149446,149448],{"class":111,"line":336},[109,149436,148467],{"class":126},[109,149438,149023],{"class":278},[109,149440,149441],{"class":126},", online_sales, ",[109,149443,148920],{"class":6553},[109,149445,130],{"class":122},[109,149447,32651],{"class":133},[109,149449,1330],{"class":126},[109,149451,149452,149454,149456,149459,149461,149463,149465],{"class":111,"line":364},[109,149453,148467],{"class":126},[109,149455,149061],{"class":278},[109,149457,149458],{"class":126},", offline_sales, ",[109,149460,148920],{"class":6553},[109,149462,130],{"class":122},[109,149464,32651],{"class":133},[109,149466,1330],{"class":126},[109,149468,149469],{"class":111,"line":391},[109,149470,148643],{"class":126},[109,149472,149473,149475,149477,149479,149481,149483,149486],{"class":111,"line":396},[109,149474,148648],{"class":6553},[109,149476,130],{"class":122},[109,149478,148653],{"class":126},[109,149480,52582],{"class":6553},[109,149482,130],{"class":122},[109,149484,149485],{"class":278},"\"销售趋势\"",[109,149487,39222],{"class":126},[109,149489,149490,149492,149494,149496,149498,149500,149502],{"class":111,"line":402},[109,149491,148704],{"class":6553},[109,149493,130],{"class":122},[109,149495,148709],{"class":126},[109,149497,148712],{"class":6553},[109,149499,130],{"class":122},[109,149501,148717],{"class":278},[109,149503,39222],{"class":126},[109,149505,149506],{"class":111,"line":419},[109,149507,1330],{"class":126},[109,149509,149510,149512,149514],{"class":111,"line":435},[109,149511,148499],{"class":126},[109,149513,149139],{"class":278},[109,149515,1330],{"class":126},[14,149517,149519],{"id":149518},"_109-数据清洗","10.9 数据清洗",[19,149521,149522],{},"真实数据经常不整齐，需要清洗。",[19,149524,149525],{},"常见问题：",[765,149527,149528,149531,149534,149537],{},[30,149529,149530],{},"数字是字符串。",[30,149532,149533],{},"字段缺失。",[30,149535,149536],{},"空值。",[30,149538,149539],{},"日期格式不统一。",[19,149541,16308],{},[99,149543,149545],{"className":31553,"code":149544,"language":31555,"meta":104,"style":104},"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",[106,149546,149547,149556,149579,149599,149620,149624,149628,149636,149645,149649,149660,149674,149683,149688,149692,149700,149710,149714,149721],{"__ignoreMap":104},[109,149548,149549,149552,149554],{"class":111,"line":112},[109,149550,149551],{"class":126},"raw_data ",[109,149553,130],{"class":122},[109,149555,56622],{"class":126},[109,149557,149558,149561,149563,149565,149567,149569,149572,149574,149577],{"class":111,"line":119},[109,149559,149560],{"class":126},"    {",[109,149562,149172],{"class":278},[109,149564,52612],{"class":126},[109,149566,148440],{"class":278},[109,149568,13608],{"class":126},[109,149570,149571],{"class":278},"\"sales\"",[109,149573,52612],{"class":126},[109,149575,149576],{"class":278},"\"100\"",[109,149578,6267],{"class":126},[109,149580,149581,149583,149585,149587,149589,149591,149593,149595,149597],{"class":111,"line":140},[109,149582,149560],{"class":126},[109,149584,149172],{"class":278},[109,149586,52612],{"class":126},[109,149588,148445],{"class":278},[109,149590,13608],{"class":126},[109,149592,149571],{"class":278},[109,149594,52612],{"class":126},[109,149596,8978],{"class":278},[109,149598,6267],{"class":126},[109,149600,149601,149603,149605,149607,149609,149611,149613,149615,149618],{"class":111,"line":154},[109,149602,149560],{"class":126},[109,149604,149172],{"class":278},[109,149606,52612],{"class":126},[109,149608,148450],{"class":278},[109,149610,13608],{"class":126},[109,149612,149571],{"class":278},[109,149614,52612],{"class":126},[109,149616,149617],{"class":278},"\"120\"",[109,149619,6267],{"class":126},[109,149621,149622],{"class":111,"line":161},[109,149623,34421],{"class":126},[109,149625,149626],{"class":111,"line":167},[109,149627,158],{"emptyLinePlaceholder":157},[109,149629,149630,149632,149634],{"class":111,"line":185},[109,149631,148975],{"class":126},[109,149633,130],{"class":122},[109,149635,53013],{"class":126},[109,149637,149638,149641,149643],{"class":111,"line":201},[109,149639,149640],{"class":126},"sales ",[109,149642,130],{"class":122},[109,149644,53013],{"class":126},[109,149646,149647],{"class":111,"line":206},[109,149648,158],{"emptyLinePlaceholder":157},[109,149650,149651,149653,149655,149657],{"class":111,"line":218},[109,149652,4372],{"class":122},[109,149654,149384],{"class":126},[109,149656,27218],{"class":122},[109,149658,149659],{"class":126}," raw_data:\n",[109,149661,149662,149665,149667,149670,149672],{"class":111,"line":223},[109,149663,149664],{"class":126},"    value ",[109,149666,130],{"class":122},[109,149668,149669],{"class":126}," item.get(",[109,149671,149571],{"class":278},[109,149673,1330],{"class":126},[109,149675,149676,149678,149680],{"class":111,"line":229},[109,149677,4446],{"class":122},[109,149679,40105],{"class":122},[109,149681,149682],{"class":126}," value:\n",[109,149684,149685],{"class":111,"line":244},[109,149686,149687],{"class":122},"        continue\n",[109,149689,149690],{"class":111,"line":258},[109,149691,158],{"emptyLinePlaceholder":157},[109,149693,149694,149696,149698],{"class":111,"line":263},[109,149695,149394],{"class":126},[109,149697,149172],{"class":278},[109,149699,5994],{"class":126},[109,149701,149702,149705,149707],{"class":111,"line":269},[109,149703,149704],{"class":126},"    sales.append(",[109,149706,123],{"class":133},[109,149708,149709],{"class":126},"(value))\n",[109,149711,149712],{"class":111,"line":304},[109,149713,158],{"emptyLinePlaceholder":157},[109,149715,149716,149718],{"class":111,"line":331},[109,149717,31590],{"class":133},[109,149719,149720],{"class":126},"(dates)\n",[109,149722,149723,149725],{"class":111,"line":336},[109,149724,31590],{"class":133},[109,149726,149727],{"class":126},"(sales)\n",[14,149729,149731],{"id":149730},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[99,149733,149735],{"className":31553,"code":149734,"language":31555,"meta":104,"style":104},"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",[106,149736,149737,149751,149761,149765,149773,149794,149816,149838,149860,149882,149886,149890,149912,149933,149937,149945,149949,149953,149963,149972,149982,149998,150002,150006,150023,150039,150055,150071,150081,150085],{"__ignoreMap":104},[109,149738,149739,149741,149743,149745,149747,149749],{"class":111,"line":112},[109,149740,31912],{"class":122},[109,149742,148554],{"class":126},[109,149744,31567],{"class":122},[109,149746,148559],{"class":126},[109,149748,32558],{"class":122},[109,149750,148564],{"class":126},[109,149752,149753,149755,149757,149759],{"class":111,"line":119},[109,149754,31912],{"class":122},[109,149756,148413],{"class":126},[109,149758,31567],{"class":122},[109,149760,148418],{"class":126},[109,149762,149763],{"class":111,"line":140},[109,149764,158],{"emptyLinePlaceholder":157},[109,149766,149767,149769,149771],{"class":111,"line":154},[109,149768,149640],{"class":126},[109,149770,130],{"class":122},[109,149772,56622],{"class":126},[109,149774,149775,149777,149779,149781,149784,149786,149788,149790,149792],{"class":111,"line":161},[109,149776,149560],{"class":126},[109,149778,149172],{"class":278},[109,149780,52612],{"class":126},[109,149782,149783],{"class":278},"\"2024-10-01\"",[109,149785,13608],{"class":126},[109,149787,85259],{"class":278},[109,149789,52612],{"class":126},[109,149791,93198],{"class":133},[109,149793,6267],{"class":126},[109,149795,149796,149798,149800,149802,149805,149807,149809,149811,149814],{"class":111,"line":167},[109,149797,149560],{"class":126},[109,149799,149172],{"class":278},[109,149801,52612],{"class":126},[109,149803,149804],{"class":278},"\"2024-10-02\"",[109,149806,13608],{"class":126},[109,149808,85259],{"class":278},[109,149810,52612],{"class":126},[109,149812,149813],{"class":133},"1800",[109,149815,6267],{"class":126},[109,149817,149818,149820,149822,149824,149827,149829,149831,149833,149836],{"class":111,"line":185},[109,149819,149560],{"class":126},[109,149821,149172],{"class":278},[109,149823,52612],{"class":126},[109,149825,149826],{"class":278},"\"2024-10-03\"",[109,149828,13608],{"class":126},[109,149830,85259],{"class":278},[109,149832,52612],{"class":126},[109,149834,149835],{"class":133},"1500",[109,149837,6267],{"class":126},[109,149839,149840,149842,149844,149846,149849,149851,149853,149855,149858],{"class":111,"line":201},[109,149841,149560],{"class":126},[109,149843,149172],{"class":278},[109,149845,52612],{"class":126},[109,149847,149848],{"class":278},"\"2024-10-04\"",[109,149850,13608],{"class":126},[109,149852,85259],{"class":278},[109,149854,52612],{"class":126},[109,149856,149857],{"class":133},"2100",[109,149859,6267],{"class":126},[109,149861,149862,149864,149866,149868,149871,149873,149875,149877,149880],{"class":111,"line":206},[109,149863,149560],{"class":126},[109,149865,149172],{"class":278},[109,149867,52612],{"class":126},[109,149869,149870],{"class":278},"\"2024-10-05\"",[109,149872,13608],{"class":126},[109,149874,85259],{"class":278},[109,149876,52612],{"class":126},[109,149878,149879],{"class":133},"2600",[109,149881,6267],{"class":126},[109,149883,149884],{"class":111,"line":218},[109,149885,34421],{"class":126},[109,149887,149888],{"class":111,"line":223},[109,149889,158],{"emptyLinePlaceholder":157},[109,149891,149892,149894,149896,149899,149901,149903,149905,149907,149909],{"class":111,"line":229},[109,149893,148975],{"class":126},[109,149895,130],{"class":122},[109,149897,149898],{"class":126}," [item[",[109,149900,149172],{"class":278},[109,149902,5780],{"class":126},[109,149904,4372],{"class":122},[109,149906,149384],{"class":126},[109,149908,27218],{"class":122},[109,149910,149911],{"class":126}," sales]\n",[109,149913,149914,149917,149919,149921,149923,149925,149927,149929,149931],{"class":111,"line":244},[109,149915,149916],{"class":126},"amounts ",[109,149918,130],{"class":122},[109,149920,149898],{"class":126},[109,149922,85259],{"class":278},[109,149924,5780],{"class":126},[109,149926,4372],{"class":122},[109,149928,149384],{"class":126},[109,149930,27218],{"class":122},[109,149932,149911],{"class":126},[109,149934,149935],{"class":111,"line":258},[109,149936,158],{"emptyLinePlaceholder":157},[109,149938,149939,149941,149943],{"class":111,"line":263},[109,149940,148427],{"class":126},[109,149942,130],{"class":122},[109,149944,148432],{"class":126},[109,149946,149947],{"class":111,"line":269},[109,149948,149016],{"class":126},[109,149950,149951],{"class":111,"line":304},[109,149952,148824],{"class":126},[109,149954,149955,149957,149959,149961],{"class":111,"line":331},[109,149956,148829],{"class":6553},[109,149958,130],{"class":122},[109,149960,148470],{"class":278},[109,149962,32641],{"class":126},[109,149964,149965,149967,149969],{"class":111,"line":336},[109,149966,148840],{"class":6553},[109,149968,130],{"class":122},[109,149970,149971],{"class":126},"amounts,\n",[109,149973,149974,149976,149978,149980],{"class":111,"line":364},[109,149975,148869],{"class":6553},[109,149977,130],{"class":122},[109,149979,32651],{"class":133},[109,149981,32641],{"class":126},[109,149983,149984,149986,149988,149990,149992,149994,149996],{"class":111,"line":391},[109,149985,148880],{"class":6553},[109,149987,130],{"class":122},[109,149989,148885],{"class":126},[109,149991,148888],{"class":6553},[109,149993,130],{"class":122},[109,149995,32651],{"class":133},[109,149997,39222],{"class":126},[109,149999,150000],{"class":111,"line":396},[109,150001,1330],{"class":126},[109,150003,150004],{"class":111,"line":402},[109,150005,148643],{"class":126},[109,150007,150008,150010,150012,150014,150016,150018,150021],{"class":111,"line":419},[109,150009,148648],{"class":6553},[109,150011,130],{"class":122},[109,150013,148653],{"class":126},[109,150015,52582],{"class":6553},[109,150017,130],{"class":122},[109,150019,150020],{"class":278},"\"每日销售额\"",[109,150022,39222],{"class":126},[109,150024,150025,150027,150029,150031,150033,150035,150037],{"class":111,"line":435},[109,150026,148667],{"class":6553},[109,150028,130],{"class":122},[109,150030,148672],{"class":126},[109,150032,80985],{"class":6553},[109,150034,130],{"class":122},[109,150036,148679],{"class":278},[109,150038,39222],{"class":126},[109,150040,150041,150043,150045,150047,150049,150051,150053],{"class":111,"line":440},[109,150042,148686],{"class":6553},[109,150044,130],{"class":122},[109,150046,148672],{"class":126},[109,150048,80985],{"class":6553},[109,150050,130],{"class":122},[109,150052,148697],{"class":278},[109,150054,39222],{"class":126},[109,150056,150057,150059,150061,150063,150065,150067,150069],{"class":111,"line":467},[109,150058,148704],{"class":6553},[109,150060,130],{"class":122},[109,150062,148709],{"class":126},[109,150064,148712],{"class":6553},[109,150066,130],{"class":122},[109,150068,148717],{"class":278},[109,150070,39222],{"class":126},[109,150072,150073,150076,150078],{"class":111,"line":494},[109,150074,150075],{"class":6553},"    datazoom_opts",[109,150077,130],{"class":122},[109,150079,150080],{"class":126},"[opts.DataZoomOpts()],\n",[109,150082,150083],{"class":111,"line":499},[109,150084,1330],{"class":126},[109,150086,150087,150089,150092],{"class":111,"line":526},[109,150088,148499],{"class":126},[109,150090,150091],{"class":278},"\"daily_sales.html\"",[109,150093,1330],{"class":126},[19,150095,150096,150099],{},[106,150097,150098],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150101,150103],{"id":150102},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150105,150106],{},"如果数据结构如下：",[99,150108,150110],{"className":31553,"code":150109,"language":31555,"meta":104,"style":104},"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",[106,150111,150112,150120,150128,150150,150171,150176,150183,150203,150223,150227],{"__ignoreMap":104},[109,150113,150114,150116,150118],{"class":111,"line":112},[109,150115,102833],{"class":126},[109,150117,130],{"class":122},[109,150119,16745],{"class":126},[109,150121,150122,150125],{"class":111,"line":119},[109,150123,150124],{"class":278},"    \"北京\"",[109,150126,150127],{"class":126},": [\n",[109,150129,150130,150132,150134,150136,150139,150141,150144,150146,150148],{"class":111,"line":140},[109,150131,6254],{"class":126},[109,150133,149172],{"class":278},[109,150135,52612],{"class":126},[109,150137,150138],{"class":278},"\"2024-01-01\"",[109,150140,13608],{"class":126},[109,150142,150143],{"class":278},"\"confirm\"",[109,150145,52612],{"class":126},[109,150147,1008],{"class":133},[109,150149,6267],{"class":126},[109,150151,150152,150154,150156,150158,150161,150163,150165,150167,150169],{"class":111,"line":154},[109,150153,6254],{"class":126},[109,150155,149172],{"class":278},[109,150157,52612],{"class":126},[109,150159,150160],{"class":278},"\"2024-01-02\"",[109,150162,13608],{"class":126},[109,150164,150143],{"class":278},[109,150166,52612],{"class":126},[109,150168,2030],{"class":133},[109,150170,6267],{"class":126},[109,150172,150173],{"class":111,"line":161},[109,150174,150175],{"class":126},"    ],\n",[109,150177,150178,150181],{"class":111,"line":167},[109,150179,150180],{"class":278},"    \"上海\"",[109,150182,150127],{"class":126},[109,150184,150185,150187,150189,150191,150193,150195,150197,150199,150201],{"class":111,"line":185},[109,150186,6254],{"class":126},[109,150188,149172],{"class":278},[109,150190,52612],{"class":126},[109,150192,150138],{"class":278},[109,150194,13608],{"class":126},[109,150196,150143],{"class":278},[109,150198,52612],{"class":126},[109,150200,1931],{"class":133},[109,150202,6267],{"class":126},[109,150204,150205,150207,150209,150211,150213,150215,150217,150219,150221],{"class":111,"line":201},[109,150206,6254],{"class":126},[109,150208,149172],{"class":278},[109,150210,52612],{"class":126},[109,150212,150160],{"class":278},[109,150214,13608],{"class":126},[109,150216,150143],{"class":278},[109,150218,52612],{"class":126},[109,150220,2055],{"class":133},[109,150222,6267],{"class":126},[109,150224,150225],{"class":111,"line":206},[109,150226,150175],{"class":126},[109,150228,150229],{"class":111,"line":218},[109,150230,742],{"class":126},[19,150232,150233],{},"绘制多地区趋势：",[99,150235,150237],{"className":31553,"code":150236,"language":31555,"meta":104,"style":104},"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",[106,150238,150239,150253,150263,150267,150292,150296,150304,150308,150312,150324,150346,150359,150363,150367,150384,150400,150404],{"__ignoreMap":104},[109,150240,150241,150243,150245,150247,150249,150251],{"class":111,"line":112},[109,150242,31912],{"class":122},[109,150244,148554],{"class":126},[109,150246,31567],{"class":122},[109,150248,148559],{"class":126},[109,150250,32558],{"class":122},[109,150252,148564],{"class":126},[109,150254,150255,150257,150259,150261],{"class":111,"line":119},[109,150256,31912],{"class":122},[109,150258,148413],{"class":126},[109,150260,31567],{"class":122},[109,150262,148418],{"class":126},[109,150264,150265],{"class":111,"line":140},[109,150266,158],{"emptyLinePlaceholder":157},[109,150268,150269,150271,150273,150275,150277,150279,150281,150283,150285,150288,150290],{"class":111,"line":154},[109,150270,148975],{"class":126},[109,150272,130],{"class":122},[109,150274,149898],{"class":126},[109,150276,149172],{"class":278},[109,150278,5780],{"class":126},[109,150280,4372],{"class":122},[109,150282,149384],{"class":126},[109,150284,27218],{"class":122},[109,150286,150287],{"class":126}," data[",[109,150289,70444],{"class":278},[109,150291,78702],{"class":126},[109,150293,150294],{"class":111,"line":161},[109,150295,158],{"emptyLinePlaceholder":157},[109,150297,150298,150300,150302],{"class":111,"line":167},[109,150299,148427],{"class":126},[109,150301,130],{"class":122},[109,150303,148432],{"class":126},[109,150305,150306],{"class":111,"line":185},[109,150307,149016],{"class":126},[109,150309,150310],{"class":111,"line":201},[109,150311,158],{"emptyLinePlaceholder":157},[109,150313,150314,150316,150319,150321],{"class":111,"line":206},[109,150315,4372],{"class":122},[109,150317,150318],{"class":126}," city, records ",[109,150320,27218],{"class":122},[109,150322,150323],{"class":126}," data.items():\n",[109,150325,150326,150329,150331,150333,150335,150337,150339,150341,150343],{"class":111,"line":218},[109,150327,150328],{"class":126},"    values ",[109,150330,130],{"class":122},[109,150332,149898],{"class":126},[109,150334,150143],{"class":278},[109,150336,5780],{"class":126},[109,150338,4372],{"class":122},[109,150340,149384],{"class":126},[109,150342,27218],{"class":122},[109,150344,150345],{"class":126}," records]\n",[109,150347,150348,150351,150353,150355,150357],{"class":111,"line":223},[109,150349,150350],{"class":126},"    line.add_yaxis(city, values, ",[109,150352,148920],{"class":6553},[109,150354,130],{"class":122},[109,150356,32651],{"class":133},[109,150358,1330],{"class":126},[109,150360,150361],{"class":111,"line":229},[109,150362,158],{"emptyLinePlaceholder":157},[109,150364,150365],{"class":111,"line":244},[109,150366,148643],{"class":126},[109,150368,150369,150371,150373,150375,150377,150379,150382],{"class":111,"line":258},[109,150370,148648],{"class":6553},[109,150372,130],{"class":122},[109,150374,148653],{"class":126},[109,150376,52582],{"class":6553},[109,150378,130],{"class":122},[109,150380,150381],{"class":278},"\"多地区趋势图\"",[109,150383,39222],{"class":126},[109,150385,150386,150388,150390,150392,150394,150396,150398],{"class":111,"line":263},[109,150387,148704],{"class":6553},[109,150389,130],{"class":122},[109,150391,148709],{"class":126},[109,150393,148712],{"class":6553},[109,150395,130],{"class":122},[109,150397,148717],{"class":278},[109,150399,39222],{"class":126},[109,150401,150402],{"class":111,"line":269},[109,150403,1330],{"class":126},[109,150405,150406,150408,150411],{"class":111,"line":304},[109,150407,148499],{"class":126},[109,150409,150410],{"class":278},"\"trend.html\"",[109,150412,1330],{"class":126},[19,150414,150415],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150417,150419],{"id":150418},"_1012-易错点","10.12 易错点",[765,150421,150422,150428,150434,150444,150450],{},[30,150423,150424,150427],{},[106,150425,150426],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[30,150429,150430,150433],{},[106,150431,150432],{},"render()"," 生成的是 HTML，不是图片。",[30,150435,150436,150437,150440,150441,29560],{},"JSON 字符串用 ",[106,150438,150439],{},"json.loads()","，JSON 文件用 ",[106,150442,150443],{},"json.load()",[30,150445,150446,150447,29560],{},"中文 JSON 保存时加 ",[106,150448,150449],{},"ensure_ascii=False",[30,150451,150452],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150454,150456],{"id":150455},"_1013-本章练习","10.13 本章练习",[765,150458,150459,150462,150465,150468,150471],{},[30,150460,150461],{},"安装 pyecharts 并生成第一个折线图。",[30,150463,150464],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[30,150466,150467],{},"绘制两条折线，对比线上和线下销售额。",[30,150469,150470],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[30,150472,150473],{},"对含有空值的销售数据进行清洗后再绘图。",[1467,150475,150476],{},"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":104,"searchDepth":119,"depth":119,"links":150478},[150479,150480,150481,150482,150483,150484,150485,150486,150487,150488,150489,150490,150491],{"id":148095,"depth":119,"text":148096},{"id":148170,"depth":119,"text":148171},{"id":148349,"depth":119,"text":148350},{"id":148400,"depth":119,"text":148401},{"id":148534,"depth":119,"text":148535},{"id":148810,"depth":119,"text":148811},{"id":148936,"depth":119,"text":148937},{"id":149147,"depth":119,"text":149148},{"id":149518,"depth":119,"text":149519},{"id":149730,"depth":119,"text":149731},{"id":150102,"depth":119,"text":150103},{"id":150418,"depth":119,"text":150419},{"id":150455,"depth":119,"text":150456},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148087,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150498,"title":150499,"body":150500,"description":24550,"extension":1476,"meta":152860,"navigation":157,"path":152861,"seo":152862,"stem":152863,"__hash__":152864},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150501,"toc":152837},[150502,150505,150509,150512,150515,150591,150594,150685,150688,150692,150695,150739,150752,150756,150759,150826,150829,150833,150836,150920,150928,150932,150937,151078,151081,151092,151098,151104,151218,151222,151225,151228,151481,151484,151488,151491,151595,151598,151602,151753,151757,151764,151877,151881,151884,151990,151993,151997,152000,152031,152034,152139,152142,152146,152150,152160,152228,152232,152239,152303,152306,152310,152316,152412,152421,152425,152749,152758,152762,152790,152794,152834],[10,150503,150499],{"id":150504},"_11-面向对象基础",[14,150506,150508],{"id":150507},"_111-什么是面向对象","11.1 什么是面向对象",[19,150510,150511],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150513,150514],{},"面向过程：",[99,150516,150518],{"className":31553,"code":150517,"language":31555,"meta":104,"style":104},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[106,150519,150520,150529,150537,150541,150551,150582,150586],{"__ignoreMap":104},[109,150521,150522,150524,150526],{"class":111,"line":112},[109,150523,147711],{"class":126},[109,150525,130],{"class":122},[109,150527,150528],{"class":278}," \"小明\"\n",[109,150530,150531,150533,150535],{"class":111,"line":119},[109,150532,147721],{"class":126},[109,150534,130],{"class":122},[109,150536,147726],{"class":133},[109,150538,150539],{"class":111,"line":140},[109,150540,158],{"emptyLinePlaceholder":157},[109,150542,150543,150545,150548],{"class":111,"line":154},[109,150544,33122],{"class":122},[109,150546,150547],{"class":211}," introduce",[109,150549,150550],{"class":126},"(name, age):\n",[109,150552,150553,150555,150557,150559,150562,150564,150566,150568,150571,150573,150575,150577,150580],{"class":111,"line":161},[109,150554,32474],{"class":133},[109,150556,714],{"class":126},[109,150558,1595],{"class":122},[109,150560,150561],{"class":278},"\"我叫",[109,150563,2427],{"class":133},[109,150565,80985],{"class":126},[109,150567,2476],{"class":133},[109,150569,150570],{"class":278},"，今年",[109,150572,2427],{"class":133},[109,150574,71396],{"class":126},[109,150576,2476],{"class":133},[109,150578,150579],{"class":278},"岁\"",[109,150581,1330],{"class":126},[109,150583,150584],{"class":111,"line":167},[109,150585,158],{"emptyLinePlaceholder":157},[109,150587,150588],{"class":111,"line":185},[109,150589,150590],{"class":126},"introduce(name, age)\n",[19,150592,150593],{},"面向对象：",[99,150595,150597],{"className":31553,"code":150596,"language":31555,"meta":104,"style":104},"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",[106,150598,150599,150607,150615,150644,150648,150652,150662,150671,150680],{"__ignoreMap":104},[109,150600,150601,150603,150605],{"class":111,"line":112},[109,150602,15867],{"class":122},[109,150604,9224],{"class":211},[109,150606,5082],{"class":126},[109,150608,150609,150611,150613],{"class":111,"line":119},[109,150610,31976],{"class":122},[109,150612,150547],{"class":211},[109,150614,31982],{"class":126},[109,150616,150617,150619,150621,150623,150625,150628,150630,150632,150634,150636,150638,150640,150642],{"class":111,"line":140},[109,150618,33626],{"class":133},[109,150620,714],{"class":126},[109,150622,1595],{"class":122},[109,150624,150561],{"class":278},[109,150626,150627],{"class":133},"{self",[109,150629,81476],{"class":126},[109,150631,2476],{"class":133},[109,150633,150570],{"class":278},[109,150635,150627],{"class":133},[109,150637,81488],{"class":126},[109,150639,2476],{"class":133},[109,150641,150579],{"class":278},[109,150643,1330],{"class":126},[109,150645,150646],{"class":111,"line":154},[109,150647,158],{"emptyLinePlaceholder":157},[109,150649,150650],{"class":111,"line":161},[109,150651,158],{"emptyLinePlaceholder":157},[109,150653,150654,150657,150659],{"class":111,"line":167},[109,150655,150656],{"class":126},"student ",[109,150658,130],{"class":122},[109,150660,150661],{"class":126}," Student()\n",[109,150663,150664,150667,150669],{"class":111,"line":185},[109,150665,150666],{"class":126},"student.name ",[109,150668,130],{"class":122},[109,150670,150528],{"class":278},[109,150672,150673,150676,150678],{"class":111,"line":201},[109,150674,150675],{"class":126},"student.age ",[109,150677,130],{"class":122},[109,150679,147726],{"class":133},[109,150681,150682],{"class":111,"line":206},[109,150683,150684],{"class":126},"student.introduce()\n",[19,150686,150687],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150689,150691],{"id":150690},"_112-类和对象","11.2 类和对象",[19,150693,150694],{},"类是模板，对象是根据模板创建出来的具体实例。",[99,150696,150698],{"className":31553,"code":150697,"language":31555,"meta":104,"style":104},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[106,150699,150700,150708,150713,150717,150721,150730],{"__ignoreMap":104},[109,150701,150702,150704,150706],{"class":111,"line":112},[109,150703,15867],{"class":122},[109,150705,9224],{"class":211},[109,150707,5082],{"class":126},[109,150709,150710],{"class":111,"line":119},[109,150711,150712],{"class":122},"    pass\n",[109,150714,150715],{"class":111,"line":140},[109,150716,158],{"emptyLinePlaceholder":157},[109,150718,150719],{"class":111,"line":154},[109,150720,158],{"emptyLinePlaceholder":157},[109,150722,150723,150726,150728],{"class":111,"line":161},[109,150724,150725],{"class":126},"student1 ",[109,150727,130],{"class":122},[109,150729,150661],{"class":126},[109,150731,150732,150735,150737],{"class":111,"line":167},[109,150733,150734],{"class":126},"student2 ",[109,150736,130],{"class":122},[109,150738,150661],{"class":126},[19,150740,150741,150744,150745,102193,150748,150751],{},[106,150742,150743],{},"Student"," 是类，",[106,150746,150747],{},"student1",[106,150749,150750],{},"student2"," 是对象。",[14,150753,150755],{"id":150754},"_113-属性","11.3 属性",[19,150757,150758],{},"属性是对象保存的数据。",[99,150760,150762],{"className":31553,"code":150761,"language":31555,"meta":104,"style":104},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[106,150763,150764,150772,150776,150780,150784,150792,150800,150808,150812,150819],{"__ignoreMap":104},[109,150765,150766,150768,150770],{"class":111,"line":112},[109,150767,15867],{"class":122},[109,150769,9224],{"class":211},[109,150771,5082],{"class":126},[109,150773,150774],{"class":111,"line":119},[109,150775,150712],{"class":122},[109,150777,150778],{"class":111,"line":140},[109,150779,158],{"emptyLinePlaceholder":157},[109,150781,150782],{"class":111,"line":154},[109,150783,158],{"emptyLinePlaceholder":157},[109,150785,150786,150788,150790],{"class":111,"line":161},[109,150787,150656],{"class":126},[109,150789,130],{"class":122},[109,150791,150661],{"class":126},[109,150793,150794,150796,150798],{"class":111,"line":167},[109,150795,150666],{"class":126},[109,150797,130],{"class":122},[109,150799,150528],{"class":278},[109,150801,150802,150804,150806],{"class":111,"line":185},[109,150803,150675],{"class":126},[109,150805,130],{"class":122},[109,150807,147726],{"class":133},[109,150809,150810],{"class":111,"line":201},[109,150811,158],{"emptyLinePlaceholder":157},[109,150813,150814,150816],{"class":111,"line":206},[109,150815,31590],{"class":133},[109,150817,150818],{"class":126},"(student.name)\n",[109,150820,150821,150823],{"class":111,"line":218},[109,150822,31590],{"class":133},[109,150824,150825],{"class":126},"(student.age)\n",[19,150827,150828],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150830,150832],{"id":150831},"_114-方法","11.4 方法",[19,150834,150835],{},"类中的函数叫方法。",[99,150837,150838],{"className":31553,"code":150596,"language":31555,"meta":104,"style":104},[106,150839,150840,150848,150856,150884,150888,150892,150900,150908,150916],{"__ignoreMap":104},[109,150841,150842,150844,150846],{"class":111,"line":112},[109,150843,15867],{"class":122},[109,150845,9224],{"class":211},[109,150847,5082],{"class":126},[109,150849,150850,150852,150854],{"class":111,"line":119},[109,150851,31976],{"class":122},[109,150853,150547],{"class":211},[109,150855,31982],{"class":126},[109,150857,150858,150860,150862,150864,150866,150868,150870,150872,150874,150876,150878,150880,150882],{"class":111,"line":140},[109,150859,33626],{"class":133},[109,150861,714],{"class":126},[109,150863,1595],{"class":122},[109,150865,150561],{"class":278},[109,150867,150627],{"class":133},[109,150869,81476],{"class":126},[109,150871,2476],{"class":133},[109,150873,150570],{"class":278},[109,150875,150627],{"class":133},[109,150877,81488],{"class":126},[109,150879,2476],{"class":133},[109,150881,150579],{"class":278},[109,150883,1330],{"class":126},[109,150885,150886],{"class":111,"line":154},[109,150887,158],{"emptyLinePlaceholder":157},[109,150889,150890],{"class":111,"line":161},[109,150891,158],{"emptyLinePlaceholder":157},[109,150893,150894,150896,150898],{"class":111,"line":167},[109,150895,150656],{"class":126},[109,150897,130],{"class":122},[109,150899,150661],{"class":126},[109,150901,150902,150904,150906],{"class":111,"line":185},[109,150903,150666],{"class":126},[109,150905,130],{"class":122},[109,150907,150528],{"class":278},[109,150909,150910,150912,150914],{"class":111,"line":201},[109,150911,150675],{"class":126},[109,150913,130],{"class":122},[109,150915,147726],{"class":133},[109,150917,150918],{"class":111,"line":206},[109,150919,150684],{"class":126},[19,150921,150922,150924,150925,150927],{},[106,150923,31998],{}," 表示当前对象。调用方法时不需要手动传入 ",[106,150926,31998],{},"，Python 会自动传。",[14,150929,150931],{"id":150930},"_115-构造方法__init__","11.5 构造方法__init__",[19,150933,150934,150936],{},[106,150935,32004],{}," 在对象创建时自动执行，用于初始化属性。",[99,150938,150940],{"className":31553,"code":150939,"language":31555,"meta":104,"style":104},"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",[106,150941,150942,150950,150959,150971,150983,150994,150998,151006,151044,151048,151052,151074],{"__ignoreMap":104},[109,150943,150944,150946,150948],{"class":111,"line":112},[109,150945,15867],{"class":122},[109,150947,9224],{"class":211},[109,150949,5082],{"class":126},[109,150951,150952,150954,150956],{"class":111,"line":119},[109,150953,31976],{"class":122},[109,150955,31979],{"class":133},[109,150957,150958],{"class":126},"(self, name, age, score):\n",[109,150960,150961,150963,150966,150968],{"class":111,"line":140},[109,150962,32020],{"class":133},[109,150964,150965],{"class":126},".name ",[109,150967,130],{"class":122},[109,150969,150970],{"class":126}," name\n",[109,150972,150973,150975,150978,150980],{"class":111,"line":154},[109,150974,32020],{"class":133},[109,150976,150977],{"class":126},".age ",[109,150979,130],{"class":122},[109,150981,150982],{"class":126}," age\n",[109,150984,150985,150987,150990,150992],{"class":111,"line":161},[109,150986,32020],{"class":133},[109,150988,150989],{"class":126},".score ",[109,150991,130],{"class":122},[109,150993,2967],{"class":126},[109,150995,150996],{"class":111,"line":167},[109,150997,158],{"emptyLinePlaceholder":157},[109,150999,151000,151002,151004],{"class":111,"line":185},[109,151001,31976],{"class":122},[109,151003,150547],{"class":211},[109,151005,31982],{"class":126},[109,151007,151008,151010,151012,151014,151016,151018,151020,151022,151024,151026,151028,151030,151033,151035,151038,151040,151042],{"class":111,"line":201},[109,151009,33626],{"class":133},[109,151011,714],{"class":126},[109,151013,1595],{"class":122},[109,151015,150561],{"class":278},[109,151017,150627],{"class":133},[109,151019,81476],{"class":126},[109,151021,2476],{"class":133},[109,151023,150570],{"class":278},[109,151025,150627],{"class":133},[109,151027,81488],{"class":126},[109,151029,2476],{"class":133},[109,151031,151032],{"class":278},"岁，成绩",[109,151034,150627],{"class":133},[109,151036,151037],{"class":126},".score",[109,151039,2476],{"class":133},[109,151041,1789],{"class":278},[109,151043,1330],{"class":126},[109,151045,151046],{"class":111,"line":206},[109,151047,158],{"emptyLinePlaceholder":157},[109,151049,151050],{"class":111,"line":218},[109,151051,158],{"emptyLinePlaceholder":157},[109,151053,151054,151056,151058,151061,151064,151066,151068,151070,151072],{"class":111,"line":223},[109,151055,150656],{"class":126},[109,151057,130],{"class":122},[109,151059,151060],{"class":126}," Student(",[109,151062,151063],{"class":278},"\"小明\"",[109,151065,13608],{"class":126},[109,151067,2182],{"class":133},[109,151069,13608],{"class":126},[109,151071,2519],{"class":133},[109,151073,1330],{"class":126},[109,151075,151076],{"class":111,"line":229},[109,151077,150684],{"class":126},[19,151079,151080],{},"构造方法的好处：",[765,151082,151083,151086,151089],{},[30,151084,151085],{},"创建对象时必须提供必要数据。",[30,151087,151088],{},"属性初始化集中，不容易漏。",[30,151090,151091],{},"对象状态更完整。",[14,151093,151095,151096],{"id":151094},"_116-str","11.6 ",[23,151097,2695],{},[19,151099,151100,151101,29560],{},"直接打印对象时，默认输出不直观。可以定义 ",[106,151102,151103],{},"__str__",[99,151105,151107],{"className":31553,"code":151106,"language":31555,"meta":104,"style":104},"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",[106,151108,151109,151117,151126,151136,151146,151150,151159,151187,151191,151195,151211],{"__ignoreMap":104},[109,151110,151111,151113,151115],{"class":111,"line":112},[109,151112,15867],{"class":122},[109,151114,9224],{"class":211},[109,151116,5082],{"class":126},[109,151118,151119,151121,151123],{"class":111,"line":119},[109,151120,31976],{"class":122},[109,151122,31979],{"class":133},[109,151124,151125],{"class":126},"(self, name, age):\n",[109,151127,151128,151130,151132,151134],{"class":111,"line":140},[109,151129,32020],{"class":133},[109,151131,150965],{"class":126},[109,151133,130],{"class":122},[109,151135,150970],{"class":126},[109,151137,151138,151140,151142,151144],{"class":111,"line":154},[109,151139,32020],{"class":133},[109,151141,150977],{"class":126},[109,151143,130],{"class":122},[109,151145,150982],{"class":126},[109,151147,151148],{"class":111,"line":161},[109,151149,158],{"emptyLinePlaceholder":157},[109,151151,151152,151154,151157],{"class":111,"line":167},[109,151153,31976],{"class":122},[109,151155,151156],{"class":133}," __str__",[109,151158,31982],{"class":126},[109,151160,151161,151163,151166,151169,151171,151173,151175,151178,151180,151182,151184],{"class":111,"line":185},[109,151162,15925],{"class":122},[109,151164,151165],{"class":122}," f",[109,151167,151168],{"class":278},"\"Student(name=",[109,151170,150627],{"class":133},[109,151172,81476],{"class":126},[109,151174,2476],{"class":133},[109,151176,151177],{"class":278},", age=",[109,151179,150627],{"class":133},[109,151181,81488],{"class":126},[109,151183,2476],{"class":133},[109,151185,151186],{"class":278},")\"\n",[109,151188,151189],{"class":111,"line":201},[109,151190,158],{"emptyLinePlaceholder":157},[109,151192,151193],{"class":111,"line":206},[109,151194,158],{"emptyLinePlaceholder":157},[109,151196,151197,151199,151201,151203,151205,151207,151209],{"class":111,"line":218},[109,151198,150656],{"class":126},[109,151200,130],{"class":122},[109,151202,151060],{"class":126},[109,151204,151063],{"class":278},[109,151206,13608],{"class":126},[109,151208,2182],{"class":133},[109,151210,1330],{"class":126},[109,151212,151213,151215],{"class":111,"line":223},[109,151214,31590],{"class":133},[109,151216,151217],{"class":126},"(student)\n",[14,151219,151221],{"id":151220},"_117-封装","11.7 封装",[19,151223,151224],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151226,151227],{},"Python 中以双下划线开头的属性通常视为私有属性。",[99,151229,151231],{"className":31553,"code":151230,"language":31555,"meta":104,"style":104},"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",[106,151232,151233,151242,151251,151263,151275,151279,151288,151297,151301,151311,151324,151335,151340,151351,151355,151364,151376,151387,151391,151404,151415,151419,151430,151434,151438,151456,151465,151474],{"__ignoreMap":104},[109,151234,151235,151237,151240],{"class":111,"line":112},[109,151236,15867],{"class":122},[109,151238,151239],{"class":211}," Account",[109,151241,5082],{"class":126},[109,151243,151244,151246,151248],{"class":111,"line":119},[109,151245,31976],{"class":122},[109,151247,31979],{"class":133},[109,151249,151250],{"class":126},"(self, owner, balance):\n",[109,151252,151253,151255,151258,151260],{"class":111,"line":140},[109,151254,32020],{"class":133},[109,151256,151257],{"class":126},".owner ",[109,151259,130],{"class":122},[109,151261,151262],{"class":126}," owner\n",[109,151264,151265,151267,151270,151272],{"class":111,"line":154},[109,151266,32020],{"class":133},[109,151268,151269],{"class":126},".__balance ",[109,151271,130],{"class":122},[109,151273,151274],{"class":126}," balance\n",[109,151276,151277],{"class":111,"line":161},[109,151278,158],{"emptyLinePlaceholder":157},[109,151280,151281,151283,151286],{"class":111,"line":167},[109,151282,31976],{"class":122},[109,151284,151285],{"class":211}," get_balance",[109,151287,31982],{"class":126},[109,151289,151290,151292,151294],{"class":111,"line":185},[109,151291,15925],{"class":122},[109,151293,40048],{"class":133},[109,151295,151296],{"class":126},".__balance\n",[109,151298,151299],{"class":111,"line":201},[109,151300,158],{"emptyLinePlaceholder":157},[109,151302,151303,151305,151308],{"class":111,"line":206},[109,151304,31976],{"class":122},[109,151306,151307],{"class":211}," deposit",[109,151309,151310],{"class":126},"(self, money):\n",[109,151312,151313,151315,151318,151320,151322],{"class":111,"line":218},[109,151314,3852],{"class":122},[109,151316,151317],{"class":126}," money ",[109,151319,2976],{"class":122},[109,151321,734],{"class":133},[109,151323,5082],{"class":126},[109,151325,151326,151328,151330,151333],{"class":111,"line":223},[109,151327,35825],{"class":133},[109,151329,714],{"class":126},[109,151331,151332],{"class":278},"\"存款金额必须大于0\"",[109,151334,1330],{"class":126},[109,151336,151337],{"class":111,"line":229},[109,151338,151339],{"class":122},"            return\n",[109,151341,151342,151344,151346,151348],{"class":111,"line":244},[109,151343,32020],{"class":133},[109,151345,151269],{"class":126},[109,151347,10795],{"class":122},[109,151349,151350],{"class":126}," money\n",[109,151352,151353],{"class":111,"line":258},[109,151354,158],{"emptyLinePlaceholder":157},[109,151356,151357,151359,151362],{"class":111,"line":263},[109,151358,31976],{"class":122},[109,151360,151361],{"class":211}," withdraw",[109,151363,151310],{"class":126},[109,151365,151366,151368,151370,151372,151374],{"class":111,"line":269},[109,151367,3852],{"class":122},[109,151369,151317],{"class":126},[109,151371,2976],{"class":122},[109,151373,734],{"class":133},[109,151375,5082],{"class":126},[109,151377,151378,151380,151382,151385],{"class":111,"line":304},[109,151379,35825],{"class":133},[109,151381,714],{"class":126},[109,151383,151384],{"class":278},"\"取款金额必须大于0\"",[109,151386,1330],{"class":126},[109,151388,151389],{"class":111,"line":331},[109,151390,151339],{"class":122},[109,151392,151393,151395,151397,151399,151401],{"class":111,"line":336},[109,151394,3852],{"class":122},[109,151396,151317],{"class":126},[109,151398,2490],{"class":122},[109,151400,40048],{"class":133},[109,151402,151403],{"class":126},".__balance:\n",[109,151405,151406,151408,151410,151413],{"class":111,"line":364},[109,151407,35825],{"class":133},[109,151409,714],{"class":126},[109,151411,151412],{"class":278},"\"余额不足\"",[109,151414,1330],{"class":126},[109,151416,151417],{"class":111,"line":391},[109,151418,151339],{"class":122},[109,151420,151421,151423,151425,151428],{"class":111,"line":396},[109,151422,32020],{"class":133},[109,151424,151269],{"class":126},[109,151426,151427],{"class":122},"-=",[109,151429,151350],{"class":126},[109,151431,151432],{"class":111,"line":402},[109,151433,158],{"emptyLinePlaceholder":157},[109,151435,151436],{"class":111,"line":419},[109,151437,158],{"emptyLinePlaceholder":157},[109,151439,151440,151443,151445,151448,151450,151452,151454],{"class":111,"line":435},[109,151441,151442],{"class":126},"account ",[109,151444,130],{"class":122},[109,151446,151447],{"class":126}," Account(",[109,151449,151063],{"class":278},[109,151451,13608],{"class":126},[109,151453,7740],{"class":133},[109,151455,1330],{"class":126},[109,151457,151458,151461,151463],{"class":111,"line":440},[109,151459,151460],{"class":126},"account.deposit(",[109,151462,3098],{"class":133},[109,151464,1330],{"class":126},[109,151466,151467,151470,151472],{"class":111,"line":467},[109,151468,151469],{"class":126},"account.withdraw(",[109,151471,1351],{"class":133},[109,151473,1330],{"class":126},[109,151475,151476,151478],{"class":111,"line":494},[109,151477,31590],{"class":133},[109,151479,151480],{"class":126},"(account.get_balance())\n",[19,151482,151483],{},"封装的意义是避免外部随意修改内部状态。",[14,151485,151487],{"id":151486},"_118-继承","11.8 继承",[19,151489,151490],{},"继承可以让子类复用父类的属性和方法。",[99,151492,151494],{"className":31553,"code":151493,"language":31555,"meta":104,"style":104},"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",[106,151495,151496,151505,151514,151525,151529,151533,151547,151556,151567,151571,151575,151585,151590],{"__ignoreMap":104},[109,151497,151498,151500,151503],{"class":111,"line":112},[109,151499,15867],{"class":122},[109,151501,151502],{"class":211}," Animal",[109,151504,5082],{"class":126},[109,151506,151507,151509,151512],{"class":111,"line":119},[109,151508,31976],{"class":122},[109,151510,151511],{"class":211}," eat",[109,151513,31982],{"class":126},[109,151515,151516,151518,151520,151523],{"class":111,"line":140},[109,151517,33626],{"class":133},[109,151519,714],{"class":126},[109,151521,151522],{"class":278},"\"吃东西\"",[109,151524,1330],{"class":126},[109,151526,151527],{"class":111,"line":154},[109,151528,158],{"emptyLinePlaceholder":157},[109,151530,151531],{"class":111,"line":161},[109,151532,158],{"emptyLinePlaceholder":157},[109,151534,151535,151537,151540,151542,151545],{"class":111,"line":167},[109,151536,15867],{"class":122},[109,151538,151539],{"class":211}," Dog",[109,151541,714],{"class":126},[109,151543,151544],{"class":211},"Animal",[109,151546,31961],{"class":126},[109,151548,151549,151551,151554],{"class":111,"line":185},[109,151550,31976],{"class":122},[109,151552,151553],{"class":211}," bark",[109,151555,31982],{"class":126},[109,151557,151558,151560,151562,151565],{"class":111,"line":201},[109,151559,33626],{"class":133},[109,151561,714],{"class":126},[109,151563,151564],{"class":278},"\"汪汪\"",[109,151566,1330],{"class":126},[109,151568,151569],{"class":111,"line":206},[109,151570,158],{"emptyLinePlaceholder":157},[109,151572,151573],{"class":111,"line":218},[109,151574,158],{"emptyLinePlaceholder":157},[109,151576,151577,151580,151582],{"class":111,"line":223},[109,151578,151579],{"class":126},"dog ",[109,151581,130],{"class":122},[109,151583,151584],{"class":126}," Dog()\n",[109,151586,151587],{"class":111,"line":229},[109,151588,151589],{"class":126},"dog.eat()\n",[109,151591,151592],{"class":111,"line":244},[109,151593,151594],{"class":126},"dog.bark()\n",[19,151596,151597],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151599,151601],{"id":151600},"_119-方法重写","11.9 方法重写",[99,151603,151605],{"className":31553,"code":151604,"language":31555,"meta":104,"style":104},"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",[106,151606,151607,151615,151624,151635,151639,151643,151655,151663,151673,151677,151681,151694,151702,151713,151717,151721,151729,151739,151743,151748],{"__ignoreMap":104},[109,151608,151609,151611,151613],{"class":111,"line":112},[109,151610,15867],{"class":122},[109,151612,151502],{"class":211},[109,151614,5082],{"class":126},[109,151616,151617,151619,151622],{"class":111,"line":119},[109,151618,31976],{"class":122},[109,151620,151621],{"class":211}," speak",[109,151623,31982],{"class":126},[109,151625,151626,151628,151630,151633],{"class":111,"line":140},[109,151627,33626],{"class":133},[109,151629,714],{"class":126},[109,151631,151632],{"class":278},"\"动物叫\"",[109,151634,1330],{"class":126},[109,151636,151637],{"class":111,"line":154},[109,151638,158],{"emptyLinePlaceholder":157},[109,151640,151641],{"class":111,"line":161},[109,151642,158],{"emptyLinePlaceholder":157},[109,151644,151645,151647,151649,151651,151653],{"class":111,"line":167},[109,151646,15867],{"class":122},[109,151648,151539],{"class":211},[109,151650,714],{"class":126},[109,151652,151544],{"class":211},[109,151654,31961],{"class":126},[109,151656,151657,151659,151661],{"class":111,"line":185},[109,151658,31976],{"class":122},[109,151660,151621],{"class":211},[109,151662,31982],{"class":126},[109,151664,151665,151667,151669,151671],{"class":111,"line":201},[109,151666,33626],{"class":133},[109,151668,714],{"class":126},[109,151670,151564],{"class":278},[109,151672,1330],{"class":126},[109,151674,151675],{"class":111,"line":206},[109,151676,158],{"emptyLinePlaceholder":157},[109,151678,151679],{"class":111,"line":218},[109,151680,158],{"emptyLinePlaceholder":157},[109,151682,151683,151685,151688,151690,151692],{"class":111,"line":223},[109,151684,15867],{"class":122},[109,151686,151687],{"class":211}," Cat",[109,151689,714],{"class":126},[109,151691,151544],{"class":211},[109,151693,31961],{"class":126},[109,151695,151696,151698,151700],{"class":111,"line":229},[109,151697,31976],{"class":122},[109,151699,151621],{"class":211},[109,151701,31982],{"class":126},[109,151703,151704,151706,151708,151711],{"class":111,"line":244},[109,151705,33626],{"class":133},[109,151707,714],{"class":126},[109,151709,151710],{"class":278},"\"喵喵\"",[109,151712,1330],{"class":126},[109,151714,151715],{"class":111,"line":258},[109,151716,158],{"emptyLinePlaceholder":157},[109,151718,151719],{"class":111,"line":263},[109,151720,158],{"emptyLinePlaceholder":157},[109,151722,151723,151725,151727],{"class":111,"line":269},[109,151724,151579],{"class":126},[109,151726,130],{"class":122},[109,151728,151584],{"class":126},[109,151730,151731,151734,151736],{"class":111,"line":304},[109,151732,151733],{"class":126},"cat ",[109,151735,130],{"class":122},[109,151737,151738],{"class":126}," Cat()\n",[109,151740,151741],{"class":111,"line":331},[109,151742,158],{"emptyLinePlaceholder":157},[109,151744,151745],{"class":111,"line":336},[109,151746,151747],{"class":126},"dog.speak()\n",[109,151749,151750],{"class":111,"line":364},[109,151751,151752],{"class":126},"cat.speak()\n",[14,151754,151756],{"id":151755},"_1110-super","11.10 super",[19,151758,151759,151760,151763],{},"子类可以通过 ",[106,151761,151762],{},"super()"," 调用父类方法。",[99,151765,151767],{"className":31553,"code":151766,"language":31555,"meta":104,"style":104},"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",[106,151768,151769,151777,151786,151796,151800,151804,151816,151825,151836,151846,151850,151854,151870],{"__ignoreMap":104},[109,151770,151771,151773,151775],{"class":111,"line":112},[109,151772,15867],{"class":122},[109,151774,16742],{"class":211},[109,151776,5082],{"class":126},[109,151778,151779,151781,151783],{"class":111,"line":119},[109,151780,31976],{"class":122},[109,151782,31979],{"class":133},[109,151784,151785],{"class":126},"(self, name):\n",[109,151787,151788,151790,151792,151794],{"class":111,"line":140},[109,151789,32020],{"class":133},[109,151791,150965],{"class":126},[109,151793,130],{"class":122},[109,151795,150970],{"class":126},[109,151797,151798],{"class":111,"line":154},[109,151799,158],{"emptyLinePlaceholder":157},[109,151801,151802],{"class":111,"line":161},[109,151803,158],{"emptyLinePlaceholder":157},[109,151805,151806,151808,151810,151812,151814],{"class":111,"line":167},[109,151807,15867],{"class":122},[109,151809,9224],{"class":211},[109,151811,714],{"class":126},[109,151813,20219],{"class":211},[109,151815,31961],{"class":126},[109,151817,151818,151820,151822],{"class":111,"line":185},[109,151819,31976],{"class":122},[109,151821,31979],{"class":133},[109,151823,151824],{"class":126},"(self, name, score):\n",[109,151826,151827,151829,151831,151833],{"class":111,"line":201},[109,151828,31992],{"class":133},[109,151830,18434],{"class":126},[109,151832,32004],{"class":133},[109,151834,151835],{"class":126},"(name)\n",[109,151837,151838,151840,151842,151844],{"class":111,"line":206},[109,151839,32020],{"class":133},[109,151841,150989],{"class":126},[109,151843,130],{"class":122},[109,151845,2967],{"class":126},[109,151847,151848],{"class":111,"line":218},[109,151849,158],{"emptyLinePlaceholder":157},[109,151851,151852],{"class":111,"line":223},[109,151853,158],{"emptyLinePlaceholder":157},[109,151855,151856,151858,151860,151862,151864,151866,151868],{"class":111,"line":229},[109,151857,150656],{"class":126},[109,151859,130],{"class":122},[109,151861,151060],{"class":126},[109,151863,151063],{"class":278},[109,151865,13608],{"class":126},[109,151867,2519],{"class":133},[109,151869,1330],{"class":126},[109,151871,151872,151874],{"class":111,"line":244},[109,151873,31590],{"class":133},[109,151875,151876],{"class":126},"(student.name, student.score)\n",[14,151878,151880],{"id":151879},"_1111-多态","11.11 多态",[19,151882,151883],{},"多态指不同对象响应同一个方法，表现出不同结果。",[99,151885,151887],{"className":31553,"code":151886,"language":31555,"meta":104,"style":104},"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",[106,151888,151889,151897,151905,151915,151919,151923,151931,151939,151949,151953,151957,151967,151972,151976,151980,151985],{"__ignoreMap":104},[109,151890,151891,151893,151895],{"class":111,"line":112},[109,151892,15867],{"class":122},[109,151894,151539],{"class":211},[109,151896,5082],{"class":126},[109,151898,151899,151901,151903],{"class":111,"line":119},[109,151900,31976],{"class":122},[109,151902,151621],{"class":211},[109,151904,31982],{"class":126},[109,151906,151907,151909,151911,151913],{"class":111,"line":140},[109,151908,33626],{"class":133},[109,151910,714],{"class":126},[109,151912,151564],{"class":278},[109,151914,1330],{"class":126},[109,151916,151917],{"class":111,"line":154},[109,151918,158],{"emptyLinePlaceholder":157},[109,151920,151921],{"class":111,"line":161},[109,151922,158],{"emptyLinePlaceholder":157},[109,151924,151925,151927,151929],{"class":111,"line":167},[109,151926,15867],{"class":122},[109,151928,151687],{"class":211},[109,151930,5082],{"class":126},[109,151932,151933,151935,151937],{"class":111,"line":185},[109,151934,31976],{"class":122},[109,151936,151621],{"class":211},[109,151938,31982],{"class":126},[109,151940,151941,151943,151945,151947],{"class":111,"line":201},[109,151942,33626],{"class":133},[109,151944,714],{"class":126},[109,151946,151710],{"class":278},[109,151948,1330],{"class":126},[109,151950,151951],{"class":111,"line":206},[109,151952,158],{"emptyLinePlaceholder":157},[109,151954,151955],{"class":111,"line":218},[109,151956,158],{"emptyLinePlaceholder":157},[109,151958,151959,151961,151964],{"class":111,"line":223},[109,151960,33122],{"class":122},[109,151962,151963],{"class":211}," make_sound",[109,151965,151966],{"class":126},"(animal):\n",[109,151968,151969],{"class":111,"line":229},[109,151970,151971],{"class":126},"    animal.speak()\n",[109,151973,151974],{"class":111,"line":244},[109,151975,158],{"emptyLinePlaceholder":157},[109,151977,151978],{"class":111,"line":258},[109,151979,158],{"emptyLinePlaceholder":157},[109,151981,151982],{"class":111,"line":263},[109,151983,151984],{"class":126},"make_sound(Dog())\n",[109,151986,151987],{"class":111,"line":269},[109,151988,151989],{"class":126},"make_sound(Cat())\n",[19,151991,151992],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151994,151996],{"id":151995},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151998,151999],{},"实例属性属于对象：",[99,152001,152003],{"className":31553,"code":152002,"language":31555,"meta":104,"style":104},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[106,152004,152005,152013,152021],{"__ignoreMap":104},[109,152006,152007,152009,152011],{"class":111,"line":112},[109,152008,15867],{"class":122},[109,152010,9224],{"class":211},[109,152012,5082],{"class":126},[109,152014,152015,152017,152019],{"class":111,"line":119},[109,152016,31976],{"class":122},[109,152018,31979],{"class":133},[109,152020,151785],{"class":126},[109,152022,152023,152025,152027,152029],{"class":111,"line":140},[109,152024,32020],{"class":133},[109,152026,150965],{"class":126},[109,152028,130],{"class":122},[109,152030,150970],{"class":126},[19,152032,152033],{},"类属性属于类，所有对象共享：",[99,152035,152037],{"className":31553,"code":152036,"language":31555,"meta":104,"style":104},"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",[106,152038,152039,152047,152057,152061,152069,152079,152083,152087,152100,152114,152118,152125,152132],{"__ignoreMap":104},[109,152040,152041,152043,152045],{"class":111,"line":112},[109,152042,15867],{"class":122},[109,152044,9224],{"class":211},[109,152046,5082],{"class":126},[109,152048,152049,152052,152054],{"class":111,"line":119},[109,152050,152051],{"class":126},"    school ",[109,152053,130],{"class":122},[109,152055,152056],{"class":278}," \"黑马学校\"\n",[109,152058,152059],{"class":111,"line":140},[109,152060,158],{"emptyLinePlaceholder":157},[109,152062,152063,152065,152067],{"class":111,"line":154},[109,152064,31976],{"class":122},[109,152066,31979],{"class":133},[109,152068,151785],{"class":126},[109,152070,152071,152073,152075,152077],{"class":111,"line":161},[109,152072,32020],{"class":133},[109,152074,150965],{"class":126},[109,152076,130],{"class":122},[109,152078,150970],{"class":126},[109,152080,152081],{"class":111,"line":167},[109,152082,158],{"emptyLinePlaceholder":157},[109,152084,152085],{"class":111,"line":185},[109,152086,158],{"emptyLinePlaceholder":157},[109,152088,152089,152092,152094,152096,152098],{"class":111,"line":201},[109,152090,152091],{"class":126},"s1 ",[109,152093,130],{"class":122},[109,152095,151060],{"class":126},[109,152097,151063],{"class":278},[109,152099,1330],{"class":126},[109,152101,152102,152105,152107,152109,152112],{"class":111,"line":206},[109,152103,152104],{"class":126},"s2 ",[109,152106,130],{"class":122},[109,152108,151060],{"class":126},[109,152110,152111],{"class":278},"\"小红\"",[109,152113,1330],{"class":126},[109,152115,152116],{"class":111,"line":218},[109,152117,158],{"emptyLinePlaceholder":157},[109,152119,152120,152122],{"class":111,"line":223},[109,152121,31590],{"class":133},[109,152123,152124],{"class":126},"(s1.school)\n",[109,152126,152127,152129],{"class":111,"line":229},[109,152128,31590],{"class":133},[109,152130,152131],{"class":126},"(s2.school)\n",[109,152133,152134,152136],{"class":111,"line":244},[109,152135,31590],{"class":133},[109,152137,152138],{"class":126},"(Student.school)\n",[19,152140,152141],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152143,152145],{"id":152144},"_1113-类方法和静态方法","11.13 类方法和静态方法",[51,152147,152149],{"id":152148},"_11131-类方法","11.13.1 类方法",[19,152151,152152,152153,152156,152157,29560],{},"类方法使用 ",[106,152154,152155],{},"@classmethod","，第一个参数通常是 ",[106,152158,152159],{},"cls",[99,152161,152163],{"className":31553,"code":152162,"language":31555,"meta":104,"style":104},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[106,152164,152165,152173,152181,152185,152193,152203,152213,152217,152221],{"__ignoreMap":104},[109,152166,152167,152169,152171],{"class":111,"line":112},[109,152168,15867],{"class":122},[109,152170,9224],{"class":211},[109,152172,5082],{"class":126},[109,152174,152175,152177,152179],{"class":111,"line":119},[109,152176,152051],{"class":126},[109,152178,130],{"class":122},[109,152180,152056],{"class":278},[109,152182,152183],{"class":111,"line":140},[109,152184,158],{"emptyLinePlaceholder":157},[109,152186,152187,152190],{"class":111,"line":154},[109,152188,152189],{"class":211},"    @",[109,152191,152192],{"class":133},"classmethod\n",[109,152194,152195,152197,152200],{"class":111,"line":161},[109,152196,31976],{"class":122},[109,152198,152199],{"class":211}," get_school",[109,152201,152202],{"class":126},"(cls):\n",[109,152204,152205,152207,152210],{"class":111,"line":167},[109,152206,15925],{"class":122},[109,152208,152209],{"class":133}," cls",[109,152211,152212],{"class":126},".school\n",[109,152214,152215],{"class":111,"line":185},[109,152216,158],{"emptyLinePlaceholder":157},[109,152218,152219],{"class":111,"line":201},[109,152220,158],{"emptyLinePlaceholder":157},[109,152222,152223,152225],{"class":111,"line":206},[109,152224,31590],{"class":133},[109,152226,152227],{"class":126},"(Student.get_school())\n",[51,152229,152231],{"id":152230},"_11132-静态方法","11.13.2 静态方法",[19,152233,152234,152235,152238],{},"静态方法使用 ",[106,152236,152237],{},"@staticmethod","，不需要访问实例和类。",[99,152240,152242],{"className":31553,"code":152241,"language":31555,"meta":104,"style":104},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[106,152243,152244,152253,152260,152269,152280,152284,152288],{"__ignoreMap":104},[109,152245,152246,152248,152251],{"class":111,"line":112},[109,152247,15867],{"class":122},[109,152249,152250],{"class":211}," MathUtils",[109,152252,5082],{"class":126},[109,152254,152255,152257],{"class":111,"line":119},[109,152256,152189],{"class":211},[109,152258,152259],{"class":133},"staticmethod\n",[109,152261,152262,152264,152266],{"class":111,"line":140},[109,152263,31976],{"class":122},[109,152265,6546],{"class":211},[109,152267,152268],{"class":126},"(a, b):\n",[109,152270,152271,152273,152275,152277],{"class":111,"line":154},[109,152272,15925],{"class":122},[109,152274,235],{"class":126},[109,152276,1348],{"class":122},[109,152278,152279],{"class":126}," b\n",[109,152281,152282],{"class":111,"line":161},[109,152283,158],{"emptyLinePlaceholder":157},[109,152285,152286],{"class":111,"line":167},[109,152287,158],{"emptyLinePlaceholder":157},[109,152289,152290,152292,152295,152297,152299,152301],{"class":111,"line":185},[109,152291,31590],{"class":133},[109,152293,152294],{"class":126},"(MathUtils.add(",[109,152296,1755],{"class":133},[109,152298,13608],{"class":126},[109,152300,1618],{"class":133},[109,152302,31672],{"class":126},[19,152304,152305],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152307,152309],{"id":152308},"_1114-dataclass","11.14 dataclass",[19,152311,152312,152315],{},[106,152313,152314],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[99,152317,152319],{"className":31553,"code":152318,"language":31555,"meta":104,"style":104},"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",[106,152320,152321,152333,152337,152341,152346,152354,152362,152370,152378,152382,152386,152406],{"__ignoreMap":104},[109,152322,152323,152325,152328,152330],{"class":111,"line":112},[109,152324,31912],{"class":122},[109,152326,152327],{"class":126}," dataclasses ",[109,152329,31567],{"class":122},[109,152331,152332],{"class":126}," dataclass\n",[109,152334,152335],{"class":111,"line":119},[109,152336,158],{"emptyLinePlaceholder":157},[109,152338,152339],{"class":111,"line":140},[109,152340,158],{"emptyLinePlaceholder":157},[109,152342,152343],{"class":111,"line":154},[109,152344,152345],{"class":211},"@dataclass\n",[109,152347,152348,152350,152352],{"class":111,"line":161},[109,152349,15867],{"class":122},[109,152351,9224],{"class":211},[109,152353,5082],{"class":126},[109,152355,152356,152359],{"class":111,"line":167},[109,152357,152358],{"class":126},"    name: ",[109,152360,152361],{"class":133},"str\n",[109,152363,152364,152367],{"class":111,"line":185},[109,152365,152366],{"class":126},"    age: ",[109,152368,152369],{"class":133},"int\n",[109,152371,152372,152375],{"class":111,"line":201},[109,152373,152374],{"class":126},"    score: ",[109,152376,152377],{"class":133},"float\n",[109,152379,152380],{"class":111,"line":206},[109,152381,158],{"emptyLinePlaceholder":157},[109,152383,152384],{"class":111,"line":218},[109,152385,158],{"emptyLinePlaceholder":157},[109,152387,152388,152390,152392,152394,152396,152398,152400,152402,152404],{"class":111,"line":223},[109,152389,150656],{"class":126},[109,152391,130],{"class":122},[109,152393,151060],{"class":126},[109,152395,151063],{"class":278},[109,152397,13608],{"class":126},[109,152399,2182],{"class":133},[109,152401,13608],{"class":126},[109,152403,2519],{"class":133},[109,152405,1330],{"class":126},[109,152407,152408,152410],{"class":111,"line":229},[109,152409,31590],{"class":133},[109,152411,151217],{"class":126},[19,152413,152414,152415,1750,152417,152420],{},"它会自动生成 ",[106,152416,32004],{},[106,152418,152419],{},"__repr__"," 等方法。适合数据模型类。",[14,152422,152424],{"id":152423},"_1115-小案例学生类","11.15 小案例：学生类",[99,152426,152428],{"className":31553,"code":152427,"language":31555,"meta":104,"style":104},"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",[106,152429,152430,152438,152447,152459,152469,152479,152489,152493,152502,152515,152519,152528,152534,152546,152558,152570,152582,152586,152590,152596,152606,152615,152625,152633,152641,152650,152654,152658,152666,152702,152706,152710,152735,152742],{"__ignoreMap":104},[109,152431,152432,152434,152436],{"class":111,"line":112},[109,152433,15867],{"class":122},[109,152435,9224],{"class":211},[109,152437,5082],{"class":126},[109,152439,152440,152442,152444],{"class":111,"line":119},[109,152441,31976],{"class":122},[109,152443,31979],{"class":133},[109,152445,152446],{"class":126},"(self, student_id, name, age, score):\n",[109,152448,152449,152451,152454,152456],{"class":111,"line":140},[109,152450,32020],{"class":133},[109,152452,152453],{"class":126},".student_id ",[109,152455,130],{"class":122},[109,152457,152458],{"class":126}," student_id\n",[109,152460,152461,152463,152465,152467],{"class":111,"line":154},[109,152462,32020],{"class":133},[109,152464,150965],{"class":126},[109,152466,130],{"class":122},[109,152468,150970],{"class":126},[109,152470,152471,152473,152475,152477],{"class":111,"line":161},[109,152472,32020],{"class":133},[109,152474,150977],{"class":126},[109,152476,130],{"class":122},[109,152478,150982],{"class":126},[109,152480,152481,152483,152485,152487],{"class":111,"line":167},[109,152482,32020],{"class":133},[109,152484,150989],{"class":126},[109,152486,130],{"class":122},[109,152488,2967],{"class":126},[109,152490,152491],{"class":111,"line":185},[109,152492,158],{"emptyLinePlaceholder":157},[109,152494,152495,152497,152500],{"class":111,"line":201},[109,152496,31976],{"class":122},[109,152498,152499],{"class":211}," is_passed",[109,152501,31982],{"class":126},[109,152503,152504,152506,152508,152510,152512],{"class":111,"line":206},[109,152505,15925],{"class":122},[109,152507,40048],{"class":133},[109,152509,150989],{"class":126},[109,152511,3086],{"class":122},[109,152513,152514],{"class":133}," 60\n",[109,152516,152517],{"class":111,"line":218},[109,152518,158],{"emptyLinePlaceholder":157},[109,152520,152521,152523,152526],{"class":111,"line":223},[109,152522,31976],{"class":122},[109,152524,152525],{"class":211}," to_dict",[109,152527,31982],{"class":126},[109,152529,152530,152532],{"class":111,"line":229},[109,152531,15925],{"class":122},[109,152533,16745],{"class":126},[109,152535,152536,152539,152541,152543],{"class":111,"line":244},[109,152537,152538],{"class":278},"            \"student_id\"",[109,152540,52612],{"class":126},[109,152542,31998],{"class":133},[109,152544,152545],{"class":126},".student_id,\n",[109,152547,152548,152551,152553,152555],{"class":111,"line":258},[109,152549,152550],{"class":278},"            \"name\"",[109,152552,52612],{"class":126},[109,152554,31998],{"class":133},[109,152556,152557],{"class":126},".name,\n",[109,152559,152560,152563,152565,152567],{"class":111,"line":263},[109,152561,152562],{"class":278},"            \"age\"",[109,152564,52612],{"class":126},[109,152566,31998],{"class":133},[109,152568,152569],{"class":126},".age,\n",[109,152571,152572,152575,152577,152579],{"class":111,"line":269},[109,152573,152574],{"class":278},"            \"score\"",[109,152576,52612],{"class":126},[109,152578,31998],{"class":133},[109,152580,152581],{"class":126},".score,\n",[109,152583,152584],{"class":111,"line":304},[109,152585,3884],{"class":126},[109,152587,152588],{"class":111,"line":331},[109,152589,158],{"emptyLinePlaceholder":157},[109,152591,152592,152594],{"class":111,"line":336},[109,152593,152189],{"class":211},[109,152595,152192],{"class":133},[109,152597,152598,152600,152603],{"class":111,"line":364},[109,152599,31976],{"class":122},[109,152601,152602],{"class":211}," from_dict",[109,152604,152605],{"class":126},"(cls, data):\n",[109,152607,152608,152610,152612],{"class":111,"line":391},[109,152609,15925],{"class":122},[109,152611,152209],{"class":133},[109,152613,152614],{"class":126},"(\n",[109,152616,152617,152620,152623],{"class":111,"line":396},[109,152618,152619],{"class":126},"            data[",[109,152621,152622],{"class":278},"\"student_id\"",[109,152624,89011],{"class":126},[109,152626,152627,152629,152631],{"class":111,"line":402},[109,152628,152619],{"class":126},[109,152630,63854],{"class":278},[109,152632,89011],{"class":126},[109,152634,152635,152637,152639],{"class":111,"line":419},[109,152636,152619],{"class":126},[109,152638,70299],{"class":278},[109,152640,89011],{"class":126},[109,152642,152643,152645,152648],{"class":111,"line":435},[109,152644,152619],{"class":126},[109,152646,152647],{"class":278},"\"score\"",[109,152649,89011],{"class":126},[109,152651,152652],{"class":111,"line":440},[109,152653,39301],{"class":126},[109,152655,152656],{"class":111,"line":467},[109,152657,158],{"emptyLinePlaceholder":157},[109,152659,152660,152662,152664],{"class":111,"line":494},[109,152661,31976],{"class":122},[109,152663,151156],{"class":133},[109,152665,31982],{"class":126},[109,152667,152668,152670,152672,152674,152676,152679,152681,152684,152686,152688,152690,152692,152694,152696,152698,152700],{"class":111,"line":499},[109,152669,15925],{"class":122},[109,152671,151165],{"class":122},[109,152673,1789],{"class":278},[109,152675,150627],{"class":133},[109,152677,152678],{"class":126},".student_id",[109,152680,2476],{"class":133},[109,152682,152683],{"class":133}," {self",[109,152685,81476],{"class":126},[109,152687,2476],{"class":133},[109,152689,152683],{"class":133},[109,152691,81488],{"class":126},[109,152693,2476],{"class":133},[109,152695,152683],{"class":133},[109,152697,151037],{"class":126},[109,152699,2476],{"class":133},[109,152701,26308],{"class":278},[109,152703,152704],{"class":111,"line":526},[109,152705,158],{"emptyLinePlaceholder":157},[109,152707,152708],{"class":111,"line":552},[109,152709,158],{"emptyLinePlaceholder":157},[109,152711,152712,152714,152716,152718,152721,152723,152725,152727,152729,152731,152733],{"class":111,"line":557},[109,152713,150656],{"class":126},[109,152715,130],{"class":122},[109,152717,151060],{"class":126},[109,152719,152720],{"class":278},"\"001\"",[109,152722,13608],{"class":126},[109,152724,151063],{"class":278},[109,152726,13608],{"class":126},[109,152728,2182],{"class":133},[109,152730,13608],{"class":126},[109,152732,2519],{"class":133},[109,152734,1330],{"class":126},[109,152736,152737,152739],{"class":111,"line":584},[109,152738,31590],{"class":133},[109,152740,152741],{"class":126},"(student.is_passed())\n",[109,152743,152744,152746],{"class":111,"line":611},[109,152745,31590],{"class":133},[109,152747,152748],{"class":126},"(student.to_dict())\n",[19,152750,152751,102193,152754,152757],{},[106,152752,152753],{},"to_dict()",[106,152755,152756],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152759,152761],{"id":152760},"_1116-易错点","11.16 易错点",[765,152763,152764,152770,152776,152781,152784,152787],{},[30,152765,152766,152767,29560],{},"类名推荐使用大驼峰，如 ",[106,152768,152769],{},"StudentManager",[30,152771,152772,152773,152775],{},"方法第一个参数必须写 ",[106,152774,31998],{},"，调用时不用传。",[30,152777,152778,152780],{},[106,152779,32004],{}," 不是普通方法，它在创建对象时自动执行。",[30,152782,152783],{},"私有属性不是绝对安全，只是约定和名称改写。",[30,152785,152786],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[30,152788,152789],{},"类中方法太多时，说明职责可能过重。",[14,152791,152793],{"id":152792},"_1117-本章练习","11.17 本章练习",[765,152795,152796,152802,152808,152813,152826],{},[30,152797,152798,152799,152801],{},"定义 ",[106,152800,150743],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[30,152803,152798,152804,152807],{},[106,152805,152806],{},"Account"," 类，实现存款、取款、查询余额。",[30,152809,152798,152810,152812],{},[106,152811,18399],{}," 类，计算圆的周长和面积。",[30,152814,152798,152815,1750,152818,152821,152822,152825],{},[106,152816,152817],{},"Dog",[106,152819,152820],{},"Cat"," 类，并用同一个函数调用它们的 ",[106,152823,152824],{},"speak()"," 方法。",[30,152827,105541,152828,152830,152831,29560],{},[106,152829,152314],{}," 定义一个商品类 ",[106,152832,152833],{},"Product",[1467,152835,152836],{},"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":104,"searchDepth":119,"depth":119,"links":152838},[152839,152840,152841,152842,152843,152844,152846,152847,152848,152849,152850,152851,152852,152856,152857,152858,152859],{"id":150507,"depth":119,"text":150508},{"id":150690,"depth":119,"text":150691},{"id":150754,"depth":119,"text":150755},{"id":150831,"depth":119,"text":150832},{"id":150930,"depth":119,"text":150931},{"id":151094,"depth":119,"text":152845},"11.6 str",{"id":151220,"depth":119,"text":151221},{"id":151486,"depth":119,"text":151487},{"id":151600,"depth":119,"text":151601},{"id":151755,"depth":119,"text":151756},{"id":151879,"depth":119,"text":151880},{"id":151995,"depth":119,"text":151996},{"id":152144,"depth":119,"text":152145,"children":152853},[152854,152855],{"id":152148,"depth":140,"text":152149},{"id":152230,"depth":140,"text":152231},{"id":152308,"depth":119,"text":152309},{"id":152423,"depth":119,"text":152424},{"id":152760,"depth":119,"text":152761},{"id":152792,"depth":119,"text":152793},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150499,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152866,"title":152867,"body":152868,"description":24550,"extension":1476,"meta":156181,"navigation":157,"path":156182,"seo":156183,"stem":156184,"__hash__":156185},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152869,"toc":156157},[152870,152873,152877,152880,152883,152912,152915,152923,152927,152931,152934,152957,152960,152966,152970,154416,154419,154440,154444,154447,154459,154462,154646,154649,154775,154778,154782,154786,154922,154926,155012,155016,155098,155102,155139,155143,155332,155336,155339,155569,155573,155576,155757,155760,155764,155767,155773,155776,155802,155806,155809,155823,155826,155851,155854,155868,155871,155888,155891,155908,155911,155928,155932,155958,155962,155985,155989,155992,155994,156000,156002,156023,156026,156032,156038,156042,156045,156121,156124,156128,156154],[10,152871,152867],{"id":152872},"_12-综合案例与复习路线",[14,152874,152876],{"id":152875},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152878,152879],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152881,152882],{},"一个合格的入门综合项目最好覆盖：",[765,152884,152885,152888,152891,152894,152897,152900,152903,152906,152909],{},[30,152886,152887],{},"输入输出。",[30,152889,152890],{},"判断和循环。",[30,152892,152893],{},"函数拆分。",[30,152895,152896],{},"列表、字典等容器。",[30,152898,152899],{},"文件持久化。",[30,152901,152902],{},"异常处理。",[30,152904,152905],{},"模块拆分。",[30,152907,152908],{},"可选：面向对象。",[30,152910,152911],{},"可选：数据可视化。",[19,152913,152914],{},"本章整理两个方向：",[765,152916,152917,152920],{},[30,152918,152919],{},"学生管理系统。",[30,152921,152922],{},"销售数据统计和可视化。",[14,152924,152926],{"id":152925},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[51,152928,152930],{"id":152929},"_1221-需求","12.2.1 需求",[19,152932,152933],{},"实现一个命令行学生管理系统：",[765,152935,152936,152939,152942,152945,152948,152951,152954],{},[30,152937,152938],{},"添加学生。",[30,152940,152941],{},"删除学生。",[30,152943,152944],{},"修改学生。",[30,152946,152947],{},"查询学生。",[30,152949,152950],{},"显示所有学生。",[30,152952,152953],{},"保存到 JSON 文件。",[30,152955,152956],{},"程序启动时自动读取 JSON 文件。",[19,152958,152959],{},"学生字段：",[99,152961,152964],{"className":152962,"code":152963,"language":6524,"meta":104},[6522],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[106,152965,152963],{"__ignoreMap":104},[14,152967,152969],{"id":152968},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[99,152971,152973],{"className":31553,"code":152972,"language":31555,"meta":104,"style":104},"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",[106,152974,152975,152981,152991,152995,153009,153013,153017,153026,153038,153044,153048,153054,153085,153095,153102,153113,153119,153123,153127,153137,153168,153194,153198,153202,153211,153222,153233,153244,153255,153266,153277,153288,153292,153296,153306,153318,153334,153341,153348,153352,153356,153366,153374,153381,153394,153404,153415,153419,153423,153432,153440,153446,153458,153466,153477,153481,153485,153494,153510,153514,153521,153532,153537,153541,153557,153572,153587,153591,153596,153604,153612,153620,153628,153632,153637,153648,153652,153656,153665,153680,153690,153694,153706,153717,153721,153725,153730,153734,153745,153749,153753,153762,153777,153785,153789,153801,153811,153815,153819,153834,153847,153860,153864,153877,153889,153901,153905,153909,153920,153924,153928,153937,153952,153960,153964,153976,153986,153990,153994,153999,154003,154007,154017,154023,154045,154064,154083,154102,154107,154111,154115,154124,154132,154143,154147,154151,154177,154187,154192,154196,154200,154208,154218,154222,154230,154235,154251,154255,154269,154274,154288,154293,154306,154311,154324,154329,154342,154347,154360,154371,154375,154381,154392,154396,154400,154412],{"__ignoreMap":104},[109,152976,152977,152979],{"class":111,"line":112},[109,152978,31567],{"class":122},[109,152980,148266],{"class":126},[109,152982,152983,152985,152987,152989],{"class":111,"line":119},[109,152984,31912],{"class":122},[109,152986,109486],{"class":126},[109,152988,31567],{"class":122},[109,152990,109491],{"class":126},[109,152992,152993],{"class":111,"line":140},[109,152994,158],{"emptyLinePlaceholder":157},[109,152996,152997,153000,153002,153004,153007],{"class":111,"line":154},[109,152998,152999],{"class":133},"DATA_FILE",[109,153001,14737],{"class":122},[109,153003,109720],{"class":126},[109,153005,153006],{"class":278},"\"students.json\"",[109,153008,1330],{"class":126},[109,153010,153011],{"class":111,"line":161},[109,153012,158],{"emptyLinePlaceholder":157},[109,153014,153015],{"class":111,"line":167},[109,153016,158],{"emptyLinePlaceholder":157},[109,153018,153019,153021,153024],{"class":111,"line":185},[109,153020,33122],{"class":122},[109,153022,153023],{"class":211}," load_students",[109,153025,33128],{"class":126},[109,153027,153028,153030,153032,153035],{"class":111,"line":201},[109,153029,4446],{"class":122},[109,153031,40105],{"class":122},[109,153033,153034],{"class":133}," DATA_FILE",[109,153036,153037],{"class":126},".exists():\n",[109,153039,153040,153042],{"class":111,"line":206},[109,153041,15925],{"class":122},[109,153043,53013],{"class":126},[109,153045,153046],{"class":111,"line":218},[109,153047,158],{"emptyLinePlaceholder":157},[109,153049,153050,153052],{"class":111,"line":223},[109,153051,126959],{"class":122},[109,153053,5082],{"class":126},[109,153055,153056,153059,153061,153063,153065,153067,153069,153071,153073,153075,153077,153079,153081,153083],{"class":111,"line":229},[109,153057,153058],{"class":122},"        with",[109,153060,147966],{"class":133},[109,153062,714],{"class":126},[109,153064,152999],{"class":133},[109,153066,13608],{"class":126},[109,153068,147976],{"class":278},[109,153070,13608],{"class":126},[109,153072,147981],{"class":6553},[109,153074,130],{"class":122},[109,153076,147986],{"class":278},[109,153078,14887],{"class":126},[109,153080,32558],{"class":122},[109,153082,149328],{"class":6553},[109,153084,5082],{"class":126},[109,153086,153087,153089,153091,153093],{"class":111,"line":244},[109,153088,16905],{"class":122},[109,153090,149339],{"class":126},[109,153092,46529],{"class":6553},[109,153094,1330],{"class":126},[109,153096,153097,153099],{"class":111,"line":258},[109,153098,126987],{"class":122},[109,153100,153101],{"class":126}," json.JSONDecodeError:\n",[109,153103,153104,153106,153108,153111],{"class":111,"line":263},[109,153105,33626],{"class":133},[109,153107,714],{"class":126},[109,153109,153110],{"class":278},"\"数据文件格式错误，已使用空数据启动\"",[109,153112,1330],{"class":126},[109,153114,153115,153117],{"class":111,"line":269},[109,153116,15925],{"class":122},[109,153118,53013],{"class":126},[109,153120,153121],{"class":111,"line":304},[109,153122,158],{"emptyLinePlaceholder":157},[109,153124,153125],{"class":111,"line":331},[109,153126,158],{"emptyLinePlaceholder":157},[109,153128,153129,153131,153134],{"class":111,"line":336},[109,153130,33122],{"class":122},[109,153132,153133],{"class":211}," save_students",[109,153135,153136],{"class":126},"(students):\n",[109,153138,153139,153141,153143,153145,153147,153149,153152,153154,153156,153158,153160,153162,153164,153166],{"class":111,"line":364},[109,153140,35353],{"class":122},[109,153142,147966],{"class":133},[109,153144,714],{"class":126},[109,153146,152999],{"class":133},[109,153148,13608],{"class":126},[109,153150,153151],{"class":278},"\"w\"",[109,153153,13608],{"class":126},[109,153155,147981],{"class":6553},[109,153157,130],{"class":122},[109,153159,147986],{"class":278},[109,153161,14887],{"class":126},[109,153163,32558],{"class":122},[109,153165,149328],{"class":6553},[109,153167,5082],{"class":126},[109,153169,153170,153173,153175,153177,153179,153181,153183,153185,153188,153190,153192],{"class":111,"line":391},[109,153171,153172],{"class":126},"        json.dump(students, ",[109,153174,46529],{"class":6553},[109,153176,13608],{"class":126},[109,153178,148312],{"class":6553},[109,153180,130],{"class":122},[109,153182,35162],{"class":133},[109,153184,13608],{"class":126},[109,153186,153187],{"class":6553},"indent",[109,153189,130],{"class":122},[109,153191,1618],{"class":133},[109,153193,1330],{"class":126},[109,153195,153196],{"class":111,"line":396},[109,153197,158],{"emptyLinePlaceholder":157},[109,153199,153200],{"class":111,"line":402},[109,153201,158],{"emptyLinePlaceholder":157},[109,153203,153204,153206,153209],{"class":111,"line":419},[109,153205,33122],{"class":122},[109,153207,153208],{"class":211}," show_menu",[109,153210,33128],{"class":126},[109,153212,153213,153215,153217,153220],{"class":111,"line":435},[109,153214,32474],{"class":133},[109,153216,714],{"class":126},[109,153218,153219],{"class":278},"\"====== 学生管理系统 ======\"",[109,153221,1330],{"class":126},[109,153223,153224,153226,153228,153231],{"class":111,"line":440},[109,153225,32474],{"class":133},[109,153227,714],{"class":126},[109,153229,153230],{"class":278},"\"1. 添加学生\"",[109,153232,1330],{"class":126},[109,153234,153235,153237,153239,153242],{"class":111,"line":467},[109,153236,32474],{"class":133},[109,153238,714],{"class":126},[109,153240,153241],{"class":278},"\"2. 删除学生\"",[109,153243,1330],{"class":126},[109,153245,153246,153248,153250,153253],{"class":111,"line":494},[109,153247,32474],{"class":133},[109,153249,714],{"class":126},[109,153251,153252],{"class":278},"\"3. 修改学生\"",[109,153254,1330],{"class":126},[109,153256,153257,153259,153261,153264],{"class":111,"line":499},[109,153258,32474],{"class":133},[109,153260,714],{"class":126},[109,153262,153263],{"class":278},"\"4. 查询学生\"",[109,153265,1330],{"class":126},[109,153267,153268,153270,153272,153275],{"class":111,"line":526},[109,153269,32474],{"class":133},[109,153271,714],{"class":126},[109,153273,153274],{"class":278},"\"5. 显示所有学生\"",[109,153276,1330],{"class":126},[109,153278,153279,153281,153283,153286],{"class":111,"line":552},[109,153280,32474],{"class":133},[109,153282,714],{"class":126},[109,153284,153285],{"class":278},"\"0. 退出系统\"",[109,153287,1330],{"class":126},[109,153289,153290],{"class":111,"line":557},[109,153291,158],{"emptyLinePlaceholder":157},[109,153293,153294],{"class":111,"line":584},[109,153295,158],{"emptyLinePlaceholder":157},[109,153297,153298,153300,153303],{"class":111,"line":611},[109,153299,33122],{"class":122},[109,153301,153302],{"class":211}," find_student",[109,153304,153305],{"class":126},"(students, student_id):\n",[109,153307,153308,153310,153313,153315],{"class":111,"line":616},[109,153309,1302],{"class":122},[109,153311,153312],{"class":126}," student ",[109,153314,27218],{"class":122},[109,153316,153317],{"class":126}," students:\n",[109,153319,153320,153322,153325,153327,153329,153331],{"class":111,"line":633},[109,153321,3852],{"class":122},[109,153323,153324],{"class":126}," student[",[109,153326,152622],{"class":278},[109,153328,5780],{"class":126},[109,153330,4296],{"class":122},[109,153332,153333],{"class":126}," student_id:\n",[109,153335,153336,153338],{"class":111,"line":649},[109,153337,16905],{"class":122},[109,153339,153340],{"class":126}," student\n",[109,153342,153343,153345],{"class":111,"line":676},[109,153344,731],{"class":122},[109,153346,153347],{"class":133}," None\n",[109,153349,153350],{"class":111,"line":703},[109,153351,158],{"emptyLinePlaceholder":157},[109,153353,153354],{"class":111,"line":708},[109,153355,158],{"emptyLinePlaceholder":157},[109,153357,153358,153360,153363],{"class":111,"line":723},[109,153359,33122],{"class":122},[109,153361,153362],{"class":211}," input_int",[109,153364,153365],{"class":126},"(prompt):\n",[109,153367,153368,153370,153372],{"class":111,"line":728},[109,153369,3612],{"class":122},[109,153371,96467],{"class":133},[109,153373,5082],{"class":126},[109,153375,153376,153379],{"class":111,"line":739},[109,153377,153378],{"class":122},"        try",[109,153380,5082],{"class":126},[109,153382,153383,153385,153387,153389,153391],{"class":111,"line":9352},[109,153384,16905],{"class":122},[109,153386,173],{"class":133},[109,153388,714],{"class":126},[109,153390,54996],{"class":133},[109,153392,153393],{"class":126},"(prompt))\n",[109,153395,153396,153399,153402],{"class":111,"line":9364},[109,153397,153398],{"class":122},"        except",[109,153400,153401],{"class":133}," ValueError",[109,153403,5082],{"class":126},[109,153405,153406,153408,153410,153413],{"class":111,"line":9376},[109,153407,35825],{"class":133},[109,153409,714],{"class":126},[109,153411,153412],{"class":278},"\"请输入整数\"",[109,153414,1330],{"class":126},[109,153416,153417],{"class":111,"line":11034},[109,153418,158],{"emptyLinePlaceholder":157},[109,153420,153421],{"class":111,"line":11059},[109,153422,158],{"emptyLinePlaceholder":157},[109,153424,153425,153427,153430],{"class":111,"line":11082},[109,153426,33122],{"class":122},[109,153428,153429],{"class":211}," input_float",[109,153431,153365],{"class":126},[109,153433,153434,153436,153438],{"class":111,"line":11106},[109,153435,3612],{"class":122},[109,153437,96467],{"class":133},[109,153439,5082],{"class":126},[109,153441,153442,153444],{"class":111,"line":11111},[109,153443,153378],{"class":122},[109,153445,5082],{"class":126},[109,153447,153448,153450,153452,153454,153456],{"class":111,"line":11116},[109,153449,16905],{"class":122},[109,153451,110972],{"class":133},[109,153453,714],{"class":126},[109,153455,54996],{"class":133},[109,153457,153393],{"class":126},[109,153459,153460,153462,153464],{"class":111,"line":11121},[109,153461,153398],{"class":122},[109,153463,153401],{"class":133},[109,153465,5082],{"class":126},[109,153467,153468,153470,153472,153475],{"class":111,"line":11130},[109,153469,35825],{"class":133},[109,153471,714],{"class":126},[109,153473,153474],{"class":278},"\"请输入数字\"",[109,153476,1330],{"class":126},[109,153478,153479],{"class":111,"line":11135},[109,153480,158],{"emptyLinePlaceholder":157},[109,153482,153483],{"class":111,"line":11141},[109,153484,158],{"emptyLinePlaceholder":157},[109,153486,153487,153489,153492],{"class":111,"line":11162},[109,153488,33122],{"class":122},[109,153490,153491],{"class":211}," add_student",[109,153493,153136],{"class":126},[109,153495,153496,153499,153501,153503,153505,153508],{"class":111,"line":11168},[109,153497,153498],{"class":126},"    student_id ",[109,153500,130],{"class":122},[109,153502,61780],{"class":133},[109,153504,714],{"class":126},[109,153506,153507],{"class":278},"\"请输入学号:\"",[109,153509,1330],{"class":126},[109,153511,153512],{"class":111,"line":11182},[109,153513,158],{"emptyLinePlaceholder":157},[109,153515,153516,153518],{"class":111,"line":11188},[109,153517,4446],{"class":122},[109,153519,153520],{"class":126}," find_student(students, student_id):\n",[109,153522,153523,153525,153527,153530],{"class":111,"line":11215},[109,153524,33626],{"class":133},[109,153526,714],{"class":126},[109,153528,153529],{"class":278},"\"学号已存在\"",[109,153531,1330],{"class":126},[109,153533,153534],{"class":111,"line":11224},[109,153535,153536],{"class":122},"        return\n",[109,153538,153539],{"class":111,"line":11230},[109,153540,158],{"emptyLinePlaceholder":157},[109,153542,153543,153546,153548,153550,153552,153555],{"class":111,"line":11238},[109,153544,153545],{"class":126},"    name ",[109,153547,130],{"class":122},[109,153549,61780],{"class":133},[109,153551,714],{"class":126},[109,153553,153554],{"class":278},"\"请输入姓名:\"",[109,153556,1330],{"class":126},[109,153558,153559,153562,153564,153567,153570],{"class":111,"line":11243},[109,153560,153561],{"class":126},"    age ",[109,153563,130],{"class":122},[109,153565,153566],{"class":126}," input_int(",[109,153568,153569],{"class":278},"\"请输入年龄:\"",[109,153571,1330],{"class":126},[109,153573,153574,153577,153579,153582,153585],{"class":111,"line":17777},[109,153575,153576],{"class":126},"    score ",[109,153578,130],{"class":122},[109,153580,153581],{"class":126}," input_float(",[109,153583,153584],{"class":278},"\"请输入成绩:\"",[109,153586,1330],{"class":126},[109,153588,153589],{"class":111,"line":17783},[109,153590,158],{"emptyLinePlaceholder":157},[109,153592,153593],{"class":111,"line":17806},[109,153594,153595],{"class":126},"    students.append({\n",[109,153597,153598,153601],{"class":111,"line":17812},[109,153599,153600],{"class":278},"        \"student_id\"",[109,153602,153603],{"class":126},": student_id,\n",[109,153605,153606,153609],{"class":111,"line":17835},[109,153607,153608],{"class":278},"        \"name\"",[109,153610,153611],{"class":126},": name,\n",[109,153613,153614,153617],{"class":111,"line":17849},[109,153615,153616],{"class":278},"        \"age\"",[109,153618,153619],{"class":126},": age,\n",[109,153621,153622,153625],{"class":111,"line":17869},[109,153623,153624],{"class":278},"        \"score\"",[109,153626,153627],{"class":126},": score,\n",[109,153629,153630],{"class":111,"line":17875},[109,153631,34636],{"class":126},[109,153633,153634],{"class":111,"line":17886},[109,153635,153636],{"class":126},"    save_students(students)\n",[109,153638,153639,153641,153643,153646],{"class":111,"line":17909},[109,153640,32474],{"class":133},[109,153642,714],{"class":126},[109,153644,153645],{"class":278},"\"添加成功\"",[109,153647,1330],{"class":126},[109,153649,153650],{"class":111,"line":17931},[109,153651,158],{"emptyLinePlaceholder":157},[109,153653,153654],{"class":111,"line":17936},[109,153655,158],{"emptyLinePlaceholder":157},[109,153657,153658,153660,153663],{"class":111,"line":17942},[109,153659,33122],{"class":122},[109,153661,153662],{"class":211}," delete_student",[109,153664,153136],{"class":126},[109,153666,153667,153669,153671,153673,153675,153678],{"class":111,"line":17956},[109,153668,153498],{"class":126},[109,153670,130],{"class":122},[109,153672,61780],{"class":133},[109,153674,714],{"class":126},[109,153676,153677],{"class":278},"\"请输入要删除的学号:\"",[109,153679,1330],{"class":126},[109,153681,153682,153685,153687],{"class":111,"line":17969},[109,153683,153684],{"class":126},"    student ",[109,153686,130],{"class":122},[109,153688,153689],{"class":126}," find_student(students, student_id)\n",[109,153691,153692],{"class":111,"line":17974},[109,153693,158],{"emptyLinePlaceholder":157},[109,153695,153696,153698,153700,153702,153704],{"class":111,"line":17988},[109,153697,4446],{"class":122},[109,153699,153312],{"class":126},[109,153701,40102],{"class":122},[109,153703,40108],{"class":133},[109,153705,5082],{"class":126},[109,153707,153708,153710,153712,153715],{"class":111,"line":17993},[109,153709,33626],{"class":133},[109,153711,714],{"class":126},[109,153713,153714],{"class":278},"\"学生不存在\"",[109,153716,1330],{"class":126},[109,153718,153719],{"class":111,"line":17999},[109,153720,153536],{"class":122},[109,153722,153723],{"class":111,"line":18004},[109,153724,158],{"emptyLinePlaceholder":157},[109,153726,153727],{"class":111,"line":18018},[109,153728,153729],{"class":126},"    students.remove(student)\n",[109,153731,153732],{"class":111,"line":18023},[109,153733,153636],{"class":126},[109,153735,153736,153738,153740,153743],{"class":111,"line":18028},[109,153737,32474],{"class":133},[109,153739,714],{"class":126},[109,153741,153742],{"class":278},"\"删除成功\"",[109,153744,1330],{"class":126},[109,153746,153747],{"class":111,"line":18042},[109,153748,158],{"emptyLinePlaceholder":157},[109,153750,153751],{"class":111,"line":18054},[109,153752,158],{"emptyLinePlaceholder":157},[109,153754,153755,153757,153760],{"class":111,"line":18059},[109,153756,33122],{"class":122},[109,153758,153759],{"class":211}," update_student",[109,153761,153136],{"class":126},[109,153763,153764,153766,153768,153770,153772,153775],{"class":111,"line":18072},[109,153765,153498],{"class":126},[109,153767,130],{"class":122},[109,153769,61780],{"class":133},[109,153771,714],{"class":126},[109,153773,153774],{"class":278},"\"请输入要修改的学号:\"",[109,153776,1330],{"class":126},[109,153778,153779,153781,153783],{"class":111,"line":18077},[109,153780,153684],{"class":126},[109,153782,130],{"class":122},[109,153784,153689],{"class":126},[109,153786,153787],{"class":111,"line":18082},[109,153788,158],{"emptyLinePlaceholder":157},[109,153790,153791,153793,153795,153797,153799],{"class":111,"line":18087},[109,153792,4446],{"class":122},[109,153794,153312],{"class":126},[109,153796,40102],{"class":122},[109,153798,40108],{"class":133},[109,153800,5082],{"class":126},[109,153802,153803,153805,153807,153809],{"class":111,"line":18100},[109,153804,33626],{"class":133},[109,153806,714],{"class":126},[109,153808,153714],{"class":278},[109,153810,1330],{"class":126},[109,153812,153813],{"class":111,"line":18105},[109,153814,153536],{"class":122},[109,153816,153817],{"class":111,"line":33808},[109,153818,158],{"emptyLinePlaceholder":157},[109,153820,153821,153823,153825,153827,153829,153832],{"class":111,"line":33814},[109,153822,153545],{"class":126},[109,153824,130],{"class":122},[109,153826,61780],{"class":133},[109,153828,714],{"class":126},[109,153830,153831],{"class":278},"\"请输入新姓名:\"",[109,153833,1330],{"class":126},[109,153835,153836,153838,153840,153842,153845],{"class":111,"line":33820},[109,153837,153561],{"class":126},[109,153839,130],{"class":122},[109,153841,153566],{"class":126},[109,153843,153844],{"class":278},"\"请输入新年龄:\"",[109,153846,1330],{"class":126},[109,153848,153849,153851,153853,153855,153858],{"class":111,"line":33826},[109,153850,153576],{"class":126},[109,153852,130],{"class":122},[109,153854,153581],{"class":126},[109,153856,153857],{"class":278},"\"请输入新成绩:\"",[109,153859,1330],{"class":126},[109,153861,153862],{"class":111,"line":33832},[109,153863,158],{"emptyLinePlaceholder":157},[109,153865,153866,153869,153871,153873,153875],{"class":111,"line":33843},[109,153867,153868],{"class":126},"    student[",[109,153870,63854],{"class":278},[109,153872,5780],{"class":126},[109,153874,130],{"class":122},[109,153876,150970],{"class":126},[109,153878,153879,153881,153883,153885,153887],{"class":111,"line":33849},[109,153880,153868],{"class":126},[109,153882,70299],{"class":278},[109,153884,5780],{"class":126},[109,153886,130],{"class":122},[109,153888,150982],{"class":126},[109,153890,153891,153893,153895,153897,153899],{"class":111,"line":33869},[109,153892,153868],{"class":126},[109,153894,152647],{"class":278},[109,153896,5780],{"class":126},[109,153898,130],{"class":122},[109,153900,2967],{"class":126},[109,153902,153903],{"class":111,"line":33875},[109,153904,158],{"emptyLinePlaceholder":157},[109,153906,153907],{"class":111,"line":33886},[109,153908,153636],{"class":126},[109,153910,153911,153913,153915,153918],{"class":111,"line":33892},[109,153912,32474],{"class":133},[109,153914,714],{"class":126},[109,153916,153917],{"class":278},"\"修改成功\"",[109,153919,1330],{"class":126},[109,153921,153922],{"class":111,"line":33898},[109,153923,158],{"emptyLinePlaceholder":157},[109,153925,153926],{"class":111,"line":33904},[109,153927,158],{"emptyLinePlaceholder":157},[109,153929,153930,153932,153935],{"class":111,"line":33910},[109,153931,33122],{"class":122},[109,153933,153934],{"class":211}," query_student",[109,153936,153136],{"class":126},[109,153938,153939,153941,153943,153945,153947,153950],{"class":111,"line":33916},[109,153940,153498],{"class":126},[109,153942,130],{"class":122},[109,153944,61780],{"class":133},[109,153946,714],{"class":126},[109,153948,153949],{"class":278},"\"请输入要查询的学号:\"",[109,153951,1330],{"class":126},[109,153953,153954,153956,153958],{"class":111,"line":33922},[109,153955,153684],{"class":126},[109,153957,130],{"class":122},[109,153959,153689],{"class":126},[109,153961,153962],{"class":111,"line":33928},[109,153963,158],{"emptyLinePlaceholder":157},[109,153965,153966,153968,153970,153972,153974],{"class":111,"line":33948},[109,153967,4446],{"class":122},[109,153969,153312],{"class":126},[109,153971,40102],{"class":122},[109,153973,40108],{"class":133},[109,153975,5082],{"class":126},[109,153977,153978,153980,153982,153984],{"class":111,"line":33954},[109,153979,33626],{"class":133},[109,153981,714],{"class":126},[109,153983,153714],{"class":278},[109,153985,1330],{"class":126},[109,153987,153988],{"class":111,"line":33970},[109,153989,153536],{"class":122},[109,153991,153992],{"class":111,"line":33976},[109,153993,158],{"emptyLinePlaceholder":157},[109,153995,153996],{"class":111,"line":33990},[109,153997,153998],{"class":126},"    print_student(student)\n",[109,154000,154001],{"class":111,"line":33996},[109,154002,158],{"emptyLinePlaceholder":157},[109,154004,154005],{"class":111,"line":34011},[109,154006,158],{"emptyLinePlaceholder":157},[109,154008,154009,154011,154014],{"class":111,"line":34017},[109,154010,33122],{"class":122},[109,154012,154013],{"class":211}," print_student",[109,154015,154016],{"class":126},"(student):\n",[109,154018,154019,154021],{"class":111,"line":34026},[109,154020,32474],{"class":133},[109,154022,152614],{"class":126},[109,154024,154025,154028,154030,154032,154035,154038,154040,154043],{"class":111,"line":34032},[109,154026,154027],{"class":122},"        f",[109,154029,1789],{"class":278},[109,154031,2427],{"class":133},[109,154033,154034],{"class":126},"student[",[109,154036,154037],{"class":278},"'student_id'",[109,154039,2470],{"class":126},[109,154041,154042],{"class":133},"}\\t",[109,154044,26308],{"class":278},[109,154046,154047,154049,154051,154053,154055,154058,154060,154062],{"class":111,"line":34041},[109,154048,154027],{"class":122},[109,154050,1789],{"class":278},[109,154052,2427],{"class":133},[109,154054,154034],{"class":126},[109,154056,154057],{"class":278},"'name'",[109,154059,2470],{"class":126},[109,154061,154042],{"class":133},[109,154063,26308],{"class":278},[109,154065,154066,154068,154070,154072,154074,154077,154079,154081],{"class":111,"line":34047},[109,154067,154027],{"class":122},[109,154069,1789],{"class":278},[109,154071,2427],{"class":133},[109,154073,154034],{"class":126},[109,154075,154076],{"class":278},"'age'",[109,154078,2470],{"class":126},[109,154080,154042],{"class":133},[109,154082,26308],{"class":278},[109,154084,154085,154087,154089,154091,154093,154096,154098,154100],{"class":111,"line":34053},[109,154086,154027],{"class":122},[109,154088,1789],{"class":278},[109,154090,2427],{"class":133},[109,154092,154034],{"class":126},[109,154094,154095],{"class":278},"'score'",[109,154097,2470],{"class":126},[109,154099,2476],{"class":133},[109,154101,26308],{"class":278},[109,154103,154104],{"class":111,"line":34062},[109,154105,154106],{"class":126},"    )\n",[109,154108,154109],{"class":111,"line":34068},[109,154110,158],{"emptyLinePlaceholder":157},[109,154112,154113],{"class":111,"line":34079},[109,154114,158],{"emptyLinePlaceholder":157},[109,154116,154117,154119,154122],{"class":111,"line":34085},[109,154118,33122],{"class":122},[109,154120,154121],{"class":211}," show_all_students",[109,154123,153136],{"class":126},[109,154125,154126,154128,154130],{"class":111,"line":34104},[109,154127,4446],{"class":122},[109,154129,40105],{"class":122},[109,154131,153317],{"class":126},[109,154133,154134,154136,154138,154141],{"class":111,"line":34110},[109,154135,33626],{"class":133},[109,154137,714],{"class":126},[109,154139,154140],{"class":278},"\"暂无学生\"",[109,154142,1330],{"class":126},[109,154144,154145],{"class":111,"line":34121},[109,154146,153536],{"class":122},[109,154148,154149],{"class":111,"line":34127},[109,154150,158],{"emptyLinePlaceholder":157},[109,154152,154153,154155,154157,154160,154162,154165,154167,154170,154172,154175],{"class":111,"line":34147},[109,154154,32474],{"class":133},[109,154156,714],{"class":126},[109,154158,154159],{"class":278},"\"学号",[109,154161,2627],{"class":133},[109,154163,154164],{"class":278},"姓名",[109,154166,2627],{"class":133},[109,154168,154169],{"class":278},"年龄",[109,154171,2627],{"class":133},[109,154173,154174],{"class":278},"成绩\"",[109,154176,1330],{"class":126},[109,154178,154179,154181,154183,154185],{"class":111,"line":34163},[109,154180,1302],{"class":122},[109,154182,153312],{"class":126},[109,154184,27218],{"class":122},[109,154186,153317],{"class":126},[109,154188,154189],{"class":111,"line":34169},[109,154190,154191],{"class":126},"        print_student(student)\n",[109,154193,154194],{"class":111,"line":34183},[109,154195,158],{"emptyLinePlaceholder":157},[109,154197,154198],{"class":111,"line":34189},[109,154199,158],{"emptyLinePlaceholder":157},[109,154201,154202,154204,154206],{"class":111,"line":34195},[109,154203,33122],{"class":122},[109,154205,212],{"class":211},[109,154207,33128],{"class":126},[109,154209,154210,154213,154215],{"class":111,"line":34206},[109,154211,154212],{"class":126},"    students ",[109,154214,130],{"class":122},[109,154216,154217],{"class":126}," load_students()\n",[109,154219,154220],{"class":111,"line":34212},[109,154221,158],{"emptyLinePlaceholder":157},[109,154223,154224,154226,154228],{"class":111,"line":34218},[109,154225,3612],{"class":122},[109,154227,96467],{"class":133},[109,154229,5082],{"class":126},[109,154231,154232],{"class":111,"line":34228},[109,154233,154234],{"class":126},"        show_menu()\n",[109,154236,154237,154240,154242,154244,154246,154249],{"class":111,"line":34234},[109,154238,154239],{"class":126},"        choice ",[109,154241,130],{"class":122},[109,154243,61780],{"class":133},[109,154245,714],{"class":126},[109,154247,154248],{"class":278},"\"请输入操作:\"",[109,154250,1330],{"class":126},[109,154252,154253],{"class":111,"line":34245},[109,154254,158],{"emptyLinePlaceholder":157},[109,154256,154257,154259,154262,154264,154267],{"class":111,"line":34251},[109,154258,3852],{"class":122},[109,154260,154261],{"class":126}," choice ",[109,154263,4296],{"class":122},[109,154265,154266],{"class":278}," \"1\"",[109,154268,5082],{"class":126},[109,154270,154271],{"class":111,"line":34261},[109,154272,154273],{"class":126},"            add_student(students)\n",[109,154275,154276,154279,154281,154283,154286],{"class":111,"line":34266},[109,154277,154278],{"class":122},"        elif",[109,154280,154261],{"class":126},[109,154282,4296],{"class":122},[109,154284,154285],{"class":278}," \"2\"",[109,154287,5082],{"class":126},[109,154289,154290],{"class":111,"line":34272},[109,154291,154292],{"class":126},"            delete_student(students)\n",[109,154294,154295,154297,154299,154301,154304],{"class":111,"line":34321},[109,154296,154278],{"class":122},[109,154298,154261],{"class":126},[109,154300,4296],{"class":122},[109,154302,154303],{"class":278}," \"3\"",[109,154305,5082],{"class":126},[109,154307,154308],{"class":111,"line":34368},[109,154309,154310],{"class":126},"            update_student(students)\n",[109,154312,154313,154315,154317,154319,154322],{"class":111,"line":34373},[109,154314,154278],{"class":122},[109,154316,154261],{"class":126},[109,154318,4296],{"class":122},[109,154320,154321],{"class":278}," \"4\"",[109,154323,5082],{"class":126},[109,154325,154326],{"class":111,"line":34379},[109,154327,154328],{"class":126},"            query_student(students)\n",[109,154330,154331,154333,154335,154337,154340],{"class":111,"line":34398},[109,154332,154278],{"class":122},[109,154334,154261],{"class":126},[109,154336,4296],{"class":122},[109,154338,154339],{"class":278}," \"5\"",[109,154341,5082],{"class":126},[109,154343,154344],{"class":111,"line":34404},[109,154345,154346],{"class":126},"            show_all_students(students)\n",[109,154348,154349,154351,154353,154355,154358],{"class":111,"line":34424},[109,154350,154278],{"class":122},[109,154352,154261],{"class":126},[109,154354,4296],{"class":122},[109,154356,154357],{"class":278}," \"0\"",[109,154359,5082],{"class":126},[109,154361,154362,154364,154366,154369],{"class":111,"line":34430},[109,154363,35825],{"class":133},[109,154365,714],{"class":126},[109,154367,154368],{"class":278},"\"退出系统\"",[109,154370,1330],{"class":126},[109,154372,154373],{"class":111,"line":34436},[109,154374,116273],{"class":122},[109,154376,154377,154379],{"class":111,"line":34446},[109,154378,3889],{"class":122},[109,154380,5082],{"class":126},[109,154382,154383,154385,154387,154390],{"class":111,"line":34451},[109,154384,35825],{"class":133},[109,154386,714],{"class":126},[109,154388,154389],{"class":278},"\"输入错误\"",[109,154391,1330],{"class":126},[109,154393,154394],{"class":111,"line":34457},[109,154395,158],{"emptyLinePlaceholder":157},[109,154397,154398],{"class":111,"line":34473},[109,154399,158],{"emptyLinePlaceholder":157},[109,154401,154402,154404,154406,154408,154410],{"class":111,"line":34518},[109,154403,2922],{"class":122},[109,154405,32395],{"class":133},[109,154407,102734],{"class":122},[109,154409,102737],{"class":278},[109,154411,5082],{"class":126},[109,154413,154414],{"class":111,"line":34524},[109,154415,102744],{"class":126},[19,154417,154418],{},"这个项目串联了：",[765,154420,154421,154424,154427,154430,154433,154435],{},[30,154422,154423],{},"菜单循环。",[30,154425,154426],{},"函数封装。",[30,154428,154429],{},"列表字典。",[30,154431,154432],{},"JSON 读写。",[30,154434,152902],{},[30,154436,154437,29560],{},[106,154438,154439],{},"if __name__ == \"__main__\"",[14,154441,154443],{"id":154442},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154445,154446],{},"可以进一步拆成两个类：",[765,154448,154449,154454],{},[30,154450,154451,154453],{},[106,154452,150743],{},"：表示单个学生。",[30,154455,154456,154458],{},[106,154457,152769],{},"：负责学生增删改查和文件保存。",[19,154460,154461],{},"示意代码：",[99,154463,154465],{"className":31553,"code":154464,"language":31555,"meta":104,"style":104},"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",[106,154466,154467,154477,154481,154485,154489,154497,154504,154510,154516,154522,154526,154534,154540,154550,154560,154570,154580,154584,154588,154594,154602,154610,154618,154626,154634,154642],{"__ignoreMap":104},[109,154468,154469,154471,154473,154475],{"class":111,"line":112},[109,154470,31912],{"class":122},[109,154472,152327],{"class":126},[109,154474,31567],{"class":122},[109,154476,152332],{"class":126},[109,154478,154479],{"class":111,"line":119},[109,154480,158],{"emptyLinePlaceholder":157},[109,154482,154483],{"class":111,"line":140},[109,154484,158],{"emptyLinePlaceholder":157},[109,154486,154487],{"class":111,"line":154},[109,154488,152345],{"class":211},[109,154490,154491,154493,154495],{"class":111,"line":161},[109,154492,15867],{"class":122},[109,154494,9224],{"class":211},[109,154496,5082],{"class":126},[109,154498,154499,154502],{"class":111,"line":167},[109,154500,154501],{"class":126},"    student_id: ",[109,154503,152361],{"class":133},[109,154505,154506,154508],{"class":111,"line":185},[109,154507,152358],{"class":126},[109,154509,152361],{"class":133},[109,154511,154512,154514],{"class":111,"line":201},[109,154513,152366],{"class":126},[109,154515,152369],{"class":133},[109,154517,154518,154520],{"class":111,"line":206},[109,154519,152374],{"class":126},[109,154521,152377],{"class":133},[109,154523,154524],{"class":111,"line":218},[109,154525,158],{"emptyLinePlaceholder":157},[109,154527,154528,154530,154532],{"class":111,"line":223},[109,154529,31976],{"class":122},[109,154531,152525],{"class":211},[109,154533,31982],{"class":126},[109,154535,154536,154538],{"class":111,"line":229},[109,154537,15925],{"class":122},[109,154539,16745],{"class":126},[109,154541,154542,154544,154546,154548],{"class":111,"line":244},[109,154543,152538],{"class":278},[109,154545,52612],{"class":126},[109,154547,31998],{"class":133},[109,154549,152545],{"class":126},[109,154551,154552,154554,154556,154558],{"class":111,"line":258},[109,154553,152550],{"class":278},[109,154555,52612],{"class":126},[109,154557,31998],{"class":133},[109,154559,152557],{"class":126},[109,154561,154562,154564,154566,154568],{"class":111,"line":263},[109,154563,152562],{"class":278},[109,154565,52612],{"class":126},[109,154567,31998],{"class":133},[109,154569,152569],{"class":126},[109,154571,154572,154574,154576,154578],{"class":111,"line":269},[109,154573,152574],{"class":278},[109,154575,52612],{"class":126},[109,154577,31998],{"class":133},[109,154579,152581],{"class":126},[109,154581,154582],{"class":111,"line":304},[109,154583,3884],{"class":126},[109,154585,154586],{"class":111,"line":331},[109,154587,158],{"emptyLinePlaceholder":157},[109,154589,154590,154592],{"class":111,"line":336},[109,154591,152189],{"class":211},[109,154593,152192],{"class":133},[109,154595,154596,154598,154600],{"class":111,"line":364},[109,154597,31976],{"class":122},[109,154599,152602],{"class":211},[109,154601,152605],{"class":126},[109,154603,154604,154606,154608],{"class":111,"line":391},[109,154605,15925],{"class":122},[109,154607,152209],{"class":133},[109,154609,152614],{"class":126},[109,154611,154612,154614,154616],{"class":111,"line":396},[109,154613,152619],{"class":126},[109,154615,152622],{"class":278},[109,154617,89011],{"class":126},[109,154619,154620,154622,154624],{"class":111,"line":402},[109,154621,152619],{"class":126},[109,154623,63854],{"class":278},[109,154625,89011],{"class":126},[109,154627,154628,154630,154632],{"class":111,"line":419},[109,154629,152619],{"class":126},[109,154631,70299],{"class":278},[109,154633,89011],{"class":126},[109,154635,154636,154638,154640],{"class":111,"line":435},[109,154637,152619],{"class":126},[109,154639,152647],{"class":278},[109,154641,89011],{"class":126},[109,154643,154644],{"class":111,"line":440},[109,154645,39301],{"class":126},[19,154647,154648],{},"管理器示意：",[99,154650,154652],{"className":31553,"code":154651,"language":31555,"meta":104,"style":104},"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",[106,154653,154654,154663,154671,154682,154686,154696,154709,154720,154727,154733,154737,154746,154755,154761,154768],{"__ignoreMap":104},[109,154655,154656,154658,154661],{"class":111,"line":112},[109,154657,15867],{"class":122},[109,154659,154660],{"class":211}," StudentManager",[109,154662,5082],{"class":126},[109,154664,154665,154667,154669],{"class":111,"line":119},[109,154666,31976],{"class":122},[109,154668,31979],{"class":133},[109,154670,31982],{"class":126},[109,154672,154673,154675,154678,154680],{"class":111,"line":140},[109,154674,32020],{"class":133},[109,154676,154677],{"class":126},".students ",[109,154679,130],{"class":122},[109,154681,53013],{"class":126},[109,154683,154684],{"class":111,"line":154},[109,154685,158],{"emptyLinePlaceholder":157},[109,154687,154688,154690,154693],{"class":111,"line":161},[109,154689,31976],{"class":122},[109,154691,154692],{"class":211}," find_by_id",[109,154694,154695],{"class":126},"(self, student_id):\n",[109,154697,154698,154700,154702,154704,154706],{"class":111,"line":167},[109,154699,4747],{"class":122},[109,154701,153312],{"class":126},[109,154703,27218],{"class":122},[109,154705,40048],{"class":133},[109,154707,154708],{"class":126},".students:\n",[109,154710,154711,154713,154716,154718],{"class":111,"line":185},[109,154712,5979],{"class":122},[109,154714,154715],{"class":126}," student.student_id ",[109,154717,4296],{"class":122},[109,154719,153333],{"class":126},[109,154721,154722,154725],{"class":111,"line":201},[109,154723,154724],{"class":122},"                return",[109,154726,153340],{"class":126},[109,154728,154729,154731],{"class":111,"line":206},[109,154730,15925],{"class":122},[109,154732,153347],{"class":133},[109,154734,154735],{"class":111,"line":218},[109,154736,158],{"emptyLinePlaceholder":157},[109,154738,154739,154741,154743],{"class":111,"line":223},[109,154740,31976],{"class":122},[109,154742,6546],{"class":211},[109,154744,154745],{"class":126},"(self, student):\n",[109,154747,154748,154750,154752],{"class":111,"line":229},[109,154749,3852],{"class":122},[109,154751,40048],{"class":133},[109,154753,154754],{"class":126},".find_by_id(student.student_id):\n",[109,154756,154757,154759],{"class":111,"line":244},[109,154758,16905],{"class":122},[109,154760,126982],{"class":133},[109,154762,154763,154765],{"class":111,"line":258},[109,154764,32020],{"class":133},[109,154766,154767],{"class":126},".students.append(student)\n",[109,154769,154770,154772],{"class":111,"line":263},[109,154771,15925],{"class":122},[109,154773,154774],{"class":133}," True\n",[19,154776,154777],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154779,154781],{"id":154780},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[51,154783,154785],{"id":154784},"_1251-数据结构","12.5.1 数据结构",[99,154787,154789],{"className":31553,"code":154788,"language":31555,"meta":104,"style":104},"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",[106,154790,154791,154799,154830,154860,154889,154918],{"__ignoreMap":104},[109,154792,154793,154795,154797],{"class":111,"line":112},[109,154794,149640],{"class":126},[109,154796,130],{"class":122},[109,154798,56622],{"class":126},[109,154800,154801,154803,154805,154807,154809,154811,154814,154816,154819,154821,154823,154825,154828],{"class":111,"line":119},[109,154802,149560],{"class":126},[109,154804,149172],{"class":278},[109,154806,52612],{"class":126},[109,154808,149783],{"class":278},[109,154810,13608],{"class":126},[109,154812,154813],{"class":278},"\"category\"",[109,154815,52612],{"class":126},[109,154817,154818],{"class":278},"\"手机\"",[109,154820,13608],{"class":126},[109,154822,85259],{"class":278},[109,154824,52612],{"class":126},[109,154826,154827],{"class":133},"12000",[109,154829,6267],{"class":126},[109,154831,154832,154834,154836,154838,154840,154842,154844,154846,154849,154851,154853,154855,154858],{"class":111,"line":140},[109,154833,149560],{"class":126},[109,154835,149172],{"class":278},[109,154837,52612],{"class":126},[109,154839,149783],{"class":278},[109,154841,13608],{"class":126},[109,154843,154813],{"class":278},[109,154845,52612],{"class":126},[109,154847,154848],{"class":278},"\"电脑\"",[109,154850,13608],{"class":126},[109,154852,85259],{"class":278},[109,154854,52612],{"class":126},[109,154856,154857],{"class":133},"18000",[109,154859,6267],{"class":126},[109,154861,154862,154864,154866,154868,154870,154872,154874,154876,154878,154880,154882,154884,154887],{"class":111,"line":154},[109,154863,149560],{"class":126},[109,154865,149172],{"class":278},[109,154867,52612],{"class":126},[109,154869,149804],{"class":278},[109,154871,13608],{"class":126},[109,154873,154813],{"class":278},[109,154875,52612],{"class":126},[109,154877,154818],{"class":278},[109,154879,13608],{"class":126},[109,154881,85259],{"class":278},[109,154883,52612],{"class":126},[109,154885,154886],{"class":133},"15000",[109,154888,6267],{"class":126},[109,154890,154891,154893,154895,154897,154899,154901,154903,154905,154907,154909,154911,154913,154916],{"class":111,"line":161},[109,154892,149560],{"class":126},[109,154894,149172],{"class":278},[109,154896,52612],{"class":126},[109,154898,149804],{"class":278},[109,154900,13608],{"class":126},[109,154902,154813],{"class":278},[109,154904,52612],{"class":126},[109,154906,154848],{"class":278},[109,154908,13608],{"class":126},[109,154910,85259],{"class":278},[109,154912,52612],{"class":126},[109,154914,154915],{"class":133},"16000",[109,154917,6267],{"class":126},[109,154919,154920],{"class":111,"line":167},[109,154921,34421],{"class":126},[51,154923,154925],{"id":154924},"_1252-按日期统计","12.5.2 按日期统计",[99,154927,154929],{"className":31553,"code":154928,"language":31555,"meta":104,"style":104},"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",[106,154930,154931,154940,154944,154955,154969,154982,155001,155005],{"__ignoreMap":104},[109,154932,154933,154936,154938],{"class":111,"line":112},[109,154934,154935],{"class":126},"daily_total ",[109,154937,130],{"class":122},[109,154939,89043],{"class":126},[109,154941,154942],{"class":111,"line":119},[109,154943,158],{"emptyLinePlaceholder":157},[109,154945,154946,154948,154950,154952],{"class":111,"line":140},[109,154947,4372],{"class":122},[109,154949,149384],{"class":126},[109,154951,27218],{"class":122},[109,154953,154954],{"class":126}," sales:\n",[109,154956,154957,154960,154962,154965,154967],{"class":111,"line":154},[109,154958,154959],{"class":126},"    date ",[109,154961,130],{"class":122},[109,154963,154964],{"class":126}," item[",[109,154966,149172],{"class":278},[109,154968,34421],{"class":126},[109,154970,154971,154974,154976,154978,154980],{"class":111,"line":161},[109,154972,154973],{"class":126},"    amount ",[109,154975,130],{"class":122},[109,154977,154964],{"class":126},[109,154979,85259],{"class":278},[109,154981,34421],{"class":126},[109,154983,154984,154987,154989,154992,154994,154996,154998],{"class":111,"line":167},[109,154985,154986],{"class":126},"    daily_total[date] ",[109,154988,130],{"class":122},[109,154990,154991],{"class":126}," daily_total.get(date, ",[109,154993,1314],{"class":133},[109,154995,14887],{"class":126},[109,154997,1348],{"class":122},[109,154999,155000],{"class":126}," amount\n",[109,155002,155003],{"class":111,"line":185},[109,155004,158],{"emptyLinePlaceholder":157},[109,155006,155007,155009],{"class":111,"line":201},[109,155008,31590],{"class":133},[109,155010,155011],{"class":126},"(daily_total)\n",[51,155013,155015],{"id":155014},"_1253-按类别统计","12.5.3 按类别统计",[99,155017,155019],{"className":31553,"code":155018,"language":31555,"meta":104,"style":104},"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",[106,155020,155021,155030,155034,155044,155057,155069,155087,155091],{"__ignoreMap":104},[109,155022,155023,155026,155028],{"class":111,"line":112},[109,155024,155025],{"class":126},"category_total ",[109,155027,130],{"class":122},[109,155029,89043],{"class":126},[109,155031,155032],{"class":111,"line":119},[109,155033,158],{"emptyLinePlaceholder":157},[109,155035,155036,155038,155040,155042],{"class":111,"line":140},[109,155037,4372],{"class":122},[109,155039,149384],{"class":126},[109,155041,27218],{"class":122},[109,155043,154954],{"class":126},[109,155045,155046,155049,155051,155053,155055],{"class":111,"line":154},[109,155047,155048],{"class":126},"    category ",[109,155050,130],{"class":122},[109,155052,154964],{"class":126},[109,155054,154813],{"class":278},[109,155056,34421],{"class":126},[109,155058,155059,155061,155063,155065,155067],{"class":111,"line":161},[109,155060,154973],{"class":126},[109,155062,130],{"class":122},[109,155064,154964],{"class":126},[109,155066,85259],{"class":278},[109,155068,34421],{"class":126},[109,155070,155071,155074,155076,155079,155081,155083,155085],{"class":111,"line":167},[109,155072,155073],{"class":126},"    category_total[category] ",[109,155075,130],{"class":122},[109,155077,155078],{"class":126}," category_total.get(category, ",[109,155080,1314],{"class":133},[109,155082,14887],{"class":126},[109,155084,1348],{"class":122},[109,155086,155000],{"class":126},[109,155088,155089],{"class":111,"line":185},[109,155090,158],{"emptyLinePlaceholder":157},[109,155092,155093,155095],{"class":111,"line":201},[109,155094,31590],{"class":133},[109,155096,155097],{"class":126},"(category_total)\n",[51,155099,155101],{"id":155100},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[99,155103,155105],{"className":31553,"code":155104,"language":31555,"meta":104,"style":104},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[106,155106,155107,155132],{"__ignoreMap":104},[109,155108,155109,155112,155114,155116,155119,155122,155125,155128,155130],{"class":111,"line":112},[109,155110,155111],{"class":126},"top_date, top_amount ",[109,155113,130],{"class":122},[109,155115,7282],{"class":133},[109,155117,155118],{"class":126},"(daily_total.items(), ",[109,155120,155121],{"class":6553},"key",[109,155123,155124],{"class":122},"=lambda",[109,155126,155127],{"class":126}," item: item[",[109,155129,1755],{"class":133},[109,155131,5994],{"class":126},[109,155133,155134,155136],{"class":111,"line":119},[109,155135,31590],{"class":133},[109,155137,155138],{"class":126},"(top_date, top_amount)\n",[14,155140,155142],{"id":155141},"_126-绘制柱状图","12.6 绘制柱状图",[99,155144,155146],{"className":31553,"code":155145,"language":31555,"meta":104,"style":104},"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",[106,155147,155148,155162,155173,155177,155185,155197,155209,155220,155224,155228,155238,155249,155263,155268,155285,155302,155318,155322],{"__ignoreMap":104},[109,155149,155150,155152,155154,155156,155158,155160],{"class":111,"line":112},[109,155151,31912],{"class":122},[109,155153,148554],{"class":126},[109,155155,31567],{"class":122},[109,155157,148559],{"class":126},[109,155159,32558],{"class":122},[109,155161,148564],{"class":126},[109,155163,155164,155166,155168,155170],{"class":111,"line":119},[109,155165,31912],{"class":122},[109,155167,148413],{"class":126},[109,155169,31567],{"class":122},[109,155171,155172],{"class":126}," Bar\n",[109,155174,155175],{"class":111,"line":140},[109,155176,158],{"emptyLinePlaceholder":157},[109,155178,155179,155181,155183],{"class":111,"line":154},[109,155180,155025],{"class":126},[109,155182,130],{"class":122},[109,155184,16745],{"class":126},[109,155186,155187,155190,155192,155195],{"class":111,"line":161},[109,155188,155189],{"class":278},"    \"手机\"",[109,155191,52612],{"class":126},[109,155193,155194],{"class":133},"27000",[109,155196,32641],{"class":126},[109,155198,155199,155202,155204,155207],{"class":111,"line":167},[109,155200,155201],{"class":278},"    \"电脑\"",[109,155203,52612],{"class":126},[109,155205,155206],{"class":133},"34000",[109,155208,32641],{"class":126},[109,155210,155211,155214,155216,155218],{"class":111,"line":185},[109,155212,155213],{"class":278},"    \"耳机\"",[109,155215,52612],{"class":126},[109,155217,125574],{"class":133},[109,155219,32641],{"class":126},[109,155221,155222],{"class":111,"line":201},[109,155223,742],{"class":126},[109,155225,155226],{"class":111,"line":206},[109,155227,158],{"emptyLinePlaceholder":157},[109,155229,155230,155233,155235],{"class":111,"line":218},[109,155231,155232],{"class":126},"bar ",[109,155234,130],{"class":122},[109,155236,155237],{"class":126}," Bar()\n",[109,155239,155240,155243,155246],{"class":111,"line":223},[109,155241,155242],{"class":126},"bar.add_xaxis(",[109,155244,155245],{"class":133},"list",[109,155247,155248],{"class":126},"(category_total.keys()))\n",[109,155250,155251,155254,155256,155258,155260],{"class":111,"line":229},[109,155252,155253],{"class":126},"bar.add_yaxis(",[109,155255,148470],{"class":278},[109,155257,13608],{"class":126},[109,155259,155245],{"class":133},[109,155261,155262],{"class":126},"(category_total.values()))\n",[109,155264,155265],{"class":111,"line":244},[109,155266,155267],{"class":126},"bar.set_global_opts(\n",[109,155269,155270,155272,155274,155276,155278,155280,155283],{"class":111,"line":258},[109,155271,148648],{"class":6553},[109,155273,130],{"class":122},[109,155275,148653],{"class":126},[109,155277,52582],{"class":6553},[109,155279,130],{"class":122},[109,155281,155282],{"class":278},"\"品类销售额\"",[109,155284,39222],{"class":126},[109,155286,155287,155289,155291,155293,155295,155297,155300],{"class":111,"line":263},[109,155288,148667],{"class":6553},[109,155290,130],{"class":122},[109,155292,148672],{"class":126},[109,155294,80985],{"class":6553},[109,155296,130],{"class":122},[109,155298,155299],{"class":278},"\"品类\"",[109,155301,39222],{"class":126},[109,155303,155304,155306,155308,155310,155312,155314,155316],{"class":111,"line":269},[109,155305,148686],{"class":6553},[109,155307,130],{"class":122},[109,155309,148672],{"class":126},[109,155311,80985],{"class":6553},[109,155313,130],{"class":122},[109,155315,148470],{"class":278},[109,155317,39222],{"class":126},[109,155319,155320],{"class":111,"line":304},[109,155321,1330],{"class":126},[109,155323,155324,155327,155330],{"class":111,"line":331},[109,155325,155326],{"class":126},"bar.render(",[109,155328,155329],{"class":278},"\"category_sales.html\"",[109,155331,1330],{"class":126},[14,155333,155335],{"id":155334},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155337,155338],{},"时间线适合展示不同日期、月份、年份的数据变化。",[99,155340,155342],{"className":31553,"code":155341,"language":31555,"meta":104,"style":104},"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",[106,155343,155344,155358,155369,155373,155381,155405,155428,155453,155457,155461,155471,155475,155486,155495,155505,155519,155550,155555,155559],{"__ignoreMap":104},[109,155345,155346,155348,155350,155352,155354,155356],{"class":111,"line":112},[109,155347,31912],{"class":122},[109,155349,148554],{"class":126},[109,155351,31567],{"class":122},[109,155353,148559],{"class":126},[109,155355,32558],{"class":122},[109,155357,148564],{"class":126},[109,155359,155360,155362,155364,155366],{"class":111,"line":119},[109,155361,31912],{"class":122},[109,155363,148413],{"class":126},[109,155365,31567],{"class":122},[109,155367,155368],{"class":126}," Bar, Timeline\n",[109,155370,155371],{"class":111,"line":140},[109,155372,158],{"emptyLinePlaceholder":157},[109,155374,155375,155377,155379],{"class":111,"line":154},[109,155376,102833],{"class":126},[109,155378,130],{"class":122},[109,155380,16745],{"class":126},[109,155382,155383,155386,155389,155391,155393,155395,155397,155399,155401,155403],{"class":111,"line":161},[109,155384,155385],{"class":278},"    \"2024-10-01\"",[109,155387,155388],{"class":126},": {",[109,155390,154818],{"class":278},[109,155392,52612],{"class":126},[109,155394,154827],{"class":133},[109,155396,13608],{"class":126},[109,155398,154848],{"class":278},[109,155400,52612],{"class":126},[109,155402,154857],{"class":133},[109,155404,6267],{"class":126},[109,155406,155407,155410,155412,155414,155416,155418,155420,155422,155424,155426],{"class":111,"line":167},[109,155408,155409],{"class":278},"    \"2024-10-02\"",[109,155411,155388],{"class":126},[109,155413,154818],{"class":278},[109,155415,52612],{"class":126},[109,155417,154886],{"class":133},[109,155419,13608],{"class":126},[109,155421,154848],{"class":278},[109,155423,52612],{"class":126},[109,155425,154915],{"class":133},[109,155427,6267],{"class":126},[109,155429,155430,155433,155435,155437,155439,155442,155444,155446,155448,155451],{"class":111,"line":185},[109,155431,155432],{"class":278},"    \"2024-10-03\"",[109,155434,155388],{"class":126},[109,155436,154818],{"class":278},[109,155438,52612],{"class":126},[109,155440,155441],{"class":133},"17000",[109,155443,13608],{"class":126},[109,155445,154848],{"class":278},[109,155447,52612],{"class":126},[109,155449,155450],{"class":133},"19000",[109,155452,6267],{"class":126},[109,155454,155455],{"class":111,"line":201},[109,155456,742],{"class":126},[109,155458,155459],{"class":111,"line":206},[109,155460,158],{"emptyLinePlaceholder":157},[109,155462,155463,155466,155468],{"class":111,"line":218},[109,155464,155465],{"class":126},"timeline ",[109,155467,130],{"class":122},[109,155469,155470],{"class":126}," Timeline()\n",[109,155472,155473],{"class":111,"line":223},[109,155474,158],{"emptyLinePlaceholder":157},[109,155476,155477,155479,155482,155484],{"class":111,"line":229},[109,155478,4372],{"class":122},[109,155480,155481],{"class":126}," date, category_data ",[109,155483,27218],{"class":122},[109,155485,150323],{"class":126},[109,155487,155488,155491,155493],{"class":111,"line":244},[109,155489,155490],{"class":126},"    bar ",[109,155492,130],{"class":122},[109,155494,155237],{"class":126},[109,155496,155497,155500,155502],{"class":111,"line":258},[109,155498,155499],{"class":126},"    bar.add_xaxis(",[109,155501,155245],{"class":133},[109,155503,155504],{"class":126},"(category_data.keys()))\n",[109,155506,155507,155510,155512,155514,155516],{"class":111,"line":263},[109,155508,155509],{"class":126},"    bar.add_yaxis(",[109,155511,148470],{"class":278},[109,155513,13608],{"class":126},[109,155515,155245],{"class":133},[109,155517,155518],{"class":126},"(category_data.values()))\n",[109,155520,155521,155524,155527,155529,155531,155533,155535,155537,155539,155541,155543,155545,155548],{"class":111,"line":269},[109,155522,155523],{"class":126},"    bar.set_global_opts(",[109,155525,155526],{"class":6553},"title_opts",[109,155528,130],{"class":122},[109,155530,148653],{"class":126},[109,155532,52582],{"class":6553},[109,155534,130],{"class":122},[109,155536,1595],{"class":122},[109,155538,1789],{"class":278},[109,155540,2427],{"class":133},[109,155542,75101],{"class":126},[109,155544,2476],{"class":133},[109,155546,155547],{"class":278},"销售额\"",[109,155549,31672],{"class":126},[109,155551,155552],{"class":111,"line":304},[109,155553,155554],{"class":126},"    timeline.add(bar, date)\n",[109,155556,155557],{"class":111,"line":331},[109,155558,158],{"emptyLinePlaceholder":157},[109,155560,155561,155564,155567],{"class":111,"line":336},[109,155562,155563],{"class":126},"timeline.render(",[109,155565,155566],{"class":278},"\"timeline_sales.html\"",[109,155568,1330],{"class":126},[14,155570,155572],{"id":155571},"_128-绘制地图","12.8 绘制地图",[19,155574,155575],{},"地图适合展示地区数据。",[99,155577,155579],{"className":31553,"code":155578,"language":31555,"meta":104,"style":104},"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",[106,155580,155581,155595,155606,155610,155618,155631,155643,155656,155669,155673,155677,155687,155702,155707,155724,155743,155747],{"__ignoreMap":104},[109,155582,155583,155585,155587,155589,155591,155593],{"class":111,"line":112},[109,155584,31912],{"class":122},[109,155586,148554],{"class":126},[109,155588,31567],{"class":122},[109,155590,148559],{"class":126},[109,155592,32558],{"class":122},[109,155594,148564],{"class":126},[109,155596,155597,155599,155601,155603],{"class":111,"line":119},[109,155598,31912],{"class":122},[109,155600,148413],{"class":126},[109,155602,31567],{"class":122},[109,155604,155605],{"class":126}," Map\n",[109,155607,155608],{"class":111,"line":140},[109,155609,158],{"emptyLinePlaceholder":157},[109,155611,155612,155614,155616],{"class":111,"line":154},[109,155613,102833],{"class":126},[109,155615,130],{"class":122},[109,155617,56622],{"class":126},[109,155619,155620,155623,155625,155627,155629],{"class":111,"line":161},[109,155621,155622],{"class":126},"    (",[109,155624,70444],{"class":278},[109,155626,13608],{"class":126},[109,155628,2349],{"class":133},[109,155630,39222],{"class":126},[109,155632,155633,155635,155637,155639,155641],{"class":111,"line":167},[109,155634,155622],{"class":126},[109,155636,70464],{"class":278},[109,155638,13608],{"class":126},[109,155640,148487],{"class":133},[109,155642,39222],{"class":126},[109,155644,155645,155647,155650,155652,155654],{"class":111,"line":185},[109,155646,155622],{"class":126},[109,155648,155649],{"class":278},"\"广东\"",[109,155651,13608],{"class":126},[109,155653,3098],{"class":133},[109,155655,39222],{"class":126},[109,155657,155658,155660,155663,155665,155667],{"class":111,"line":201},[109,155659,155622],{"class":126},[109,155661,155662],{"class":278},"\"浙江\"",[109,155664,13608],{"class":126},[109,155666,148492],{"class":133},[109,155668,39222],{"class":126},[109,155670,155671],{"class":111,"line":206},[109,155672,34421],{"class":126},[109,155674,155675],{"class":111,"line":218},[109,155676,158],{"emptyLinePlaceholder":157},[109,155678,155679,155682,155684],{"class":111,"line":223},[109,155680,155681],{"class":126},"map_chart ",[109,155683,130],{"class":122},[109,155685,155686],{"class":126}," Map()\n",[109,155688,155689,155692,155694,155697,155700],{"class":111,"line":229},[109,155690,155691],{"class":126},"map_chart.add(",[109,155693,148470],{"class":278},[109,155695,155696],{"class":126},", data, ",[109,155698,155699],{"class":278},"\"china\"",[109,155701,1330],{"class":126},[109,155703,155704],{"class":111,"line":244},[109,155705,155706],{"class":126},"map_chart.set_global_opts(\n",[109,155708,155709,155711,155713,155715,155717,155719,155722],{"class":111,"line":258},[109,155710,148648],{"class":6553},[109,155712,130],{"class":122},[109,155714,148653],{"class":126},[109,155716,52582],{"class":6553},[109,155718,130],{"class":122},[109,155720,155721],{"class":278},"\"地区销售额\"",[109,155723,39222],{"class":126},[109,155725,155726,155729,155731,155734,155737,155739,155741],{"class":111,"line":263},[109,155727,155728],{"class":6553},"    visualmap_opts",[109,155730,130],{"class":122},[109,155732,155733],{"class":126},"opts.VisualMapOpts(",[109,155735,155736],{"class":6553},"max_",[109,155738,130],{"class":122},[109,155740,3098],{"class":133},[109,155742,39222],{"class":126},[109,155744,155745],{"class":111,"line":269},[109,155746,1330],{"class":126},[109,155748,155749,155752,155755],{"class":111,"line":304},[109,155750,155751],{"class":126},"map_chart.render(",[109,155753,155754],{"class":278},"\"map_sales.html\"",[109,155756,1330],{"class":126},[19,155758,155759],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155761,155763],{"id":155762},"_129-项目拆分建议","12.9 项目拆分建议",[19,155765,155766],{},"当代码超过一个文件时，可以这样组织：",[99,155768,155771],{"className":155769,"code":155770,"language":6524,"meta":104},[6522],"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",[106,155772,155770],{"__ignoreMap":104},[19,155774,155775],{},"职责：",[765,155777,155778,155784,155790,155796],{},[30,155779,155780,155783],{},[106,155781,155782],{},"main.py","：程序入口。",[30,155785,155786,155789],{},[106,155787,155788],{},"file_utils.py","：读写 JSON。",[30,155791,155792,155795],{},[106,155793,155794],{},"sales_service.py","：统计销售数据。",[30,155797,155798,155801],{},[106,155799,155800],{},"chart_builder.py","：生成图表。",[14,155803,155805],{"id":155804},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155807,155808],{},"语法基础：",[765,155810,155811,155814,155817,155820],{},[30,155812,155813],{},"会写变量、注释、输入输出。",[30,155815,155816],{},"会使用 int、float、str、bool。",[30,155818,155819],{},"会做类型转换。",[30,155821,155822],{},"会使用 f-string 格式化输出。",[19,155824,155825],{},"流程控制：",[765,155827,155828,155834,155840,155848],{},[30,155829,155830,155831,29560],{},"会写 ",[106,155832,155833],{},"if elif else",[30,155835,155830,155836,102193,155838,29560],{},[106,155837,109838],{},[106,155839,4372],{},[30,155841,155842,155843,102193,155845,29560],{},"理解 ",[106,155844,3415],{},[106,155846,155847],{},"continue",[30,155849,155850],{},"能写嵌套循环。",[19,155852,155853],{},"函数：",[765,155855,155856,155859,155862,155865],{},[30,155857,155858],{},"会定义和调用函数。",[30,155860,155861],{},"理解参数和返回值。",[30,155863,155864],{},"知道局部变量和全局变量。",[30,155866,155867],{},"会使用默认参数、关键字参数、不定长参数。",[19,155869,155870],{},"容器：",[765,155872,155873,155876,155879,155882,155885],{},[30,155874,155875],{},"会使用列表增删改查。",[30,155877,155878],{},"会遍历列表、字典。",[30,155880,155881],{},"会使用切片。",[30,155883,155884],{},"会用集合去重。",[30,155886,155887],{},"会处理列表嵌套字典。",[19,155889,155890],{},"文件和模块：",[765,155892,155893,155896,155899,155902,155905],{},[30,155894,155895],{},"会读写文本文件。",[30,155897,155898],{},"会读写 JSON。",[30,155900,155901],{},"会捕获常见异常。",[30,155903,155904],{},"会导入模块和第三方包。",[30,155906,155907],{},"会创建简单包结构。",[19,155909,155910],{},"项目能力：",[765,155912,155913,155916,155919,155922,155925],{},[30,155914,155915],{},"能把代码拆成函数。",[30,155917,155918],{},"能把数据保存到文件。",[30,155920,155921],{},"能处理用户输入错误。",[30,155923,155924],{},"能写一个完整菜单程序。",[30,155926,155927],{},"能用 pyecharts 生成图表。",[14,155929,155931],{"id":155930},"_1211-推荐练习顺序","12.11 推荐练习顺序",[765,155933,155934,155937,155940,155943,155946,155949,155952,155955],{},[30,155935,155936],{},"猜数字游戏。",[30,155938,155939],{},"ATM 菜单程序。",[30,155941,155942],{},"学生成绩统计。",[30,155944,155945],{},"学生管理系统函数版。",[30,155947,155948],{},"学生管理系统文件持久化版。",[30,155950,155951],{},"学生管理系统面向对象版。",[30,155953,155954],{},"销售数据统计。",[30,155956,155957],{},"销售数据可视化。",[14,155959,155961],{"id":155960},"_1212-常见学习误区","12.12 常见学习误区",[765,155963,155964,155967,155970,155973,155976,155979,155982],{},[30,155965,155966],{},"只看视频不敲代码。",[30,155968,155969],{},"一报错就复制错误去搜，不先读报错位置。",[30,155971,155972],{},"变量名随便写，后续自己看不懂。",[30,155974,155975],{},"所有代码都写在一个文件一个函数里。",[30,155977,155978],{},"不保存练习代码，复习时没有材料。",[30,155980,155981],{},"还没掌握列表字典就急着学框架。",[30,155983,155984],{},"不会读官方文档，只依赖教程。",[14,155986,155988],{"id":155987},"_1213-如何读报错","12.13 如何读报错",[19,155990,155991],{},"报错通常从下往上看最后几行。",[19,155993,16308],{},[99,155995,155998],{"className":155996,"code":155997,"language":6524,"meta":104},[6522],"ValueError: invalid literal for int() with base 10: 'abc'\n",[106,155999,155997],{"__ignoreMap":104},[19,156001,25774],{},[765,156003,156004,156010,156020],{},[30,156005,156006,156007,29560],{},"异常类型是 ",[106,156008,156009],{},"ValueError",[30,156011,108520,156012,156015,156016,156019],{},[106,156013,156014],{},"int()"," 无法把 ",[106,156017,156018],{},"'abc'"," 转成整数。",[30,156021,156022],{},"应该检查输入内容或增加异常处理。",[19,156024,156025],{},"再看文件名和行号：",[99,156027,156030],{"className":156028,"code":156029,"language":6524,"meta":104},[6522],"File \"main.py\", line 10, in \u003Cmodule>\n",[106,156031,156029],{"__ignoreMap":104},[19,156033,156034,156035,156037],{},"表示错误发生在 ",[106,156036,155782],{}," 第 10 行。",[14,156039,156041],{"id":156040},"_1214-后续学习方向","12.14 后续学习方向",[19,156043,156044],{},"Python 基础完成后，可以按兴趣选择方向：",[765,156046,156047,156059,156068,156080,156091,156100,156110],{},[30,156048,156049,156050,1750,156053,1750,156056,29560],{},"自动化办公：",[106,156051,156052],{},"openpyxl",[106,156054,156055],{},"python-docx",[106,156057,156058],{},"pdfplumber",[30,156060,156061,156062,1750,156064,1750,156066,29560],{},"数据分析：",[106,156063,101801],{},[106,156065,147360],{},[106,156067,147368],{},[30,156069,156070,156071,1750,156074,1750,156077,29560],{},"Web 后端：",[106,156072,156073],{},"Flask",[106,156075,156076],{},"FastAPI",[106,156078,156079],{},"Django",[30,156081,156082,156083,1750,156085,1750,156088,29560],{},"爬虫：",[106,156084,147345],{},[106,156086,156087],{},"BeautifulSoup",[106,156089,156090],{},"Scrapy",[30,156092,156093,156094,1750,156096,156099],{},"测试开发：",[106,156095,147392],{},[106,156097,156098],{},"selenium","、接口测试。",[30,156101,156102,156103,1750,156105,1750,156107,29560],{},"人工智能：",[106,156104,101801],{},[106,156106,147360],{},[106,156108,156109],{},"pytorch",[30,156111,156112,156113,1750,156115,1750,156118,29560],{},"运维脚本：",[106,156114,146961],{},[106,156116,156117],{},"subprocess",[106,156119,156120],{},"paramiko",[19,156122,156123],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156125,156127],{"id":156126},"_1215-结课练习","12.15 结课练习",[765,156129,156130,156133,156136,156139,156142,156145,156148,156151],{},[30,156131,156132],{},"完成函数版学生管理系统。",[30,156134,156135],{},"给学生管理系统增加 JSON 持久化。",[30,156137,156138],{},"给学生管理系统增加异常处理。",[30,156140,156141],{},"把学生管理系统改成面向对象版。",[30,156143,156144],{},"使用 pyecharts 绘制学生成绩柱状图。",[30,156146,156147],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[30,156149,156150],{},"按品类统计销售额并绘制柱状图。",[30,156152,156153],{},"写一份自己的 Python 学习路线图。",[1467,156155,156156],{},"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":104,"searchDepth":119,"depth":119,"links":156158},[156159,156160,156163,156164,156165,156171,156172,156173,156174,156175,156176,156177,156178,156179,156180],{"id":152875,"depth":119,"text":152876},{"id":152925,"depth":119,"text":152926,"children":156161},[156162],{"id":152929,"depth":140,"text":152930},{"id":152968,"depth":119,"text":152969},{"id":154442,"depth":119,"text":154443},{"id":154780,"depth":119,"text":154781,"children":156166},[156167,156168,156169,156170],{"id":154784,"depth":140,"text":154785},{"id":154924,"depth":140,"text":154925},{"id":155014,"depth":140,"text":155015},{"id":155100,"depth":140,"text":155101},{"id":155141,"depth":119,"text":155142},{"id":155334,"depth":119,"text":155335},{"id":155571,"depth":119,"text":155572},{"id":155762,"depth":119,"text":155763},{"id":155804,"depth":119,"text":155805},{"id":155930,"depth":119,"text":155931},{"id":155960,"depth":119,"text":155961},{"id":155987,"depth":119,"text":155988},{"id":156040,"depth":119,"text":156041},{"id":156126,"depth":119,"text":156127},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152867,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156187,"title":156188,"body":156189,"description":24550,"extension":1476,"meta":158658,"navigation":157,"path":158659,"seo":158660,"stem":158661,"__hash__":158662},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156190,"toc":158633},[156191,156194,156198,156201,156204,156224,156227,156250,156253,156256,156278,156281,156303,156307,156310,156350,156353,156474,156478,156481,156521,156524,156548,156551,156555,156558,156572,156605,156608,156643,156646,156669,156672,156705,156708,156710,156716,156791,156794,156800,156817,156857,156861,156864,156910,156912,156950,156953,156988,156991,157026,157029,157061,157064,157083,157087,157091,157204,157206,157281,157285,157331,157334,157360,157369,157373,157376,157439,157447,157475,157479,157519,157584,157588,157591,157630,157633,157678,157681,157742,157746,157773,157776,157804,157807,157811,157815,157880,157883,157921,157924,157956,157960,158059,158063,158066,158139,158142,158190,158194,158200,158240,158243,158290,158293,158342,158346,158348,158362,158364,158545,158549,158576,158596,158603,158607,158624,158630],[10,156192,156188],{"id":156193},"_2-基础语法变量与字符串",[14,156195,156197],{"id":156196},"_21-注释","2.1 注释",[19,156199,156200],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156202,156203],{},"单行注释：",[99,156205,156207],{"className":31553,"code":156206,"language":31555,"meta":104,"style":104},"# 这是单行注释\nprint(\"hello\")\n",[106,156208,156209,156214],{"__ignoreMap":104},[109,156210,156211],{"class":111,"line":112},[109,156212,156213],{"class":115},"# 这是单行注释\n",[109,156215,156216,156218,156220,156222],{"class":111,"line":119},[109,156217,31590],{"class":133},[109,156219,714],{"class":126},[109,156221,7175],{"class":278},[109,156223,1330],{"class":126},[19,156225,156226],{},"多行说明常用三引号：",[99,156228,156230],{"className":31553,"code":156229,"language":31555,"meta":104,"style":104},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[106,156231,156232,156236,156241,156246],{"__ignoreMap":104},[109,156233,156234],{"class":111,"line":112},[109,156235,96873],{"class":278},[109,156237,156238],{"class":111,"line":119},[109,156239,156240],{"class":278},"这是多行说明。\n",[109,156242,156243],{"class":111,"line":140},[109,156244,156245],{"class":278},"常用于文件顶部说明、函数说明等。\n",[109,156247,156248],{"class":111,"line":154},[109,156249,96873],{"class":278},[19,156251,156252],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156254,156255],{},"不好：",[99,156257,156259],{"className":31553,"code":156258,"language":31555,"meta":104,"style":104},"# age 加 1\nage = age + 1\n",[106,156260,156261,156266],{"__ignoreMap":104},[109,156262,156263],{"class":111,"line":112},[109,156264,156265],{"class":115},"# age 加 1\n",[109,156267,156268,156270,156272,156274,156276],{"class":111,"line":119},[109,156269,147721],{"class":126},[109,156271,130],{"class":122},[109,156273,16880],{"class":126},[109,156275,1348],{"class":122},[109,156277,56874],{"class":133},[19,156279,156280],{},"较好：",[99,156282,156284],{"className":31553,"code":156283,"language":31555,"meta":104,"style":104},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[106,156285,156286,156291],{"__ignoreMap":104},[109,156287,156288],{"class":111,"line":112},[109,156289,156290],{"class":115},"# 用户过完生日后，年龄增加一岁\n",[109,156292,156293,156295,156297,156299,156301],{"class":111,"line":119},[109,156294,147721],{"class":126},[109,156296,130],{"class":122},[109,156298,16880],{"class":126},[109,156300,1348],{"class":122},[109,156302,56874],{"class":133},[14,156304,156306],{"id":156305},"_22-字面量","2.2 字面量",[19,156308,156309],{},"字面量就是代码中直接写出来的数据。",[99,156311,156313],{"className":31553,"code":156312,"language":31555,"meta":104,"style":104},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[106,156314,156315,156322,156329,156336,156343],{"__ignoreMap":104},[109,156316,156317,156319],{"class":111,"line":112},[109,156318,1351],{"class":133},[109,156320,156321],{"class":115},"          # 整数\n",[109,156323,156324,156326],{"class":111,"line":119},[109,156325,1592],{"class":133},[109,156327,156328],{"class":115},"         # 小数\n",[109,156330,156331,156333],{"class":111,"line":140},[109,156332,7175],{"class":278},[109,156334,156335],{"class":115},"      # 字符串\n",[109,156337,156338,156340],{"class":111,"line":154},[109,156339,32651],{"class":133},[109,156341,156342],{"class":115},"         # 布尔值\n",[109,156344,156345,156347],{"class":111,"line":161},[109,156346,96861],{"class":133},[109,156348,156349],{"class":115},"         # 空值\n",[19,156351,156352],{},"常见字面量类型：",[1677,156354,156355,156365],{},[1680,156356,156357],{},[1683,156358,156359,156361,156363],{},[1686,156360,24911],{},[1686,156362,28667],{},[1686,156364,27044],{},[1723,156366,156367,156378,156389,156400,156412,156424,156436,156449,156461],{},[1683,156368,156369,156371,156375],{},[1728,156370,123],{},[1728,156372,156373],{},[106,156374,1351],{},[1728,156376,156377],{},"整数",[1683,156379,156380,156382,156386],{},[1728,156381,1584],{},[1728,156383,156384],{},[106,156385,1592],{},[1728,156387,156388],{},"浮点数",[1683,156390,156391,156393,156397],{},[1728,156392,2695],{},[1728,156394,156395],{},[106,156396,7175],{},[1728,156398,156399],{},"字符串",[1683,156401,156402,156404,156410],{},[1728,156403,2747],{},[1728,156405,156406,1750,156408],{},[106,156407,32651],{},[106,156409,35162],{},[1728,156411,67190],{},[1683,156413,156414,156417,156421],{},[1728,156415,156416],{},"NoneType",[1728,156418,156419],{},[106,156420,96861],{},[1728,156422,156423],{},"空值",[1683,156425,156426,156428,156433],{},[1728,156427,155245],{},[1728,156429,156430],{},[106,156431,156432],{},"[1, 2, 3]",[1728,156434,156435],{},"列表",[1683,156437,156438,156441,156446],{},[1728,156439,156440],{},"tuple",[1728,156442,156443],{},[106,156444,156445],{},"(1, 2, 3)",[1728,156447,156448],{},"元组",[1683,156450,156451,156453,156458],{},[1728,156452,115721],{},[1728,156454,156455],{},[106,156456,156457],{},"{\"name\": \"张三\"}",[1728,156459,156460],{},"字典",[1683,156462,156463,156466,156471],{},[1728,156464,156465],{},"set",[1728,156467,156468],{},[106,156469,156470],{},"{1, 2, 3}",[1728,156472,156473],{},"集合",[14,156475,156477],{"id":156476},"_23-变量","2.3 变量",[19,156479,156480],{},"变量是保存数据的名字。",[99,156482,156484],{"className":31553,"code":156483,"language":31555,"meta":104,"style":104},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[106,156485,156486,156494,156502,156512],{"__ignoreMap":104},[109,156487,156488,156490,156492],{"class":111,"line":112},[109,156489,147711],{"class":126},[109,156491,130],{"class":122},[109,156493,150528],{"class":278},[109,156495,156496,156498,156500],{"class":111,"line":119},[109,156497,147721],{"class":126},[109,156499,130],{"class":122},[109,156501,147726],{"class":133},[109,156503,156504,156507,156509],{"class":111,"line":140},[109,156505,156506],{"class":126},"height ",[109,156508,130],{"class":122},[109,156510,156511],{"class":133}," 1.75\n",[109,156513,156514,156517,156519],{"class":111,"line":154},[109,156515,156516],{"class":126},"is_student ",[109,156518,130],{"class":122},[109,156520,154774],{"class":133},[19,156522,156523],{},"Python 的变量不需要提前声明类型：",[99,156525,156527],{"className":31553,"code":156526,"language":31555,"meta":104,"style":104},"score = 100\nscore = \"满分\"\n",[106,156528,156529,156539],{"__ignoreMap":104},[109,156530,156531,156534,156536],{"class":111,"line":112},[109,156532,156533],{"class":126},"score ",[109,156535,130],{"class":122},[109,156537,156538],{"class":133}," 100\n",[109,156540,156541,156543,156545],{"class":111,"line":119},[109,156542,156533],{"class":126},[109,156544,130],{"class":122},[109,156546,156547],{"class":278}," \"满分\"\n",[19,156549,156550],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156552,156554],{"id":156553},"_24-变量命名规则","2.4 变量命名规则",[19,156556,156557],{},"硬性规则：",[765,156559,156560,156563,156566,156569],{},[30,156561,156562],{},"只能由字母、数字、下划线组成。",[30,156564,156565],{},"不能以数字开头。",[30,156567,156568],{},"不能使用 Python 关键字。",[30,156570,156571],{},"区分大小写。",[99,156573,156575],{"className":31553,"code":156574,"language":31555,"meta":104,"style":104},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[106,156576,156577,156586,156595],{"__ignoreMap":104},[109,156578,156579,156582,156584],{"class":111,"line":112},[109,156580,156581],{"class":126},"user_name ",[109,156583,130],{"class":122},[109,156585,147716],{"class":278},[109,156587,156588,156591,156593],{"class":111,"line":119},[109,156589,156590],{"class":126},"age2 ",[109,156592,130],{"class":122},[109,156594,147726],{"class":133},[109,156596,156597,156600,156602],{"class":111,"line":140},[109,156598,156599],{"class":126},"_token ",[109,156601,130],{"class":122},[109,156603,156604],{"class":278}," \"abc\"\n",[19,156606,156607],{},"错误写法：",[99,156609,156611],{"className":31553,"code":156610,"language":31555,"meta":104,"style":104},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[106,156612,156613,156622,156634],{"__ignoreMap":104},[109,156614,156615,156618,156620],{"class":111,"line":112},[109,156616,156617],{"class":78578},"2age",[109,156619,14737],{"class":122},[109,156621,147726],{"class":133},[109,156623,156624,156626,156628,156630,156632],{"class":111,"line":119},[109,156625,132759],{"class":126},[109,156627,2064],{"class":122},[109,156629,147711],{"class":126},[109,156631,130],{"class":122},[109,156633,147716],{"class":278},[109,156635,156636,156638,156640],{"class":111,"line":140},[109,156637,15867],{"class":122},[109,156639,14737],{"class":122},[109,156641,156642],{"class":278}," \"一班\"\n",[19,156644,156645],{},"查看关键字：",[99,156647,156649],{"className":31553,"code":156648,"language":31555,"meta":104,"style":104},"import keyword\n\nprint(keyword.kwlist)\n",[106,156650,156651,156658,156662],{"__ignoreMap":104},[109,156652,156653,156655],{"class":111,"line":112},[109,156654,31567],{"class":122},[109,156656,156657],{"class":126}," keyword\n",[109,156659,156660],{"class":111,"line":119},[109,156661,158],{"emptyLinePlaceholder":157},[109,156663,156664,156666],{"class":111,"line":140},[109,156665,31590],{"class":133},[109,156667,156668],{"class":126},"(keyword.kwlist)\n",[19,156670,156671],{},"推荐命名风格：",[99,156673,156675],{"className":31553,"code":156674,"language":31555,"meta":104,"style":104},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[106,156676,156677,156686,156696],{"__ignoreMap":104},[109,156678,156679,156682,156684],{"class":111,"line":112},[109,156680,156681],{"class":126},"student_name ",[109,156683,130],{"class":122},[109,156685,150528],{"class":278},[109,156687,156688,156691,156693],{"class":111,"line":119},[109,156689,156690],{"class":126},"total_price ",[109,156692,130],{"class":122},[109,156694,156695],{"class":133}," 99.8\n",[109,156697,156698,156701,156703],{"class":111,"line":140},[109,156699,156700],{"class":126},"is_finished ",[109,156702,130],{"class":122},[109,156704,126982],{"class":133},[19,156706,156707],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156709,51907],{"id":51906},[19,156711,105541,156712,156715],{},[106,156713,156714],{},"type()"," 查看数据类型：",[99,156717,156719],{"className":31553,"code":156718,"language":31555,"meta":104,"style":104},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[106,156720,156721,156735,156749,156763,156777],{"__ignoreMap":104},[109,156722,156723,156725,156727,156729,156731,156733],{"class":111,"line":112},[109,156724,31590],{"class":133},[109,156726,714],{"class":126},[109,156728,104282],{"class":133},[109,156730,714],{"class":126},[109,156732,1351],{"class":133},[109,156734,31672],{"class":126},[109,156736,156737,156739,156741,156743,156745,156747],{"class":111,"line":119},[109,156738,31590],{"class":133},[109,156740,714],{"class":126},[109,156742,104282],{"class":133},[109,156744,714],{"class":126},[109,156746,1592],{"class":133},[109,156748,31672],{"class":126},[109,156750,156751,156753,156755,156757,156759,156761],{"class":111,"line":140},[109,156752,31590],{"class":133},[109,156754,714],{"class":126},[109,156756,104282],{"class":133},[109,156758,714],{"class":126},[109,156760,7175],{"class":278},[109,156762,31672],{"class":126},[109,156764,156765,156767,156769,156771,156773,156775],{"class":111,"line":154},[109,156766,31590],{"class":133},[109,156768,714],{"class":126},[109,156770,104282],{"class":133},[109,156772,714],{"class":126},[109,156774,32651],{"class":133},[109,156776,31672],{"class":126},[109,156778,156779,156781,156783,156785,156787,156789],{"class":111,"line":161},[109,156780,31590],{"class":133},[109,156782,714],{"class":126},[109,156784,104282],{"class":133},[109,156786,714],{"class":126},[109,156788,96861],{"class":133},[109,156790,31672],{"class":126},[19,156792,156793],{},"输出类似：",[99,156795,156798],{"className":156796,"code":156797,"language":6524,"meta":104},[6522],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[106,156799,156797],{"__ignoreMap":104},[19,156801,10343,156802,108458,156804,156806,156807,156809,156810,22673,156812,156809,156814,156816],{},[106,156803,2747],{},[106,156805,123],{}," 的子类，",[106,156808,32651],{}," 可以当作 ",[106,156811,1755],{},[106,156813,35162],{},[106,156815,1314],{},"，但业务代码中不要滥用。",[99,156818,156820],{"className":31553,"code":156819,"language":31555,"meta":104,"style":104},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[106,156821,156822,156840],{"__ignoreMap":104},[109,156823,156824,156826,156828,156830,156832,156834,156837],{"class":111,"line":112},[109,156825,31590],{"class":133},[109,156827,714],{"class":126},[109,156829,32651],{"class":133},[109,156831,46741],{"class":122},[109,156833,26293],{"class":133},[109,156835,156836],{"class":126},")   ",[109,156838,156839],{"class":115},"# 2\n",[109,156841,156842,156844,156846,156848,156850,156852,156854],{"class":111,"line":119},[109,156843,31590],{"class":133},[109,156845,714],{"class":126},[109,156847,35162],{"class":133},[109,156849,46741],{"class":122},[109,156851,26293],{"class":133},[109,156853,46983],{"class":126},[109,156855,156856],{"class":115},"# 1\n",[14,156858,156860],{"id":156859},"_26-类型转换","2.6 类型转换",[19,156862,156863],{},"常用转换函数：",[99,156865,156867],{"className":31553,"code":156866,"language":31555,"meta":104,"style":104},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[106,156868,156869,156879,156890,156900],{"__ignoreMap":104},[109,156870,156871,156873,156875,156877],{"class":111,"line":112},[109,156872,123],{"class":133},[109,156874,714],{"class":126},[109,156876,55491],{"class":278},[109,156878,1330],{"class":126},[109,156880,156881,156883,156885,156888],{"class":111,"line":119},[109,156882,1584],{"class":133},[109,156884,714],{"class":126},[109,156886,156887],{"class":278},"\"3.14\"",[109,156889,1330],{"class":126},[109,156891,156892,156894,156896,156898],{"class":111,"line":140},[109,156893,2695],{"class":133},[109,156895,714],{"class":126},[109,156897,1351],{"class":133},[109,156899,1330],{"class":126},[109,156901,156902,156904,156906,156908],{"class":111,"line":154},[109,156903,2747],{"class":133},[109,156905,714],{"class":126},[109,156907,1755],{"class":133},[109,156909,1330],{"class":126},[19,156911,16308],{},[99,156913,156915],{"className":31553,"code":156914,"language":31555,"meta":104,"style":104},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[106,156916,156917,156926,156937],{"__ignoreMap":104},[109,156918,156919,156921,156923],{"class":111,"line":112},[109,156920,147721],{"class":126},[109,156922,130],{"class":122},[109,156924,156925],{"class":278}," \"18\"\n",[109,156927,156928,156930,156932,156934],{"class":111,"line":119},[109,156929,147721],{"class":126},[109,156931,130],{"class":122},[109,156933,173],{"class":133},[109,156935,156936],{"class":126},"(age)\n",[109,156938,156939,156941,156944,156946,156948],{"class":111,"line":140},[109,156940,31590],{"class":133},[109,156942,156943],{"class":126},"(age ",[109,156945,1348],{"class":122},[109,156947,26293],{"class":133},[109,156949,1330],{"class":126},[19,156951,156952],{},"输入得到的内容永远是字符串：",[99,156954,156956],{"className":31553,"code":156955,"language":31555,"meta":104,"style":104},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[106,156957,156958,156974],{"__ignoreMap":104},[109,156959,156960,156963,156965,156967,156969,156972],{"class":111,"line":112},[109,156961,156962],{"class":126},"num ",[109,156964,130],{"class":122},[109,156966,61780],{"class":133},[109,156968,714],{"class":126},[109,156970,156971],{"class":278},"\"请输入数字:\"",[109,156973,1330],{"class":126},[109,156975,156976,156978,156980,156982,156985],{"class":111,"line":119},[109,156977,31590],{"class":133},[109,156979,714],{"class":126},[109,156981,104282],{"class":133},[109,156983,156984],{"class":126},"(num))  ",[109,156986,156987],{"class":115},"# str\n",[19,156989,156990],{},"如果要做数学运算，必须转换：",[99,156992,156994],{"className":31553,"code":156993,"language":31555,"meta":104,"style":104},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[106,156995,156996,157014],{"__ignoreMap":104},[109,156997,156998,157000,157002,157004,157006,157008,157010,157012],{"class":111,"line":112},[109,156999,156962],{"class":126},[109,157001,130],{"class":122},[109,157003,173],{"class":133},[109,157005,714],{"class":126},[109,157007,54996],{"class":133},[109,157009,714],{"class":126},[109,157011,156971],{"class":278},[109,157013,31672],{"class":126},[109,157015,157016,157018,157020,157022,157024],{"class":111,"line":119},[109,157017,31590],{"class":133},[109,157019,46794],{"class":126},[109,157021,1348],{"class":122},[109,157023,134],{"class":133},[109,157025,1330],{"class":126},[19,157027,157028],{},"常见错误：",[99,157030,157032],{"className":31553,"code":157031,"language":31555,"meta":104,"style":104},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[106,157033,157034,157047],{"__ignoreMap":104},[109,157035,157036,157038,157040,157042,157044],{"class":111,"line":112},[109,157037,123],{"class":133},[109,157039,714],{"class":126},[109,157041,156887],{"class":278},[109,157043,156836],{"class":126},[109,157045,157046],{"class":115},"# 错误\n",[109,157048,157049,157051,157053,157056,157059],{"class":111,"line":119},[109,157050,123],{"class":133},[109,157052,714],{"class":126},[109,157054,157055],{"class":278},"\"abc\"",[109,157057,157058],{"class":126},")    ",[109,157060,157046],{"class":115},[19,157062,157063],{},"正确写法：",[99,157065,157067],{"className":31553,"code":157066,"language":31555,"meta":104,"style":104},"num = float(\"3.14\")\n",[106,157068,157069],{"__ignoreMap":104},[109,157070,157071,157073,157075,157077,157079,157081],{"class":111,"line":112},[109,157072,156962],{"class":126},[109,157074,130],{"class":122},[109,157076,110972],{"class":133},[109,157078,714],{"class":126},[109,157080,156887],{"class":278},[109,157082,1330],{"class":126},[14,157084,157086],{"id":157085},"_27-运算符","2.7 运算符",[51,157088,157090],{"id":157089},"_271-算术运算符","2.7.1 算术运算符",[1677,157092,157093,157104],{},[1680,157094,157095],{},[1683,157096,157097,157100,157102],{},[1686,157098,157099],{},"运算符",[1686,157101,27044],{},[1686,157103,28667],{},[1723,157105,157106,157120,157134,157148,157162,157176,157190],{},[1683,157107,157108,157112,157115],{},[1728,157109,157110],{},[106,157111,1348],{},[1728,157113,157114],{},"加法",[1728,157116,157117],{},[106,157118,157119],{},"1 + 2",[1683,157121,157122,157126,157129],{},[1728,157123,157124],{},[106,157125,2064],{},[1728,157127,157128],{},"减法",[1728,157130,157131],{},[106,157132,157133],{},"5 - 3",[1683,157135,157136,157140,157143],{},[1728,157137,157138],{},[106,157139,1988],{},[1728,157141,157142],{},"乘法",[1728,157144,157145],{},[106,157146,157147],{},"2 * 3",[1683,157149,157150,157154,157157],{},[1728,157151,157152],{},[106,157153,2116],{},[1728,157155,157156],{},"除法，结果是浮点数",[1728,157158,157159],{},[106,157160,157161],{},"5 \u002F 2",[1683,157163,157164,157168,157171],{},[1728,157165,157166],{},[106,157167,34504],{},[1728,157169,157170],{},"整除",[1728,157172,157173],{},[106,157174,157175],{},"5 \u002F\u002F 2",[1683,157177,157178,157182,157185],{},[1728,157179,157180],{},[106,157181,1865],{},[1728,157183,157184],{},"取余",[1728,157186,157187],{},[106,157188,157189],{},"5 % 2",[1683,157191,157192,157196,157199],{},[1728,157193,157194],{},[106,157195,11978],{},[1728,157197,157198],{},"幂运算",[1728,157200,157201],{},[106,157202,157203],{},"2 ** 3",[19,157205,16308],{},[99,157207,157209],{"className":31553,"code":157208,"language":31555,"meta":104,"style":104},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[106,157210,157211,157229,157246,157263],{"__ignoreMap":104},[109,157212,157213,157215,157217,157219,157222,157224,157226],{"class":111,"line":112},[109,157214,31590],{"class":133},[109,157216,714],{"class":126},[109,157218,1856],{"class":133},[109,157220,157221],{"class":122}," \u002F",[109,157223,15928],{"class":133},[109,157225,156836],{"class":126},[109,157227,157228],{"class":115},"# 2.5\n",[109,157230,157231,157233,157235,157237,157240,157242,157244],{"class":111,"line":119},[109,157232,31590],{"class":133},[109,157234,714],{"class":126},[109,157236,1856],{"class":133},[109,157238,157239],{"class":122}," \u002F\u002F",[109,157241,15928],{"class":133},[109,157243,46983],{"class":126},[109,157245,156839],{"class":115},[109,157247,157248,157250,157252,157254,157257,157259,157261],{"class":111,"line":140},[109,157249,31590],{"class":133},[109,157251,714],{"class":126},[109,157253,1856],{"class":133},[109,157255,157256],{"class":122}," %",[109,157258,15928],{"class":133},[109,157260,156836],{"class":126},[109,157262,156856],{"class":115},[109,157264,157265,157267,157269,157271,157274,157276,157278],{"class":111,"line":154},[109,157266,31590],{"class":133},[109,157268,714],{"class":126},[109,157270,1618],{"class":133},[109,157272,157273],{"class":122}," **",[109,157275,79245],{"class":133},[109,157277,46983],{"class":126},[109,157279,157280],{"class":115},"# 8\n",[51,157282,157284],{"id":157283},"_272-赋值运算符","2.7.2 赋值运算符",[99,157286,157288],{"className":31553,"code":157287,"language":31555,"meta":104,"style":104},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[106,157289,157290,157298,157306,157314,157322],{"__ignoreMap":104},[109,157291,157292,157294,157296],{"class":111,"line":112},[109,157293,156962],{"class":126},[109,157295,130],{"class":122},[109,157297,59603],{"class":133},[109,157299,157300,157302,157304],{"class":111,"line":119},[109,157301,156962],{"class":126},[109,157303,10795],{"class":122},[109,157305,55602],{"class":133},[109,157307,157308,157310,157312],{"class":111,"line":140},[109,157309,156962],{"class":126},[109,157311,151427],{"class":122},[109,157313,48898],{"class":133},[109,157315,157316,157318,157320],{"class":111,"line":154},[109,157317,156962],{"class":126},[109,157319,138323],{"class":122},[109,157321,121211],{"class":133},[109,157323,157324,157326,157329],{"class":111,"line":161},[109,157325,156962],{"class":126},[109,157327,157328],{"class":122},"\u002F=",[109,157330,48898],{"class":133},[19,157332,157333],{},"等价关系：",[99,157335,157337],{"className":31553,"code":157336,"language":31555,"meta":104,"style":104},"num += 1\nnum = num + 1\n",[106,157338,157339,157347],{"__ignoreMap":104},[109,157340,157341,157343,157345],{"class":111,"line":112},[109,157342,156962],{"class":126},[109,157344,10795],{"class":122},[109,157346,56874],{"class":133},[109,157348,157349,157351,157353,157356,157358],{"class":111,"line":119},[109,157350,156962],{"class":126},[109,157352,130],{"class":122},[109,157354,157355],{"class":126}," num ",[109,157357,1348],{"class":122},[109,157359,56874],{"class":133},[19,157361,157362,157363,102193,157366,29560],{},"Python 没有 ",[106,157364,157365],{},"num++",[106,157367,157368],{},"num--",[51,157370,157372],{"id":157371},"_273-比较运算符","2.7.3 比较运算符",[19,157374,157375],{},"比较运算结果是布尔值。",[99,157377,157379],{"className":31553,"code":157378,"language":31555,"meta":104,"style":104},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[106,157380,157381,157395,157410,157424],{"__ignoreMap":104},[109,157382,157383,157385,157387,157389,157391,157393],{"class":111,"line":112},[109,157384,31590],{"class":133},[109,157386,714],{"class":126},[109,157388,1008],{"class":133},[109,157390,27397],{"class":122},[109,157392,3510],{"class":133},[109,157394,1330],{"class":126},[109,157396,157397,157399,157401,157403,157406,157408],{"class":111,"line":119},[109,157398,31590],{"class":133},[109,157400,714],{"class":126},[109,157402,1008],{"class":133},[109,157404,157405],{"class":122}," >=",[109,157407,134],{"class":133},[109,157409,1330],{"class":126},[109,157411,157412,157414,157416,157418,157420,157422],{"class":111,"line":140},[109,157413,31590],{"class":133},[109,157415,714],{"class":126},[109,157417,1008],{"class":133},[109,157419,102734],{"class":122},[109,157421,3445],{"class":133},[109,157423,1330],{"class":126},[109,157425,157426,157428,157430,157432,157435,157437],{"class":111,"line":154},[109,157427,31590],{"class":133},[109,157429,714],{"class":126},[109,157431,1008],{"class":133},[109,157433,157434],{"class":122}," !=",[109,157436,3445],{"class":133},[109,157438,1330],{"class":126},[19,157440,157441,157442,157444,157445,29560],{},"注意：判断相等用 ",[106,157443,4296],{},"，赋值用 ",[106,157446,130],{},[99,157448,157450],{"className":31553,"code":157449,"language":31555,"meta":104,"style":104},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[106,157451,157452,157464],{"__ignoreMap":104},[109,157453,157454,157456,157458,157461],{"class":111,"line":112},[109,157455,147721],{"class":126},[109,157457,130],{"class":122},[109,157459,157460],{"class":133}," 18",[109,157462,157463],{"class":115},"       # 赋值\n",[109,157465,157466,157468,157470,157472],{"class":111,"line":119},[109,157467,147721],{"class":126},[109,157469,4296],{"class":122},[109,157471,157460],{"class":133},[109,157473,157474],{"class":115},"      # 判断是否相等\n",[51,157476,157478],{"id":157477},"_274-逻辑运算符","2.7.4 逻辑运算符",[1677,157480,157481,157489],{},[1680,157482,157483],{},[1683,157484,157485,157487],{},[1686,157486,157099],{},[1686,157488,27044],{},[1723,157490,157491,157500,157509],{},[1683,157492,157493,157497],{},[1728,157494,157495],{},[106,157496,31637],{},[1728,157498,157499],{},"并且",[1683,157501,157502,157506],{},[1728,157503,157504],{},[106,157505,116265],{},[1728,157507,157508],{},"或者",[1683,157510,157511,157516],{},[1728,157512,157513],{},[106,157514,157515],{},"not",[1728,157517,157518],{},"取反",[99,157520,157522],{"className":31553,"code":157521,"language":31555,"meta":104,"style":104},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[106,157523,157524,157532,157541,157545,157560,157574],{"__ignoreMap":104},[109,157525,157526,157528,157530],{"class":111,"line":112},[109,157527,147721],{"class":126},[109,157529,130],{"class":122},[109,157531,89240],{"class":133},[109,157533,157534,157537,157539],{"class":111,"line":119},[109,157535,157536],{"class":126},"has_ticket ",[109,157538,130],{"class":122},[109,157540,154774],{"class":133},[109,157542,157543],{"class":111,"line":140},[109,157544,158],{"emptyLinePlaceholder":157},[109,157546,157547,157549,157551,157553,157555,157557],{"class":111,"line":154},[109,157548,31590],{"class":133},[109,157550,156943],{"class":126},[109,157552,3086],{"class":122},[109,157554,157460],{"class":133},[109,157556,121604],{"class":122},[109,157558,157559],{"class":126}," has_ticket)\n",[109,157561,157562,157564,157566,157568,157570,157572],{"class":111,"line":161},[109,157563,31590],{"class":133},[109,157565,156943],{"class":126},[109,157567,1320],{"class":122},[109,157569,157460],{"class":133},[109,157571,115376],{"class":122},[109,157573,157559],{"class":126},[109,157575,157576,157578,157580,157582],{"class":111,"line":167},[109,157577,31590],{"class":133},[109,157579,714],{"class":126},[109,157581,157515],{"class":122},[109,157583,157559],{"class":126},[14,157585,157587],{"id":157586},"_28-字符串定义","2.8 字符串定义",[19,157589,157590],{},"三种常见写法：",[99,157592,157594],{"className":31553,"code":157593,"language":31555,"meta":104,"style":104},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[106,157595,157596,157606,157615,157625],{"__ignoreMap":104},[109,157597,157598,157601,157603],{"class":111,"line":112},[109,157599,157600],{"class":126},"name1 ",[109,157602,130],{"class":122},[109,157604,157605],{"class":278}," '小明'\n",[109,157607,157608,157611,157613],{"class":111,"line":119},[109,157609,157610],{"class":126},"name2 ",[109,157612,130],{"class":122},[109,157614,150528],{"class":278},[109,157616,157617,157620,157622],{"class":111,"line":140},[109,157618,157619],{"class":126},"text ",[109,157621,130],{"class":122},[109,157623,157624],{"class":278}," \"\"\"这是多行字符串\n",[109,157626,157627],{"class":111,"line":154},[109,157628,157629],{"class":278},"可以换行\"\"\"\n",[19,157631,157632],{},"字符串中包含引号：",[99,157634,157636],{"className":31553,"code":157635,"language":31555,"meta":104,"style":104},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[106,157637,157638,157648,157658],{"__ignoreMap":104},[109,157639,157640,157643,157645],{"class":111,"line":112},[109,157641,157642],{"class":126},"msg ",[109,157644,130],{"class":122},[109,157646,157647],{"class":278}," \"他说:'你好'\"\n",[109,157649,157650,157653,157655],{"class":111,"line":119},[109,157651,157652],{"class":126},"msg2 ",[109,157654,130],{"class":122},[109,157656,157657],{"class":278}," '他说:\"你好\"'\n",[109,157659,157660,157663,157665,157668,157671,157674,157676],{"class":111,"line":140},[109,157661,157662],{"class":126},"msg3 ",[109,157664,130],{"class":122},[109,157666,157667],{"class":278}," \"他说:",[109,157669,157670],{"class":133},"\\\"",[109,157672,157673],{"class":278},"你好",[109,157675,157670],{"class":133},[109,157677,26308],{"class":278},[19,157679,157680],{},"常见转义字符：",[1677,157682,157683,157692],{},[1680,157684,157685],{},[1683,157686,157687,157690],{},[1686,157688,157689],{},"写法",[1686,157691,101875],{},[1723,157693,157694,157704,157713,157723,157732],{},[1683,157695,157696,157701],{},[1728,157697,157698],{},[106,157699,157700],{},"\\n",[1728,157702,157703],{},"换行",[1683,157705,157706,157710],{},[1728,157707,157708],{},[106,157709,2627],{},[1728,157711,157712],{},"制表符",[1683,157714,157715,157720],{},[1728,157716,157717],{},[106,157718,157719],{},"\\\\",[1728,157721,157722],{},"反斜杠",[1683,157724,157725,157729],{},[1728,157726,157727],{},[106,157728,157670],{},[1728,157730,157731],{},"双引号",[1683,157733,157734,157739],{},[1728,157735,157736],{},[106,157737,157738],{},"\\'",[1728,157740,157741],{},"单引号",[14,157743,157745],{"id":157744},"_29-字符串拼接","2.9 字符串拼接",[99,157747,157749],{"className":31553,"code":157748,"language":31555,"meta":104,"style":104},"name = \"小明\"\nprint(\"你好，\" + name)\n",[106,157750,157751,157759],{"__ignoreMap":104},[109,157752,157753,157755,157757],{"class":111,"line":112},[109,157754,147711],{"class":126},[109,157756,130],{"class":122},[109,157758,150528],{"class":278},[109,157760,157761,157763,157765,157768,157770],{"class":111,"line":119},[109,157762,31590],{"class":133},[109,157764,714],{"class":126},[109,157766,157767],{"class":278},"\"你好，\"",[109,157769,46741],{"class":122},[109,157771,157772],{"class":126}," name)\n",[19,157774,157775],{},"字符串只能和字符串拼接：",[99,157777,157779],{"className":31553,"code":157778,"language":31555,"meta":104,"style":104},"age = 18\nprint(\"年龄:\" + str(age))\n",[106,157780,157781,157789],{"__ignoreMap":104},[109,157782,157783,157785,157787],{"class":111,"line":112},[109,157784,147721],{"class":126},[109,157786,130],{"class":122},[109,157788,147726],{"class":133},[109,157790,157791,157793,157795,157797,157799,157801],{"class":111,"line":119},[109,157792,31590],{"class":133},[109,157794,714],{"class":126},[109,157796,147692],{"class":278},[109,157798,46741],{"class":122},[109,157800,75094],{"class":133},[109,157802,157803],{"class":126},"(age))\n",[19,157805,157806],{},"更推荐使用格式化字符串。",[14,157808,157810],{"id":157809},"_210-字符串格式化","2.10 字符串格式化",[51,157812,157814],{"id":157813},"_2101-百分号格式化","2.10.1 百分号格式化",[99,157816,157818],{"className":31553,"code":157817,"language":31555,"meta":104,"style":104},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[106,157819,157820,157828,157836,157845,157849],{"__ignoreMap":104},[109,157821,157822,157824,157826],{"class":111,"line":112},[109,157823,147711],{"class":126},[109,157825,130],{"class":122},[109,157827,150528],{"class":278},[109,157829,157830,157832,157834],{"class":111,"line":119},[109,157831,147721],{"class":126},[109,157833,130],{"class":122},[109,157835,147726],{"class":133},[109,157837,157838,157840,157842],{"class":111,"line":140},[109,157839,156533],{"class":126},[109,157841,130],{"class":122},[109,157843,157844],{"class":133}," 95.5\n",[109,157846,157847],{"class":111,"line":154},[109,157848,158],{"emptyLinePlaceholder":157},[109,157850,157851,157853,157855,157858,157861,157864,157867,157870,157873,157875,157877],{"class":111,"line":161},[109,157852,31590],{"class":133},[109,157854,714],{"class":126},[109,157856,157857],{"class":278},"\"姓名:",[109,157859,157860],{"class":133},"%s",[109,157862,157863],{"class":278}," 年龄:",[109,157865,157866],{"class":133},"%d",[109,157868,157869],{"class":278}," 分数:",[109,157871,157872],{"class":133},"%.1f",[109,157874,1789],{"class":278},[109,157876,157256],{"class":122},[109,157878,157879],{"class":126}," (name, age, score))\n",[19,157881,157882],{},"常用占位符：",[1677,157884,157885,157894],{},[1680,157886,157887],{},[1683,157888,157889,157892],{},[1686,157890,157891],{},"占位符",[1686,157893,27044],{},[1723,157895,157896,157904,157912],{},[1683,157897,157898,157902],{},[1728,157899,157900],{},[106,157901,157860],{},[1728,157903,156399],{},[1683,157905,157906,157910],{},[1728,157907,157908],{},[106,157909,157866],{},[1728,157911,156377],{},[1683,157913,157914,157919],{},[1728,157915,157916],{},[106,157917,157918],{},"%f",[1728,157920,156388],{},[19,157922,157923],{},"精度控制：",[99,157925,157927],{"className":31553,"code":157926,"language":31555,"meta":104,"style":104},"price = 12.3456\nprint(\"%.2f\" % price)\n",[106,157928,157929,157938],{"__ignoreMap":104},[109,157930,157931,157933,157935],{"class":111,"line":112},[109,157932,147856],{"class":126},[109,157934,130],{"class":122},[109,157936,157937],{"class":133}," 12.3456\n",[109,157939,157940,157942,157944,157946,157949,157951,157953],{"class":111,"line":119},[109,157941,31590],{"class":133},[109,157943,714],{"class":126},[109,157945,1789],{"class":278},[109,157947,157948],{"class":133},"%.2f",[109,157950,1789],{"class":278},[109,157952,157256],{"class":122},[109,157954,157955],{"class":126}," price)\n",[51,157957,157959],{"id":157958},"_2102-format方法","2.10.2 format方法",[99,157961,157963],{"className":31553,"code":157962,"language":31555,"meta":104,"style":104},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[106,157964,157965,157973,157981,157985,158004,158024],{"__ignoreMap":104},[109,157966,157967,157969,157971],{"class":111,"line":112},[109,157968,147711],{"class":126},[109,157970,130],{"class":122},[109,157972,150528],{"class":278},[109,157974,157975,157977,157979],{"class":111,"line":119},[109,157976,147721],{"class":126},[109,157978,130],{"class":122},[109,157980,147726],{"class":133},[109,157982,157983],{"class":111,"line":140},[109,157984,158],{"emptyLinePlaceholder":157},[109,157986,157987,157989,157991,157993,157995,157997,157999,158001],{"class":111,"line":154},[109,157988,31590],{"class":133},[109,157990,714],{"class":126},[109,157992,157857],{"class":278},[109,157994,33634],{"class":133},[109,157996,157863],{"class":278},[109,157998,33634],{"class":133},[109,158000,1789],{"class":278},[109,158002,158003],{"class":126},".format(name, age))\n",[109,158005,158006,158008,158010,158012,158015,158017,158020,158022],{"class":111,"line":161},[109,158007,31590],{"class":133},[109,158009,714],{"class":126},[109,158011,157857],{"class":278},[109,158013,158014],{"class":133},"{0}",[109,158016,157863],{"class":278},[109,158018,158019],{"class":133},"{1}",[109,158021,1789],{"class":278},[109,158023,158003],{"class":126},[109,158025,158026,158028,158030,158032,158035,158037,158040,158042,158045,158047,158049,158052,158054,158056],{"class":111,"line":167},[109,158027,31590],{"class":133},[109,158029,714],{"class":126},[109,158031,157857],{"class":278},[109,158033,158034],{"class":133},"{name}",[109,158036,157863],{"class":278},[109,158038,158039],{"class":133},"{age}",[109,158041,1789],{"class":278},[109,158043,158044],{"class":126},".format(",[109,158046,80985],{"class":6553},[109,158048,130],{"class":122},[109,158050,158051],{"class":126},"name, ",[109,158053,71396],{"class":6553},[109,158055,130],{"class":122},[109,158057,158058],{"class":126},"age))\n",[51,158060,158062],{"id":158061},"_2103-f-string","2.10.3 f-string",[19,158064,158065],{},"推荐写法：",[99,158067,158069],{"className":31553,"code":158068,"language":31555,"meta":104,"style":104},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[106,158070,158071,158079,158087,158095,158099],{"__ignoreMap":104},[109,158072,158073,158075,158077],{"class":111,"line":112},[109,158074,147711],{"class":126},[109,158076,130],{"class":122},[109,158078,150528],{"class":278},[109,158080,158081,158083,158085],{"class":111,"line":119},[109,158082,147721],{"class":126},[109,158084,130],{"class":122},[109,158086,147726],{"class":133},[109,158088,158089,158091,158093],{"class":111,"line":140},[109,158090,156533],{"class":126},[109,158092,130],{"class":122},[109,158094,157844],{"class":133},[109,158096,158097],{"class":111,"line":154},[109,158098,158],{"emptyLinePlaceholder":157},[109,158100,158101,158103,158105,158107,158109,158111,158113,158115,158117,158119,158121,158123,158125,158127,158130,158133,158135,158137],{"class":111,"line":161},[109,158102,31590],{"class":133},[109,158104,714],{"class":126},[109,158106,1595],{"class":122},[109,158108,157857],{"class":278},[109,158110,2427],{"class":133},[109,158112,80985],{"class":126},[109,158114,2476],{"class":133},[109,158116,157863],{"class":278},[109,158118,2427],{"class":133},[109,158120,71396],{"class":126},[109,158122,2476],{"class":133},[109,158124,157869],{"class":278},[109,158126,2427],{"class":133},[109,158128,158129],{"class":126},"score",[109,158131,158132],{"class":122},":.1f",[109,158134,2476],{"class":133},[109,158136,1789],{"class":278},[109,158138,1330],{"class":126},[19,158140,158141],{},"表达式也可以放进去：",[99,158143,158145],{"className":31553,"code":158144,"language":31555,"meta":104,"style":104},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[106,158146,158147,158155,158163],{"__ignoreMap":104},[109,158148,158149,158151,158153],{"class":111,"line":112},[109,158150,147856],{"class":126},[109,158152,130],{"class":122},[109,158154,147861],{"class":133},[109,158156,158157,158159,158161],{"class":111,"line":119},[109,158158,147866],{"class":126},[109,158160,130],{"class":122},[109,158162,55602],{"class":133},[109,158164,158165,158167,158169,158171,158174,158176,158178,158180,158183,158185,158188],{"class":111,"line":140},[109,158166,31590],{"class":133},[109,158168,714],{"class":126},[109,158170,1595],{"class":122},[109,158172,158173],{"class":278},"\"总价:",[109,158175,2427],{"class":133},[109,158177,147856],{"class":126},[109,158179,1988],{"class":122},[109,158181,158182],{"class":126}," count",[109,158184,2476],{"class":133},[109,158186,158187],{"class":278},"元\"",[109,158189,1330],{"class":126},[14,158191,158193],{"id":158192},"_211-input输入","2.11 input输入",[19,158195,158196,158199],{},[106,158197,158198],{},"input()"," 会暂停程序，等待用户输入。",[99,158201,158203],{"className":31553,"code":158202,"language":31555,"meta":104,"style":104},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[106,158204,158205,158219],{"__ignoreMap":104},[109,158206,158207,158209,158211,158213,158215,158217],{"class":111,"line":112},[109,158208,147711],{"class":126},[109,158210,130],{"class":122},[109,158212,61780],{"class":133},[109,158214,714],{"class":126},[109,158216,153554],{"class":278},[109,158218,1330],{"class":126},[109,158220,158221,158223,158225,158227,158230,158232,158234,158236,158238],{"class":111,"line":119},[109,158222,31590],{"class":133},[109,158224,714],{"class":126},[109,158226,1595],{"class":122},[109,158228,158229],{"class":278},"\"你好，",[109,158231,2427],{"class":133},[109,158233,80985],{"class":126},[109,158235,2476],{"class":133},[109,158237,1789],{"class":278},[109,158239,1330],{"class":126},[19,158241,158242],{},"输入整数：",[99,158244,158246],{"className":31553,"code":158245,"language":31555,"meta":104,"style":104},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[106,158247,158248,158266],{"__ignoreMap":104},[109,158249,158250,158252,158254,158256,158258,158260,158262,158264],{"class":111,"line":112},[109,158251,147721],{"class":126},[109,158253,130],{"class":122},[109,158255,173],{"class":133},[109,158257,714],{"class":126},[109,158259,54996],{"class":133},[109,158261,714],{"class":126},[109,158263,153569],{"class":278},[109,158265,31672],{"class":126},[109,158267,158268,158270,158272,158274,158277,158279,158281,158283,158286,158288],{"class":111,"line":119},[109,158269,31590],{"class":133},[109,158271,714],{"class":126},[109,158273,1595],{"class":122},[109,158275,158276],{"class":278},"\"明年你",[109,158278,2427],{"class":133},[109,158280,147721],{"class":126},[109,158282,1348],{"class":122},[109,158284,158285],{"class":133}," 1}",[109,158287,150579],{"class":278},[109,158289,1330],{"class":126},[19,158291,158292],{},"输入小数：",[99,158294,158296],{"className":31553,"code":158295,"language":31555,"meta":104,"style":104},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[106,158297,158298,158317],{"__ignoreMap":104},[109,158299,158300,158302,158304,158306,158308,158310,158312,158315],{"class":111,"line":112},[109,158301,156506],{"class":126},[109,158303,130],{"class":122},[109,158305,110972],{"class":133},[109,158307,714],{"class":126},[109,158309,54996],{"class":133},[109,158311,714],{"class":126},[109,158313,158314],{"class":278},"\"请输入身高:\"",[109,158316,31672],{"class":126},[109,158318,158319,158321,158323,158325,158328,158330,158332,158335,158337,158340],{"class":111,"line":119},[109,158320,31590],{"class":133},[109,158322,714],{"class":126},[109,158324,1595],{"class":122},[109,158326,158327],{"class":278},"\"身高:",[109,158329,2427],{"class":133},[109,158331,26156],{"class":126},[109,158333,158334],{"class":122},":.2f",[109,158336,2476],{"class":133},[109,158338,158339],{"class":278},"米\"",[109,158341,1330],{"class":126},[14,158343,158345],{"id":158344},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158347,124467],{},[765,158349,158350,158353,158356,158359],{},[30,158351,158352],{},"输入商品单价。",[30,158354,158355],{},"输入购买数量。",[30,158357,158358],{},"输入折扣，例如 0.8 表示八折。",[30,158360,158361],{},"输出最终金额，保留两位小数。",[19,158363,11353],{},[99,158365,158367],{"className":31553,"code":158366,"language":31555,"meta":104,"style":104},"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",[106,158368,158369,158388,158407,158427,158431,158451,158455,158478,158499,158521],{"__ignoreMap":104},[109,158370,158371,158373,158375,158377,158379,158381,158383,158386],{"class":111,"line":112},[109,158372,147856],{"class":126},[109,158374,130],{"class":122},[109,158376,110972],{"class":133},[109,158378,714],{"class":126},[109,158380,54996],{"class":133},[109,158382,714],{"class":126},[109,158384,158385],{"class":278},"\"请输入商品单价:\"",[109,158387,31672],{"class":126},[109,158389,158390,158392,158394,158396,158398,158400,158402,158405],{"class":111,"line":119},[109,158391,147866],{"class":126},[109,158393,130],{"class":122},[109,158395,173],{"class":133},[109,158397,714],{"class":126},[109,158399,54996],{"class":133},[109,158401,714],{"class":126},[109,158403,158404],{"class":278},"\"请输入购买数量:\"",[109,158406,31672],{"class":126},[109,158408,158409,158412,158414,158416,158418,158420,158422,158425],{"class":111,"line":140},[109,158410,158411],{"class":126},"discount ",[109,158413,130],{"class":122},[109,158415,110972],{"class":133},[109,158417,714],{"class":126},[109,158419,54996],{"class":133},[109,158421,714],{"class":126},[109,158423,158424],{"class":278},"\"请输入折扣:\"",[109,158426,31672],{"class":126},[109,158428,158429],{"class":111,"line":154},[109,158430,158],{"emptyLinePlaceholder":157},[109,158432,158433,158436,158438,158441,158443,158446,158448],{"class":111,"line":161},[109,158434,158435],{"class":126},"total ",[109,158437,130],{"class":122},[109,158439,158440],{"class":126}," price ",[109,158442,1988],{"class":122},[109,158444,158445],{"class":126}," count ",[109,158447,1988],{"class":122},[109,158449,158450],{"class":126}," discount\n",[109,158452,158453],{"class":111,"line":167},[109,158454,158],{"emptyLinePlaceholder":157},[109,158456,158457,158459,158461,158463,158466,158468,158470,158472,158474,158476],{"class":111,"line":185},[109,158458,31590],{"class":133},[109,158460,714],{"class":126},[109,158462,1595],{"class":122},[109,158464,158465],{"class":278},"\"商品单价:",[109,158467,2427],{"class":133},[109,158469,80990],{"class":126},[109,158471,158334],{"class":122},[109,158473,2476],{"class":133},[109,158475,1789],{"class":278},[109,158477,1330],{"class":126},[109,158479,158480,158482,158484,158486,158489,158491,158493,158495,158497],{"class":111,"line":201},[109,158481,31590],{"class":133},[109,158483,714],{"class":126},[109,158485,1595],{"class":122},[109,158487,158488],{"class":278},"\"购买数量:",[109,158490,2427],{"class":133},[109,158492,85609],{"class":126},[109,158494,2476],{"class":133},[109,158496,1789],{"class":278},[109,158498,1330],{"class":126},[109,158500,158501,158503,158505,158507,158510,158512,158515,158517,158519],{"class":111,"line":206},[109,158502,31590],{"class":133},[109,158504,714],{"class":126},[109,158506,1595],{"class":122},[109,158508,158509],{"class":278},"\"折扣:",[109,158511,2427],{"class":133},[109,158513,158514],{"class":126},"discount",[109,158516,2476],{"class":133},[109,158518,1789],{"class":278},[109,158520,1330],{"class":126},[109,158522,158523,158525,158527,158529,158532,158534,158537,158539,158541,158543],{"class":111,"line":218},[109,158524,31590],{"class":133},[109,158526,714],{"class":126},[109,158528,1595],{"class":122},[109,158530,158531],{"class":278},"\"应付金额:",[109,158533,2427],{"class":133},[109,158535,158536],{"class":126},"total",[109,158538,158334],{"class":122},[109,158540,2476],{"class":133},[109,158542,158187],{"class":278},[109,158544,1330],{"class":126},[14,158546,158548],{"id":158547},"_213-易错点","2.13 易错点",[765,158550,158551,158556,158562,158570,158573],{},[30,158552,158553,158555],{},[106,158554,158198],{}," 的结果是字符串，做运算前要转换。",[30,158557,158558,158559,29560],{},"字符串拼接时，数字要先 ",[106,158560,158561],{},"str()",[30,158563,158564,158566,158567,158569],{},[106,158565,130],{}," 是赋值，",[106,158568,4296],{}," 是比较。",[30,158571,158572],{},"Python 没有自增自减运算符。",[30,158574,158575],{},"浮点数计算可能有精度误差：",[99,158577,158579],{"className":31553,"code":158578,"language":31555,"meta":104,"style":104},"print(0.1 + 0.2)\n",[106,158580,158581],{"__ignoreMap":104},[109,158582,158583,158585,158587,158589,158591,158594],{"class":111,"line":112},[109,158584,31590],{"class":133},[109,158586,714],{"class":126},[109,158588,87385],{"class":133},[109,158590,46741],{"class":122},[109,158592,158593],{"class":133}," 0.2",[109,158595,1330],{"class":126},[19,158597,158598,158599,158602],{},"金额计算如果要求严格，可以后续学习 ",[106,158600,158601],{},"decimal"," 模块。",[14,158604,158606],{"id":158605},"_214-本章练习","2.14 本章练习",[765,158608,158609,158612,158615,158618,158621],{},[30,158610,158611],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[30,158613,158614],{},"输入圆的半径，计算面积，保留两位小数。",[30,158616,158617],{},"输入工资和奖金，计算总收入。",[30,158619,158620],{},"输入摄氏温度，转换为华氏温度。",[30,158622,158623],{},"写一个 BMI 计算程序：",[99,158625,158628],{"className":158626,"code":158627,"language":6524,"meta":104},[6522],"BMI = 体重kg \u002F 身高m ** 2\n",[106,158629,158627],{"__ignoreMap":104},[1467,158631,158632],{},"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":104,"searchDepth":119,"depth":119,"links":158634},[158635,158636,158637,158638,158639,158640,158641,158647,158648,158649,158654,158655,158656,158657],{"id":156196,"depth":119,"text":156197},{"id":156305,"depth":119,"text":156306},{"id":156476,"depth":119,"text":156477},{"id":156553,"depth":119,"text":156554},{"id":51906,"depth":119,"text":51907},{"id":156859,"depth":119,"text":156860},{"id":157085,"depth":119,"text":157086,"children":158642},[158643,158644,158645,158646],{"id":157089,"depth":140,"text":157090},{"id":157283,"depth":140,"text":157284},{"id":157371,"depth":140,"text":157372},{"id":157477,"depth":140,"text":157478},{"id":157586,"depth":119,"text":157587},{"id":157744,"depth":119,"text":157745},{"id":157809,"depth":119,"text":157810,"children":158650},[158651,158652,158653],{"id":157813,"depth":140,"text":157814},{"id":157958,"depth":140,"text":157959},{"id":158061,"depth":140,"text":158062},{"id":158192,"depth":119,"text":158193},{"id":158344,"depth":119,"text":158345},{"id":158547,"depth":119,"text":158548},{"id":158605,"depth":119,"text":158606},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156188,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158664,"title":158665,"body":158666,"description":24550,"extension":1476,"meta":160302,"navigation":157,"path":160303,"seo":160304,"stem":160305,"__hash__":160306},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158667,"toc":160283},[158668,158671,158675,158678,158693,158696,158724,158728,158778,158780,158796,158799,158825,158828,158832,158899,158902,158918,158922,158925,159043,159046,159053,159102,159108,159112,159115,159228,159231,159235,159239,159242,159292,159296,159299,159349,159353,159356,159394,159398,159401,159447,159450,159485,159489,159494,159497,159543,159545,159612,159616,159622,159733,159742,159746,159748,159759,159761,159927,159931,159933,159947,159949,160163,160167,160186,160203,160206,160252,160256,160280],[10,158669,158665],{"id":158670},"_3-判断语句",[14,158672,158674],{"id":158673},"_31-布尔值","3.1 布尔值",[19,158676,158677],{},"判断语句依赖布尔值：",[99,158679,158681],{"className":31553,"code":158680,"language":31555,"meta":104,"style":104},"True\nFalse\n",[106,158682,158683,158688],{"__ignoreMap":104},[109,158684,158685],{"class":111,"line":112},[109,158686,158687],{"class":133},"True\n",[109,158689,158690],{"class":111,"line":119},[109,158691,158692],{"class":133},"False\n",[19,158694,158695],{},"比较表达式会产生布尔值：",[99,158697,158699],{"className":31553,"code":158698,"language":31555,"meta":104,"style":104},"age = 18\nprint(age >= 18)  # True\n",[106,158700,158701,158709],{"__ignoreMap":104},[109,158702,158703,158705,158707],{"class":111,"line":112},[109,158704,147721],{"class":126},[109,158706,130],{"class":122},[109,158708,147726],{"class":133},[109,158710,158711,158713,158715,158717,158719,158721],{"class":111,"line":119},[109,158712,31590],{"class":133},[109,158714,156943],{"class":126},[109,158716,3086],{"class":122},[109,158718,157460],{"class":133},[109,158720,46983],{"class":126},[109,158722,158723],{"class":115},"# True\n",[14,158725,158727],{"id":158726},"_32-if基础语法","3.2 if基础语法",[99,158729,158731],{"className":31553,"code":158730,"language":31555,"meta":104,"style":104},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[106,158732,158733,158751,158755,158767],{"__ignoreMap":104},[109,158734,158735,158737,158739,158741,158743,158745,158747,158749],{"class":111,"line":112},[109,158736,147721],{"class":126},[109,158738,130],{"class":122},[109,158740,173],{"class":133},[109,158742,714],{"class":126},[109,158744,54996],{"class":133},[109,158746,714],{"class":126},[109,158748,153569],{"class":278},[109,158750,31672],{"class":126},[109,158752,158753],{"class":111,"line":119},[109,158754,158],{"emptyLinePlaceholder":157},[109,158756,158757,158759,158761,158763,158765],{"class":111,"line":140},[109,158758,2922],{"class":122},[109,158760,16880],{"class":126},[109,158762,3086],{"class":122},[109,158764,157460],{"class":133},[109,158766,5082],{"class":126},[109,158768,158769,158771,158773,158776],{"class":111,"line":154},[109,158770,32474],{"class":133},[109,158772,714],{"class":126},[109,158774,158775],{"class":278},"\"可以进入网吧\"",[109,158777,1330],{"class":126},[19,158779,10343],{},[765,158781,158782,158787,158790,158793],{},[30,158783,158784,158786],{},[106,158785,2922],{}," 后面是条件表达式。",[30,158788,158789],{},"条件后面必须写冒号。",[30,158791,158792],{},"条件成立时执行缩进代码块。",[30,158794,158795],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158797,158798],{},"错误示例：",[99,158800,158802],{"className":31553,"code":158801,"language":31555,"meta":104,"style":104},"if age >= 18\n    print(\"可以进入\")\n",[106,158803,158804,158814],{"__ignoreMap":104},[109,158805,158806,158808,158810,158812],{"class":111,"line":112},[109,158807,2922],{"class":122},[109,158809,16880],{"class":126},[109,158811,3086],{"class":122},[109,158813,147726],{"class":133},[109,158815,158816,158818,158820,158823],{"class":111,"line":119},[109,158817,32474],{"class":133},[109,158819,714],{"class":126},[109,158821,158822],{"class":278},"\"可以进入\"",[109,158824,1330],{"class":126},[19,158826,158827],{},"缺少冒号。",[14,158829,158831],{"id":158830},"_33-if-else","3.3 if else",[99,158833,158835],{"className":31553,"code":158834,"language":31555,"meta":104,"style":104},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[106,158836,158837,158855,158859,158871,158882,158888],{"__ignoreMap":104},[109,158838,158839,158841,158843,158845,158847,158849,158851,158853],{"class":111,"line":112},[109,158840,147721],{"class":126},[109,158842,130],{"class":122},[109,158844,173],{"class":133},[109,158846,714],{"class":126},[109,158848,54996],{"class":133},[109,158850,714],{"class":126},[109,158852,153569],{"class":278},[109,158854,31672],{"class":126},[109,158856,158857],{"class":111,"line":119},[109,158858,158],{"emptyLinePlaceholder":157},[109,158860,158861,158863,158865,158867,158869],{"class":111,"line":140},[109,158862,2922],{"class":122},[109,158864,16880],{"class":126},[109,158866,3086],{"class":122},[109,158868,157460],{"class":133},[109,158870,5082],{"class":126},[109,158872,158873,158875,158877,158880],{"class":111,"line":154},[109,158874,32474],{"class":133},[109,158876,714],{"class":126},[109,158878,158879],{"class":278},"\"成年人\"",[109,158881,1330],{"class":126},[109,158883,158884,158886],{"class":111,"line":161},[109,158885,3077],{"class":122},[109,158887,5082],{"class":126},[109,158889,158890,158892,158894,158897],{"class":111,"line":167},[109,158891,32474],{"class":133},[109,158893,714],{"class":126},[109,158895,158896],{"class":278},"\"未成年人\"",[109,158898,1330],{"class":126},[19,158900,158901],{},"执行逻辑：",[765,158903,158904,158910,158915],{},[30,158905,158906,158907,158909],{},"条件成立，执行 ",[106,158908,2922],{}," 代码块。",[30,158911,158912,158913,158909],{},"条件不成立，执行 ",[106,158914,3077],{},[30,158916,158917],{},"两个代码块只会执行其中一个。",[14,158919,158921],{"id":158920},"_34-if-elif-else","3.4 if elif else",[19,158923,158924],{},"多条件判断：",[99,158926,158928],{"className":31553,"code":158927,"language":31555,"meta":104,"style":104},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[106,158929,158930,158948,158952,158966,158977,158991,159002,159015,159026,159032],{"__ignoreMap":104},[109,158931,158932,158934,158936,158938,158940,158942,158944,158946],{"class":111,"line":112},[109,158933,156533],{"class":126},[109,158935,130],{"class":122},[109,158937,173],{"class":133},[109,158939,714],{"class":126},[109,158941,54996],{"class":133},[109,158943,714],{"class":126},[109,158945,153584],{"class":278},[109,158947,31672],{"class":126},[109,158949,158950],{"class":111,"line":119},[109,158951,158],{"emptyLinePlaceholder":157},[109,158953,158954,158956,158959,158961,158964],{"class":111,"line":140},[109,158955,2922],{"class":122},[109,158957,158958],{"class":126}," score ",[109,158960,3086],{"class":122},[109,158962,158963],{"class":133}," 90",[109,158965,5082],{"class":126},[109,158967,158968,158970,158972,158975],{"class":111,"line":154},[109,158969,32474],{"class":133},[109,158971,714],{"class":126},[109,158973,158974],{"class":278},"\"优秀\"",[109,158976,1330],{"class":126},[109,158978,158979,158982,158984,158986,158989],{"class":111,"line":161},[109,158980,158981],{"class":122},"elif",[109,158983,158958],{"class":126},[109,158985,3086],{"class":122},[109,158987,158988],{"class":133}," 80",[109,158990,5082],{"class":126},[109,158992,158993,158995,158997,159000],{"class":111,"line":167},[109,158994,32474],{"class":133},[109,158996,714],{"class":126},[109,158998,158999],{"class":278},"\"良好\"",[109,159001,1330],{"class":126},[109,159003,159004,159006,159008,159010,159013],{"class":111,"line":185},[109,159005,158981],{"class":122},[109,159007,158958],{"class":126},[109,159009,3086],{"class":122},[109,159011,159012],{"class":133}," 60",[109,159014,5082],{"class":126},[109,159016,159017,159019,159021,159024],{"class":111,"line":201},[109,159018,32474],{"class":133},[109,159020,714],{"class":126},[109,159022,159023],{"class":278},"\"及格\"",[109,159025,1330],{"class":126},[109,159027,159028,159030],{"class":111,"line":206},[109,159029,3077],{"class":122},[109,159031,5082],{"class":126},[109,159033,159034,159036,159038,159041],{"class":111,"line":218},[109,159035,32474],{"class":133},[109,159037,714],{"class":126},[109,159039,159040],{"class":278},"\"不及格\"",[109,159042,1330],{"class":126},[19,159044,159045],{},"注意判断顺序很重要。",[19,159047,159048,159049,159052],{},"如果把 ",[106,159050,159051],{},"score >= 60"," 放在最前面：",[99,159054,159056],{"className":31553,"code":159055,"language":31555,"meta":104,"style":104},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[106,159057,159058,159070,159080,159092],{"__ignoreMap":104},[109,159059,159060,159062,159064,159066,159068],{"class":111,"line":112},[109,159061,2922],{"class":122},[109,159063,158958],{"class":126},[109,159065,3086],{"class":122},[109,159067,159012],{"class":133},[109,159069,5082],{"class":126},[109,159071,159072,159074,159076,159078],{"class":111,"line":119},[109,159073,32474],{"class":133},[109,159075,714],{"class":126},[109,159077,159023],{"class":278},[109,159079,1330],{"class":126},[109,159081,159082,159084,159086,159088,159090],{"class":111,"line":140},[109,159083,158981],{"class":122},[109,159085,158958],{"class":126},[109,159087,3086],{"class":122},[109,159089,158963],{"class":133},[109,159091,5082],{"class":126},[109,159093,159094,159096,159098,159100],{"class":111,"line":154},[109,159095,32474],{"class":133},[109,159097,714],{"class":126},[109,159099,158974],{"class":278},[109,159101,1330],{"class":126},[19,159103,159104,159105,159107],{},"成绩 95 会先满足 ",[106,159106,159051],{},"，后面的优秀分支就不会执行。",[14,159109,159111],{"id":159110},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159113,159114],{},"嵌套判断就是在一个判断内部再写判断。",[99,159116,159118],{"className":31553,"code":159117,"language":31555,"meta":104,"style":104},"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",[106,159119,159120,159138,159153,159157,159169,159183,159193,159200,159211,159217],{"__ignoreMap":104},[109,159121,159122,159124,159126,159128,159130,159132,159134,159136],{"class":111,"line":112},[109,159123,147721],{"class":126},[109,159125,130],{"class":122},[109,159127,173],{"class":133},[109,159129,714],{"class":126},[109,159131,54996],{"class":133},[109,159133,714],{"class":126},[109,159135,153569],{"class":278},[109,159137,31672],{"class":126},[109,159139,159140,159142,159144,159146,159148,159151],{"class":111,"line":119},[109,159141,157536],{"class":126},[109,159143,130],{"class":122},[109,159145,61780],{"class":133},[109,159147,714],{"class":126},[109,159149,159150],{"class":278},"\"是否有票(y\u002Fn):\"",[109,159152,1330],{"class":126},[109,159154,159155],{"class":111,"line":140},[109,159156,158],{"emptyLinePlaceholder":157},[109,159158,159159,159161,159163,159165,159167],{"class":111,"line":154},[109,159160,2922],{"class":122},[109,159162,16880],{"class":126},[109,159164,3086],{"class":122},[109,159166,157460],{"class":133},[109,159168,5082],{"class":126},[109,159170,159171,159173,159176,159178,159181],{"class":111,"line":161},[109,159172,4446],{"class":122},[109,159174,159175],{"class":126}," has_ticket ",[109,159177,4296],{"class":122},[109,159179,159180],{"class":278}," \"y\"",[109,159182,5082],{"class":126},[109,159184,159185,159187,159189,159191],{"class":111,"line":167},[109,159186,33626],{"class":133},[109,159188,714],{"class":126},[109,159190,158822],{"class":278},[109,159192,1330],{"class":126},[109,159194,159195,159198],{"class":111,"line":185},[109,159196,159197],{"class":122},"    else",[109,159199,5082],{"class":126},[109,159201,159202,159204,159206,159209],{"class":111,"line":201},[109,159203,33626],{"class":133},[109,159205,714],{"class":126},[109,159207,159208],{"class":278},"\"请先买票\"",[109,159210,1330],{"class":126},[109,159212,159213,159215],{"class":111,"line":206},[109,159214,3077],{"class":122},[109,159216,5082],{"class":126},[109,159218,159219,159221,159223,159226],{"class":111,"line":218},[109,159220,32474],{"class":133},[109,159222,714],{"class":126},[109,159224,159225],{"class":278},"\"未成年人禁止进入\"",[109,159227,1330],{"class":126},[19,159229,159230],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159232,159234],{"id":159233},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[51,159236,159238],{"id":159237},"_361-and","3.6.1 and",[19,159240,159241],{},"两个条件都成立才成立。",[99,159243,159245],{"className":31553,"code":159244,"language":31555,"meta":104,"style":104},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[106,159246,159247,159255,159263,159267,159282],{"__ignoreMap":104},[109,159248,159249,159251,159253],{"class":111,"line":112},[109,159250,147721],{"class":126},[109,159252,130],{"class":122},[109,159254,89240],{"class":133},[109,159256,159257,159259,159261],{"class":111,"line":119},[109,159258,157536],{"class":126},[109,159260,130],{"class":122},[109,159262,154774],{"class":133},[109,159264,159265],{"class":111,"line":140},[109,159266,158],{"emptyLinePlaceholder":157},[109,159268,159269,159271,159273,159275,159277,159279],{"class":111,"line":154},[109,159270,2922],{"class":122},[109,159272,16880],{"class":126},[109,159274,3086],{"class":122},[109,159276,157460],{"class":133},[109,159278,121604],{"class":122},[109,159280,159281],{"class":126}," has_ticket:\n",[109,159283,159284,159286,159288,159290],{"class":111,"line":161},[109,159285,32474],{"class":133},[109,159287,714],{"class":126},[109,159289,158822],{"class":278},[109,159291,1330],{"class":126},[51,159293,159295],{"id":159294},"_362-or","3.6.2 or",[19,159297,159298],{},"只要一个条件成立就成立。",[99,159300,159302],{"className":31553,"code":159301,"language":31555,"meta":104,"style":104},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[106,159303,159304,159313,159322,159326,159338],{"__ignoreMap":104},[109,159305,159306,159309,159311],{"class":111,"line":112},[109,159307,159308],{"class":126},"is_vip ",[109,159310,130],{"class":122},[109,159312,126982],{"class":133},[109,159314,159315,159318,159320],{"class":111,"line":119},[109,159316,159317],{"class":126},"coupon ",[109,159319,130],{"class":122},[109,159321,154774],{"class":133},[109,159323,159324],{"class":111,"line":140},[109,159325,158],{"emptyLinePlaceholder":157},[109,159327,159328,159330,159333,159335],{"class":111,"line":154},[109,159329,2922],{"class":122},[109,159331,159332],{"class":126}," is_vip ",[109,159334,116265],{"class":122},[109,159336,159337],{"class":126}," coupon:\n",[109,159339,159340,159342,159344,159347],{"class":111,"line":161},[109,159341,32474],{"class":133},[109,159343,714],{"class":126},[109,159345,159346],{"class":278},"\"可以享受优惠\"",[109,159348,1330],{"class":126},[51,159350,159352],{"id":159351},"_363-not","3.6.3 not",[19,159354,159355],{},"取反。",[99,159357,159359],{"className":31553,"code":159358,"language":31555,"meta":104,"style":104},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[106,159360,159361,159370,159374,159383],{"__ignoreMap":104},[109,159362,159363,159366,159368],{"class":111,"line":112},[109,159364,159365],{"class":126},"is_closed ",[109,159367,130],{"class":122},[109,159369,126982],{"class":133},[109,159371,159372],{"class":111,"line":119},[109,159373,158],{"emptyLinePlaceholder":157},[109,159375,159376,159378,159380],{"class":111,"line":140},[109,159377,2922],{"class":122},[109,159379,40105],{"class":122},[109,159381,159382],{"class":126}," is_closed:\n",[109,159384,159385,159387,159389,159392],{"class":111,"line":154},[109,159386,32474],{"class":133},[109,159388,714],{"class":126},[109,159390,159391],{"class":278},"\"店铺营业中\"",[109,159393,1330],{"class":126},[14,159395,159397],{"id":159396},"_37-链式比较","3.7 链式比较",[19,159399,159400],{},"Python 支持链式比较：",[99,159402,159404],{"className":31553,"code":159403,"language":31555,"meta":104,"style":104},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[106,159405,159406,159415,159419,159436],{"__ignoreMap":104},[109,159407,159408,159410,159412],{"class":111,"line":112},[109,159409,156533],{"class":126},[109,159411,130],{"class":122},[109,159413,159414],{"class":133}," 85\n",[109,159416,159417],{"class":111,"line":119},[109,159418,158],{"emptyLinePlaceholder":157},[109,159420,159421,159423,159425,159428,159430,159432,159434],{"class":111,"line":140},[109,159422,2922],{"class":122},[109,159424,734],{"class":133},[109,159426,159427],{"class":122}," \u003C=",[109,159429,158958],{"class":126},[109,159431,2976],{"class":122},[109,159433,7085],{"class":133},[109,159435,5082],{"class":126},[109,159437,159438,159440,159442,159445],{"class":111,"line":154},[109,159439,32474],{"class":133},[109,159441,714],{"class":126},[109,159443,159444],{"class":278},"\"成绩合法\"",[109,159446,1330],{"class":126},[19,159448,159449],{},"等价于：",[99,159451,159453],{"className":31553,"code":159452,"language":31555,"meta":104,"style":104},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[106,159454,159455,159475],{"__ignoreMap":104},[109,159456,159457,159459,159461,159463,159465,159467,159469,159471,159473],{"class":111,"line":112},[109,159458,2922],{"class":122},[109,159460,158958],{"class":126},[109,159462,3086],{"class":122},[109,159464,734],{"class":133},[109,159466,121604],{"class":122},[109,159468,158958],{"class":126},[109,159470,2976],{"class":122},[109,159472,7085],{"class":133},[109,159474,5082],{"class":126},[109,159476,159477,159479,159481,159483],{"class":111,"line":119},[109,159478,32474],{"class":133},[109,159480,714],{"class":126},[109,159482,159444],{"class":278},[109,159484,1330],{"class":126},[14,159486,159488],{"id":159487},"_38-真值和假值","3.8 真值和假值",[19,159490,117642,159491,159493],{},[106,159492,2922],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159495,159496],{},"假值：",[99,159498,159500],{"className":31553,"code":159499,"language":31555,"meta":104,"style":104},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[106,159501,159502,159506,159511,159515,159519,159524,159528,159532,159537],{"__ignoreMap":104},[109,159503,159504],{"class":111,"line":112},[109,159505,158692],{"class":133},[109,159507,159508],{"class":111,"line":119},[109,159509,159510],{"class":133},"None\n",[109,159512,159513],{"class":111,"line":140},[109,159514,4430],{"class":133},[109,159516,159517],{"class":111,"line":154},[109,159518,33517],{"class":133},[109,159520,159521],{"class":111,"line":161},[109,159522,159523],{"class":278},"\"\"\n",[109,159525,159526],{"class":111,"line":167},[109,159527,33532],{"class":126},[109,159529,159530],{"class":111,"line":185},[109,159531,803],{"class":126},[109,159533,159534],{"class":111,"line":201},[109,159535,159536],{"class":126},"{}\n",[109,159538,159539,159541],{"class":111,"line":206},[109,159540,156465],{"class":133},[109,159542,803],{"class":126},[19,159544,16308],{},[99,159546,159548],{"className":31553,"code":159547,"language":31555,"meta":104,"style":104},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[106,159549,159550,159564,159568,159575,159595,159601],{"__ignoreMap":104},[109,159551,159552,159554,159556,159558,159560,159562],{"class":111,"line":112},[109,159553,147711],{"class":126},[109,159555,130],{"class":122},[109,159557,61780],{"class":133},[109,159559,714],{"class":126},[109,159561,153554],{"class":278},[109,159563,1330],{"class":126},[109,159565,159566],{"class":111,"line":119},[109,159567,158],{"emptyLinePlaceholder":157},[109,159569,159570,159572],{"class":111,"line":140},[109,159571,2922],{"class":122},[109,159573,159574],{"class":126}," name:\n",[109,159576,159577,159579,159581,159583,159585,159587,159589,159591,159593],{"class":111,"line":154},[109,159578,32474],{"class":133},[109,159580,714],{"class":126},[109,159582,1595],{"class":122},[109,159584,158229],{"class":278},[109,159586,2427],{"class":133},[109,159588,80985],{"class":126},[109,159590,2476],{"class":133},[109,159592,1789],{"class":278},[109,159594,1330],{"class":126},[109,159596,159597,159599],{"class":111,"line":161},[109,159598,3077],{"class":122},[109,159600,5082],{"class":126},[109,159602,159603,159605,159607,159610],{"class":111,"line":167},[109,159604,32474],{"class":133},[109,159606,714],{"class":126},[109,159608,159609],{"class":278},"\"姓名不能为空\"",[109,159611,1330],{"class":126},[14,159613,159615],{"id":159614},"_39-match语句","3.9 match语句",[19,159617,159618,159619,159621],{},"Python 3.10 开始支持 ",[106,159620,72440],{},"。它适合处理固定选项。",[99,159623,159625],{"className":31553,"code":159624,"language":31555,"meta":104,"style":104},"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",[106,159626,159627,159643,159647,159654,159664,159675,159684,159695,159704,159715,159722],{"__ignoreMap":104},[109,159628,159629,159632,159634,159636,159638,159641],{"class":111,"line":112},[109,159630,159631],{"class":126},"command ",[109,159633,130],{"class":122},[109,159635,61780],{"class":133},[109,159637,714],{"class":126},[109,159639,159640],{"class":278},"\"请输入命令:\"",[109,159642,1330],{"class":126},[109,159644,159645],{"class":111,"line":119},[109,159646,158],{"emptyLinePlaceholder":157},[109,159648,159649,159651],{"class":111,"line":140},[109,159650,72440],{"class":122},[109,159652,159653],{"class":126}," command:\n",[109,159655,159656,159659,159662],{"class":111,"line":154},[109,159657,159658],{"class":122},"    case",[109,159660,159661],{"class":278}," \"start\"",[109,159663,5082],{"class":126},[109,159665,159666,159668,159670,159673],{"class":111,"line":161},[109,159667,33626],{"class":133},[109,159669,714],{"class":126},[109,159671,159672],{"class":278},"\"启动\"",[109,159674,1330],{"class":126},[109,159676,159677,159679,159682],{"class":111,"line":167},[109,159678,159658],{"class":122},[109,159680,159681],{"class":278}," \"stop\"",[109,159683,5082],{"class":126},[109,159685,159686,159688,159690,159693],{"class":111,"line":185},[109,159687,33626],{"class":133},[109,159689,714],{"class":126},[109,159691,159692],{"class":278},"\"停止\"",[109,159694,1330],{"class":126},[109,159696,159697,159699,159702],{"class":111,"line":201},[109,159698,159658],{"class":122},[109,159700,159701],{"class":278}," \"restart\"",[109,159703,5082],{"class":126},[109,159705,159706,159708,159710,159713],{"class":111,"line":206},[109,159707,33626],{"class":133},[109,159709,714],{"class":126},[109,159711,159712],{"class":278},"\"重启\"",[109,159714,1330],{"class":126},[109,159716,159717,159719],{"class":111,"line":218},[109,159718,159658],{"class":122},[109,159720,159721],{"class":126}," _:\n",[109,159723,159724,159726,159728,159731],{"class":111,"line":223},[109,159725,33626],{"class":133},[109,159727,714],{"class":126},[109,159729,159730],{"class":278},"\"未知命令\"",[109,159732,1330],{"class":126},[19,159734,159735,159736,159738,159739,159741],{},"入门阶段掌握 ",[106,159737,155833],{}," 更重要，",[106,159740,72440],{}," 可以作为补充。",[14,159743,159745],{"id":159744},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159747,124467],{},[765,159749,159750,159753,159756],{},[30,159751,159752],{},"输入成绩。",[30,159754,159755],{},"判断成绩是否合法。",[30,159757,159758],{},"输出等级。",[19,159760,11353],{},[99,159762,159764],{"className":31553,"code":159763,"language":31555,"meta":104,"style":104},"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",[106,159765,159766,159784,159788,159806,159817,159829,159840,159852,159863,159876,159887,159899,159910,159916],{"__ignoreMap":104},[109,159767,159768,159770,159772,159774,159776,159778,159780,159782],{"class":111,"line":112},[109,159769,156533],{"class":126},[109,159771,130],{"class":122},[109,159773,110972],{"class":133},[109,159775,714],{"class":126},[109,159777,54996],{"class":133},[109,159779,714],{"class":126},[109,159781,153584],{"class":278},[109,159783,31672],{"class":126},[109,159785,159786],{"class":111,"line":119},[109,159787,158],{"emptyLinePlaceholder":157},[109,159789,159790,159792,159794,159796,159798,159800,159802,159804],{"class":111,"line":140},[109,159791,2922],{"class":122},[109,159793,40105],{"class":122},[109,159795,734],{"class":133},[109,159797,159427],{"class":122},[109,159799,158958],{"class":126},[109,159801,2976],{"class":122},[109,159803,7085],{"class":133},[109,159805,5082],{"class":126},[109,159807,159808,159810,159812,159815],{"class":111,"line":154},[109,159809,32474],{"class":133},[109,159811,714],{"class":126},[109,159813,159814],{"class":278},"\"成绩不合法\"",[109,159816,1330],{"class":126},[109,159818,159819,159821,159823,159825,159827],{"class":111,"line":161},[109,159820,158981],{"class":122},[109,159822,158958],{"class":126},[109,159824,3086],{"class":122},[109,159826,158963],{"class":133},[109,159828,5082],{"class":126},[109,159830,159831,159833,159835,159838],{"class":111,"line":167},[109,159832,32474],{"class":133},[109,159834,714],{"class":126},[109,159836,159837],{"class":278},"\"等级:A\"",[109,159839,1330],{"class":126},[109,159841,159842,159844,159846,159848,159850],{"class":111,"line":185},[109,159843,158981],{"class":122},[109,159845,158958],{"class":126},[109,159847,3086],{"class":122},[109,159849,158988],{"class":133},[109,159851,5082],{"class":126},[109,159853,159854,159856,159858,159861],{"class":111,"line":201},[109,159855,32474],{"class":133},[109,159857,714],{"class":126},[109,159859,159860],{"class":278},"\"等级:B\"",[109,159862,1330],{"class":126},[109,159864,159865,159867,159869,159871,159874],{"class":111,"line":206},[109,159866,158981],{"class":122},[109,159868,158958],{"class":126},[109,159870,3086],{"class":122},[109,159872,159873],{"class":133}," 70",[109,159875,5082],{"class":126},[109,159877,159878,159880,159882,159885],{"class":111,"line":218},[109,159879,32474],{"class":133},[109,159881,714],{"class":126},[109,159883,159884],{"class":278},"\"等级:C\"",[109,159886,1330],{"class":126},[109,159888,159889,159891,159893,159895,159897],{"class":111,"line":223},[109,159890,158981],{"class":122},[109,159892,158958],{"class":126},[109,159894,3086],{"class":122},[109,159896,159012],{"class":133},[109,159898,5082],{"class":126},[109,159900,159901,159903,159905,159908],{"class":111,"line":229},[109,159902,32474],{"class":133},[109,159904,714],{"class":126},[109,159906,159907],{"class":278},"\"等级:D\"",[109,159909,1330],{"class":126},[109,159911,159912,159914],{"class":111,"line":244},[109,159913,3077],{"class":122},[109,159915,5082],{"class":126},[109,159917,159918,159920,159922,159925],{"class":111,"line":258},[109,159919,32474],{"class":133},[109,159921,714],{"class":126},[109,159923,159924],{"class":278},"\"等级:E\"",[109,159926,1330],{"class":126},[14,159928,159930],{"id":159929},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159932,124467],{},[765,159934,159935,159938,159941,159944],{},[30,159936,159937],{},"输入消费金额。",[30,159939,159940],{},"输入会员等级，普通、银卡、金卡。",[30,159942,159943],{},"普通不打折，银卡 9 折，金卡 8 折。",[30,159945,159946],{},"满 500 再减 50。",[19,159948,11353],{},[99,159950,159952],{"className":31553,"code":159951,"language":31555,"meta":104,"style":104},"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",[106,159953,159954,159974,159990,159994,160002,160006,160020,160030,160043,160052,160065,160073,160079,160090,160094,160108,160112,160126,160136,160140],{"__ignoreMap":104},[109,159955,159956,159959,159961,159963,159965,159967,159969,159972],{"class":111,"line":112},[109,159957,159958],{"class":126},"amount ",[109,159960,130],{"class":122},[109,159962,110972],{"class":133},[109,159964,714],{"class":126},[109,159966,54996],{"class":133},[109,159968,714],{"class":126},[109,159970,159971],{"class":278},"\"请输入消费金额:\"",[109,159973,31672],{"class":126},[109,159975,159976,159979,159981,159983,159985,159988],{"class":111,"line":119},[109,159977,159978],{"class":126},"level ",[109,159980,130],{"class":122},[109,159982,61780],{"class":133},[109,159984,714],{"class":126},[109,159986,159987],{"class":278},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[109,159989,1330],{"class":126},[109,159991,159992],{"class":111,"line":140},[109,159993,158],{"emptyLinePlaceholder":157},[109,159995,159996,159998,160000],{"class":111,"line":154},[109,159997,158411],{"class":126},[109,159999,130],{"class":122},[109,160001,56874],{"class":133},[109,160003,160004],{"class":111,"line":161},[109,160005,158],{"emptyLinePlaceholder":157},[109,160007,160008,160010,160013,160015,160018],{"class":111,"line":167},[109,160009,2922],{"class":122},[109,160011,160012],{"class":126}," level ",[109,160014,4296],{"class":122},[109,160016,160017],{"class":278}," \"银卡\"",[109,160019,5082],{"class":126},[109,160021,160022,160025,160027],{"class":111,"line":185},[109,160023,160024],{"class":126},"    discount ",[109,160026,130],{"class":122},[109,160028,160029],{"class":133}," 0.9\n",[109,160031,160032,160034,160036,160038,160041],{"class":111,"line":201},[109,160033,158981],{"class":122},[109,160035,160012],{"class":126},[109,160037,4296],{"class":122},[109,160039,160040],{"class":278}," \"金卡\"",[109,160042,5082],{"class":126},[109,160044,160045,160047,160049],{"class":111,"line":206},[109,160046,160024],{"class":126},[109,160048,130],{"class":122},[109,160050,160051],{"class":133}," 0.8\n",[109,160053,160054,160056,160058,160060,160063],{"class":111,"line":218},[109,160055,158981],{"class":122},[109,160057,160012],{"class":126},[109,160059,4296],{"class":122},[109,160061,160062],{"class":278}," \"普通\"",[109,160064,5082],{"class":126},[109,160066,160067,160069,160071],{"class":111,"line":223},[109,160068,160024],{"class":126},[109,160070,130],{"class":122},[109,160072,56874],{"class":133},[109,160074,160075,160077],{"class":111,"line":229},[109,160076,3077],{"class":122},[109,160078,5082],{"class":126},[109,160080,160081,160083,160085,160088],{"class":111,"line":244},[109,160082,32474],{"class":133},[109,160084,714],{"class":126},[109,160086,160087],{"class":278},"\"会员等级输入错误，按普通会员计算\"",[109,160089,1330],{"class":126},[109,160091,160092],{"class":111,"line":258},[109,160093,158],{"emptyLinePlaceholder":157},[109,160095,160096,160099,160101,160104,160106],{"class":111,"line":263},[109,160097,160098],{"class":126},"pay ",[109,160100,130],{"class":122},[109,160102,160103],{"class":126}," amount ",[109,160105,1988],{"class":122},[109,160107,158450],{"class":126},[109,160109,160110],{"class":111,"line":269},[109,160111,158],{"emptyLinePlaceholder":157},[109,160113,160114,160116,160119,160121,160124],{"class":111,"line":304},[109,160115,2922],{"class":122},[109,160117,160118],{"class":126}," pay ",[109,160120,3086],{"class":122},[109,160122,160123],{"class":133}," 500",[109,160125,5082],{"class":126},[109,160127,160128,160131,160133],{"class":111,"line":331},[109,160129,160130],{"class":126},"    pay ",[109,160132,151427],{"class":122},[109,160134,160135],{"class":133}," 50\n",[109,160137,160138],{"class":111,"line":336},[109,160139,158],{"emptyLinePlaceholder":157},[109,160141,160142,160144,160146,160148,160150,160152,160155,160157,160159,160161],{"class":111,"line":364},[109,160143,31590],{"class":133},[109,160145,714],{"class":126},[109,160147,1595],{"class":122},[109,160149,158531],{"class":278},[109,160151,2427],{"class":133},[109,160153,160154],{"class":126},"pay",[109,160156,158334],{"class":122},[109,160158,2476],{"class":133},[109,160160,158187],{"class":278},[109,160162,1330],{"class":126},[14,160164,160166],{"id":160165},"_312-易错点","3.12 易错点",[765,160168,160169,160172,160175,160178,160183],{},[30,160170,160171],{},"冒号不能漏。",[30,160173,160174],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[30,160176,160177],{},"多分支判断要注意顺序。",[30,160179,160180,160181,29560],{},"判断相等用 ",[106,160182,4296],{},[30,160184,160185],{},"字符串比较区分大小写：",[99,160187,160189],{"className":31553,"code":160188,"language":31555,"meta":104,"style":104},"\"Y\" == \"y\"  # False\n",[106,160190,160191],{"__ignoreMap":104},[109,160192,160193,160196,160198,160200],{"class":111,"line":112},[109,160194,160195],{"class":278},"\"Y\"",[109,160197,102734],{"class":122},[109,160199,159180],{"class":278},[109,160201,160202],{"class":115},"  # False\n",[19,160204,160205],{},"可转换后再判断：",[99,160207,160209],{"className":31553,"code":160208,"language":31555,"meta":104,"style":104},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[106,160210,160211,160228,160241],{"__ignoreMap":104},[109,160212,160213,160216,160218,160220,160222,160225],{"class":111,"line":112},[109,160214,160215],{"class":126},"answer ",[109,160217,130],{"class":122},[109,160219,61780],{"class":133},[109,160221,714],{"class":126},[109,160223,160224],{"class":278},"\"是否继续(y\u002Fn):\"",[109,160226,160227],{"class":126},").lower()\n",[109,160229,160230,160232,160235,160237,160239],{"class":111,"line":119},[109,160231,2922],{"class":122},[109,160233,160234],{"class":126}," answer ",[109,160236,4296],{"class":122},[109,160238,159180],{"class":278},[109,160240,5082],{"class":126},[109,160242,160243,160245,160247,160250],{"class":111,"line":140},[109,160244,32474],{"class":133},[109,160246,714],{"class":126},[109,160248,160249],{"class":278},"\"继续\"",[109,160251,1330],{"class":126},[14,160253,160255],{"id":160254},"_313-本章练习","3.13 本章练习",[765,160257,160258,160261,160264,160267,160277],{},[30,160259,160260],{},"输入年龄，判断是否成年。",[30,160262,160263],{},"输入年份，判断是否为闰年。",[30,160265,160266],{},"输入三个数字，输出最大值。",[30,160268,160269,160270,160273,160274,160276],{},"写登录判断：用户名是 ",[106,160271,160272],{},"admin"," 且密码是 ",[106,160275,16257],{}," 才登录成功。",[30,160278,160279],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1467,160281,160282],{},"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":104,"searchDepth":119,"depth":119,"links":160284},[160285,160286,160287,160288,160289,160290,160295,160296,160297,160298,160299,160300,160301],{"id":158673,"depth":119,"text":158674},{"id":158726,"depth":119,"text":158727},{"id":158830,"depth":119,"text":158831},{"id":158920,"depth":119,"text":158921},{"id":159110,"depth":119,"text":159111},{"id":159233,"depth":119,"text":159234,"children":160291},[160292,160293,160294],{"id":159237,"depth":140,"text":159238},{"id":159294,"depth":140,"text":159295},{"id":159351,"depth":140,"text":159352},{"id":159396,"depth":119,"text":159397},{"id":159487,"depth":119,"text":159488},{"id":159614,"depth":119,"text":159615},{"id":159744,"depth":119,"text":159745},{"id":159929,"depth":119,"text":159930},{"id":160165,"depth":119,"text":160166},{"id":160254,"depth":119,"text":160255},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158665,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160308,"title":160309,"body":160310,"description":24550,"extension":1476,"meta":162079,"navigation":157,"path":162080,"seo":162081,"stem":162082,"__hash__":162083},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160311,"toc":162059},[160312,160315,160319,160325,160328,160345,160349,160351,160368,160370,160415,160417,160434,160438,160441,160507,160510,160528,160532,160693,160702,160706,160710,160715,160762,160764,160770,160774,160779,160826,160828,160834,160838,160843,160879,160882,160929,160933,160939,160997,161002,161033,161038,161042,161097,161100,161172,161175,161234,161238,161241,161316,161319,161323,161429,161432,161458,161462,161474,161543,161546,161638,161642,161644,161655,161657,161787,161791,161993,162001,162005,162035,162039,162056],[10,160313,160309],{"id":160314},"_4-循环语句",[14,160316,160318],{"id":160317},"_41-为什么需要循环","4.1 为什么需要循环",[19,160320,160321,160322,160324],{},"如果要输出 1 到 100，不应该写 100 行 ",[106,160323,147647],{},"，而应该用循环。",[19,160326,160327],{},"循环适合处理重复任务：",[765,160329,160330,160333,160336,160339,160342],{},[30,160331,160332],{},"重复输出。",[30,160334,160335],{},"重复输入。",[30,160337,160338],{},"遍历数据。",[30,160340,160341],{},"持续执行菜单。",[30,160343,160344],{},"批量处理文件或数据。",[14,160346,160348],{"id":160347},"_42-while循环","4.2 while循环",[19,160350,6518],{},[99,160352,160354],{"className":31553,"code":160353,"language":31555,"meta":104,"style":104},"while 条件:\n    循环体\n",[106,160355,160356,160363],{"__ignoreMap":104},[109,160357,160358,160360],{"class":111,"line":112},[109,160359,109838],{"class":122},[109,160361,160362],{"class":126}," 条件:\n",[109,160364,160365],{"class":111,"line":119},[109,160366,160367],{"class":126},"    循环体\n",[19,160369,16308],{},[99,160371,160373],{"className":31553,"code":160372,"language":31555,"meta":104,"style":104},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[106,160374,160375,160383,160387,160399,160406],{"__ignoreMap":104},[109,160376,160377,160379,160381],{"class":111,"line":112},[109,160378,101323],{"class":126},[109,160380,130],{"class":122},[109,160382,56874],{"class":133},[109,160384,160385],{"class":111,"line":119},[109,160386,158],{"emptyLinePlaceholder":157},[109,160388,160389,160391,160393,160395,160397],{"class":111,"line":140},[109,160390,109838],{"class":122},[109,160392,10756],{"class":126},[109,160394,2976],{"class":122},[109,160396,3510],{"class":133},[109,160398,5082],{"class":126},[109,160400,160401,160403],{"class":111,"line":154},[109,160402,32474],{"class":133},[109,160404,160405],{"class":126},"(i)\n",[109,160407,160408,160411,160413],{"class":111,"line":161},[109,160409,160410],{"class":126},"    i ",[109,160412,10795],{"class":122},[109,160414,56874],{"class":133},[19,160416,82104],{},[765,160418,160419,160425,160428,160431],{},[30,160420,160421,160422,29560],{},"判断条件 ",[106,160423,160424],{},"i \u003C= 5",[30,160426,160427],{},"条件成立，执行循环体。",[30,160429,160430],{},"执行完后回到条件判断。",[30,160432,160433],{},"条件不成立，退出循环。",[14,160435,160437],{"id":160436},"_43-while累加","4.3 while累加",[19,160439,160440],{},"计算 1 到 100 的和：",[99,160442,160444],{"className":31553,"code":160443,"language":31555,"meta":104,"style":104},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[106,160445,160446,160454,160462,160466,160478,160488,160496,160500],{"__ignoreMap":104},[109,160447,160448,160450,160452],{"class":111,"line":112},[109,160449,101323],{"class":126},[109,160451,130],{"class":122},[109,160453,56874],{"class":133},[109,160455,160456,160458,160460],{"class":111,"line":119},[109,160457,158435],{"class":126},[109,160459,130],{"class":122},[109,160461,48508],{"class":133},[109,160463,160464],{"class":111,"line":140},[109,160465,158],{"emptyLinePlaceholder":157},[109,160467,160468,160470,160472,160474,160476],{"class":111,"line":154},[109,160469,109838],{"class":122},[109,160471,10756],{"class":126},[109,160473,2976],{"class":122},[109,160475,7085],{"class":133},[109,160477,5082],{"class":126},[109,160479,160480,160483,160485],{"class":111,"line":161},[109,160481,160482],{"class":126},"    total ",[109,160484,10795],{"class":122},[109,160486,160487],{"class":126}," i\n",[109,160489,160490,160492,160494],{"class":111,"line":167},[109,160491,160410],{"class":126},[109,160493,10795],{"class":122},[109,160495,56874],{"class":133},[109,160497,160498],{"class":111,"line":185},[109,160499,158],{"emptyLinePlaceholder":157},[109,160501,160502,160504],{"class":111,"line":201},[109,160503,31590],{"class":133},[109,160505,160506],{"class":126},"(total)\n",[19,160508,160509],{},"核心思想：",[765,160511,160512,160517,160522],{},[30,160513,160514,160516],{},[106,160515,1345],{}," 控制循环次数。",[30,160518,160519,160521],{},[106,160520,158536],{}," 保存累加结果。",[30,160523,160524,160525,160527],{},"每轮循环都要更新 ",[106,160526,1345],{},"，否则可能死循环。",[14,160529,160531],{"id":160530},"_44-while猜数字","4.4 while猜数字",[99,160533,160535],{"className":31553,"code":160534,"language":31555,"meta":104,"style":104},"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",[106,160536,160537,160543,160547,160564,160572,160576,160584,160604,160613,160617,160629,160640,160650,160661,160667,160689],{"__ignoreMap":104},[109,160538,160539,160541],{"class":111,"line":112},[109,160540,31567],{"class":122},[109,160542,46503],{"class":126},[109,160544,160545],{"class":111,"line":119},[109,160546,158],{"emptyLinePlaceholder":157},[109,160548,160549,160551,160553,160556,160558,160560,160562],{"class":111,"line":140},[109,160550,160215],{"class":126},[109,160552,130],{"class":122},[109,160554,160555],{"class":126}," random.randint(",[109,160557,1755],{"class":133},[109,160559,13608],{"class":126},[109,160561,1351],{"class":133},[109,160563,1330],{"class":126},[109,160565,160566,160568,160570],{"class":111,"line":154},[109,160567,147866],{"class":126},[109,160569,130],{"class":122},[109,160571,48508],{"class":133},[109,160573,160574],{"class":111,"line":161},[109,160575,158],{"emptyLinePlaceholder":157},[109,160577,160578,160580,160582],{"class":111,"line":167},[109,160579,109838],{"class":122},[109,160581,96467],{"class":133},[109,160583,5082],{"class":126},[109,160585,160586,160589,160591,160593,160595,160597,160599,160602],{"class":111,"line":185},[109,160587,160588],{"class":126},"    guess ",[109,160590,130],{"class":122},[109,160592,173],{"class":133},[109,160594,714],{"class":126},[109,160596,54996],{"class":133},[109,160598,714],{"class":126},[109,160600,160601],{"class":278},"\"请输入1到100之间的数字:\"",[109,160603,31672],{"class":126},[109,160605,160606,160609,160611],{"class":111,"line":201},[109,160607,160608],{"class":126},"    count ",[109,160610,10795],{"class":122},[109,160612,56874],{"class":133},[109,160614,160615],{"class":111,"line":206},[109,160616,158],{"emptyLinePlaceholder":157},[109,160618,160619,160621,160624,160626],{"class":111,"line":218},[109,160620,4446],{"class":122},[109,160622,160623],{"class":126}," guess ",[109,160625,2490],{"class":122},[109,160627,160628],{"class":126}," answer:\n",[109,160630,160631,160633,160635,160638],{"class":111,"line":223},[109,160632,33626],{"class":133},[109,160634,714],{"class":126},[109,160636,160637],{"class":278},"\"猜大了\"",[109,160639,1330],{"class":126},[109,160641,160642,160644,160646,160648],{"class":111,"line":229},[109,160643,40468],{"class":122},[109,160645,160623],{"class":126},[109,160647,1320],{"class":122},[109,160649,160628],{"class":126},[109,160651,160652,160654,160656,160659],{"class":111,"line":244},[109,160653,33626],{"class":133},[109,160655,714],{"class":126},[109,160657,160658],{"class":278},"\"猜小了\"",[109,160660,1330],{"class":126},[109,160662,160663,160665],{"class":111,"line":258},[109,160664,159197],{"class":122},[109,160666,5082],{"class":126},[109,160668,160669,160671,160673,160675,160678,160680,160682,160684,160687],{"class":111,"line":263},[109,160670,33626],{"class":133},[109,160672,714],{"class":126},[109,160674,1595],{"class":122},[109,160676,160677],{"class":278},"\"猜对了，一共猜了",[109,160679,2427],{"class":133},[109,160681,85609],{"class":126},[109,160683,2476],{"class":133},[109,160685,160686],{"class":278},"次\"",[109,160688,1330],{"class":126},[109,160690,160691],{"class":111,"line":269},[109,160692,32802],{"class":122},[19,160694,160695,160698,160699,160701],{},[106,160696,160697],{},"while True"," 表示无限循环，通常配合 ",[106,160700,3415],{}," 使用。",[14,160703,160705],{"id":160704},"_45-break和continue","4.5 break和continue",[51,160707,160709],{"id":160708},"_451-break","4.5.1 break",[19,160711,160712,160714],{},[106,160713,3415],{}," 直接结束整个循环。",[99,160716,160718],{"className":31553,"code":160717,"language":31555,"meta":104,"style":104},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[106,160719,160720,160740,160752,160756],{"__ignoreMap":104},[109,160721,160722,160724,160726,160728,160730,160732,160734,160736,160738],{"class":111,"line":112},[109,160723,4372],{"class":122},[109,160725,10756],{"class":126},[109,160727,27218],{"class":122},[109,160729,33618],{"class":133},[109,160731,714],{"class":126},[109,160733,1755],{"class":133},[109,160735,13608],{"class":126},[109,160737,1881],{"class":133},[109,160739,31961],{"class":126},[109,160741,160742,160744,160746,160748,160750],{"class":111,"line":119},[109,160743,4446],{"class":122},[109,160745,10756],{"class":126},[109,160747,4296],{"class":122},[109,160749,79245],{"class":133},[109,160751,5082],{"class":126},[109,160753,160754],{"class":111,"line":140},[109,160755,32802],{"class":122},[109,160757,160758,160760],{"class":111,"line":154},[109,160759,32474],{"class":133},[109,160761,160405],{"class":126},[19,160763,147632],{},[99,160765,160768],{"className":160766,"code":160767,"language":6524,"meta":104},[6522],"1\n2\n",[106,160769,160767],{"__ignoreMap":104},[51,160771,160773],{"id":160772},"_452-continue","4.5.2 continue",[19,160775,160776,160778],{},[106,160777,155847],{}," 跳过本轮剩余代码，进入下一轮循环。",[99,160780,160782],{"className":31553,"code":160781,"language":31555,"meta":104,"style":104},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[106,160783,160784,160804,160816,160820],{"__ignoreMap":104},[109,160785,160786,160788,160790,160792,160794,160796,160798,160800,160802],{"class":111,"line":112},[109,160787,4372],{"class":122},[109,160789,10756],{"class":126},[109,160791,27218],{"class":122},[109,160793,33618],{"class":133},[109,160795,714],{"class":126},[109,160797,1755],{"class":133},[109,160799,13608],{"class":126},[109,160801,1881],{"class":133},[109,160803,31961],{"class":126},[109,160805,160806,160808,160810,160812,160814],{"class":111,"line":119},[109,160807,4446],{"class":122},[109,160809,10756],{"class":126},[109,160811,4296],{"class":122},[109,160813,79245],{"class":133},[109,160815,5082],{"class":126},[109,160817,160818],{"class":111,"line":140},[109,160819,149687],{"class":122},[109,160821,160822,160824],{"class":111,"line":154},[109,160823,32474],{"class":133},[109,160825,160405],{"class":126},[19,160827,147632],{},[99,160829,160832],{"className":160830,"code":160831,"language":6524,"meta":104},[6522],"1\n2\n4\n5\n",[106,160833,160831],{"__ignoreMap":104},[14,160835,160837],{"id":160836},"_46-for循环","4.6 for循环",[19,160839,160840,160842],{},[106,160841,4372],{}," 常用于遍历序列。",[99,160844,160846],{"className":31553,"code":160845,"language":31555,"meta":104,"style":104},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[106,160847,160848,160857,160861,160872],{"__ignoreMap":104},[109,160849,160850,160852,160854],{"class":111,"line":112},[109,160851,147711],{"class":126},[109,160853,130],{"class":122},[109,160855,160856],{"class":278}," \"python\"\n",[109,160858,160859],{"class":111,"line":119},[109,160860,158],{"emptyLinePlaceholder":157},[109,160862,160863,160865,160868,160870],{"class":111,"line":140},[109,160864,4372],{"class":122},[109,160866,160867],{"class":126}," ch ",[109,160869,27218],{"class":122},[109,160871,159574],{"class":126},[109,160873,160874,160876],{"class":111,"line":154},[109,160875,32474],{"class":133},[109,160877,160878],{"class":126},"(ch)\n",[19,160880,160881],{},"遍历列表：",[99,160883,160885],{"className":31553,"code":160884,"language":31555,"meta":104,"style":104},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[106,160886,160887,160909,160913,160923],{"__ignoreMap":104},[109,160888,160889,160892,160894,160896,160898,160900,160902,160904,160907],{"class":111,"line":112},[109,160890,160891],{"class":126},"students ",[109,160893,130],{"class":122},[109,160895,53401],{"class":126},[109,160897,151063],{"class":278},[109,160899,13608],{"class":126},[109,160901,152111],{"class":278},[109,160903,13608],{"class":126},[109,160905,160906],{"class":278},"\"小刚\"",[109,160908,34421],{"class":126},[109,160910,160911],{"class":111,"line":119},[109,160912,158],{"emptyLinePlaceholder":157},[109,160914,160915,160917,160919,160921],{"class":111,"line":140},[109,160916,4372],{"class":122},[109,160918,153312],{"class":126},[109,160920,27218],{"class":122},[109,160922,153317],{"class":126},[109,160924,160925,160927],{"class":111,"line":154},[109,160926,32474],{"class":133},[109,160928,151217],{"class":126},[14,160930,160932],{"id":160931},"_47-range函数","4.7 range函数",[19,160934,160935,160938],{},[106,160936,160937],{},"range()"," 用于生成整数序列。",[99,160940,160942],{"className":31553,"code":160941,"language":31555,"meta":104,"style":104},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[106,160943,160944,160958,160976],{"__ignoreMap":104},[109,160945,160946,160948,160950,160952,160955],{"class":111,"line":112},[109,160947,34591],{"class":133},[109,160949,714],{"class":126},[109,160951,1856],{"class":133},[109,160953,160954],{"class":126},")          ",[109,160956,160957],{"class":115},"# 0,1,2,3,4\n",[109,160959,160960,160962,160964,160966,160968,160970,160973],{"class":111,"line":119},[109,160961,34591],{"class":133},[109,160963,714],{"class":126},[109,160965,1755],{"class":133},[109,160967,13608],{"class":126},[109,160969,1856],{"class":133},[109,160971,160972],{"class":126},")       ",[109,160974,160975],{"class":115},"# 1,2,3,4\n",[109,160977,160978,160980,160982,160984,160986,160988,160990,160992,160994],{"class":111,"line":140},[109,160979,34591],{"class":133},[109,160981,714],{"class":126},[109,160983,1755],{"class":133},[109,160985,13608],{"class":126},[109,160987,1008],{"class":133},[109,160989,13608],{"class":126},[109,160991,1618],{"class":133},[109,160993,156836],{"class":126},[109,160995,160996],{"class":115},"# 1,3,5,7,9\n",[19,160998,160999,161000,25793],{},"配合 ",[106,161001,4372],{},[99,161003,161005],{"className":31553,"code":161004,"language":31555,"meta":104,"style":104},"for i in range(1, 6):\n    print(i)\n",[106,161006,161007,161027],{"__ignoreMap":104},[109,161008,161009,161011,161013,161015,161017,161019,161021,161023,161025],{"class":111,"line":112},[109,161010,4372],{"class":122},[109,161012,10756],{"class":126},[109,161014,27218],{"class":122},[109,161016,33618],{"class":133},[109,161018,714],{"class":126},[109,161020,1755],{"class":133},[109,161022,13608],{"class":126},[109,161024,1881],{"class":133},[109,161026,31961],{"class":126},[109,161028,161029,161031],{"class":111,"line":119},[109,161030,32474],{"class":133},[109,161032,160405],{"class":126},[19,161034,10343,161035,161037],{},[106,161036,34591],{}," 的结束值不包含在内。",[14,161039,161041],{"id":161040},"_48-for循环求和","4.8 for循环求和",[99,161043,161045],{"className":31553,"code":161044,"language":31555,"meta":104,"style":104},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[106,161046,161047,161055,161059,161079,161087,161091],{"__ignoreMap":104},[109,161048,161049,161051,161053],{"class":111,"line":112},[109,161050,158435],{"class":126},[109,161052,130],{"class":122},[109,161054,48508],{"class":133},[109,161056,161057],{"class":111,"line":119},[109,161058,158],{"emptyLinePlaceholder":157},[109,161060,161061,161063,161065,161067,161069,161071,161073,161075,161077],{"class":111,"line":140},[109,161062,4372],{"class":122},[109,161064,10756],{"class":126},[109,161066,27218],{"class":122},[109,161068,33618],{"class":133},[109,161070,714],{"class":126},[109,161072,1755],{"class":133},[109,161074,13608],{"class":126},[109,161076,1874],{"class":133},[109,161078,31961],{"class":126},[109,161080,161081,161083,161085],{"class":111,"line":154},[109,161082,160482],{"class":126},[109,161084,10795],{"class":122},[109,161086,160487],{"class":126},[109,161088,161089],{"class":111,"line":161},[109,161090,158],{"emptyLinePlaceholder":157},[109,161092,161093,161095],{"class":111,"line":167},[109,161094,31590],{"class":133},[109,161096,160506],{"class":126},[19,161098,161099],{},"求偶数和：",[99,161101,161103],{"className":31553,"code":161102,"language":31555,"meta":104,"style":104},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[106,161104,161105,161113,161117,161137,161153,161162,161166],{"__ignoreMap":104},[109,161106,161107,161109,161111],{"class":111,"line":112},[109,161108,158435],{"class":126},[109,161110,130],{"class":122},[109,161112,48508],{"class":133},[109,161114,161115],{"class":111,"line":119},[109,161116,158],{"emptyLinePlaceholder":157},[109,161118,161119,161121,161123,161125,161127,161129,161131,161133,161135],{"class":111,"line":140},[109,161120,4372],{"class":122},[109,161122,10756],{"class":126},[109,161124,27218],{"class":122},[109,161126,33618],{"class":133},[109,161128,714],{"class":126},[109,161130,1755],{"class":133},[109,161132,13608],{"class":126},[109,161134,1874],{"class":133},[109,161136,31961],{"class":126},[109,161138,161139,161141,161143,161145,161147,161149,161151],{"class":111,"line":154},[109,161140,4446],{"class":122},[109,161142,10756],{"class":126},[109,161144,1865],{"class":122},[109,161146,15928],{"class":133},[109,161148,102734],{"class":122},[109,161150,734],{"class":133},[109,161152,5082],{"class":126},[109,161154,161155,161158,161160],{"class":111,"line":161},[109,161156,161157],{"class":126},"        total ",[109,161159,10795],{"class":122},[109,161161,160487],{"class":126},[109,161163,161164],{"class":111,"line":167},[109,161165,158],{"emptyLinePlaceholder":157},[109,161167,161168,161170],{"class":111,"line":185},[109,161169,31590],{"class":133},[109,161171,160506],{"class":126},[19,161173,161174],{},"也可以：",[99,161176,161178],{"className":31553,"code":161177,"language":31555,"meta":104,"style":104},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[106,161179,161180,161188,161192,161216,161224,161228],{"__ignoreMap":104},[109,161181,161182,161184,161186],{"class":111,"line":112},[109,161183,158435],{"class":126},[109,161185,130],{"class":122},[109,161187,48508],{"class":133},[109,161189,161190],{"class":111,"line":119},[109,161191,158],{"emptyLinePlaceholder":157},[109,161193,161194,161196,161198,161200,161202,161204,161206,161208,161210,161212,161214],{"class":111,"line":140},[109,161195,4372],{"class":122},[109,161197,10756],{"class":126},[109,161199,27218],{"class":122},[109,161201,33618],{"class":133},[109,161203,714],{"class":126},[109,161205,1618],{"class":133},[109,161207,13608],{"class":126},[109,161209,1874],{"class":133},[109,161211,13608],{"class":126},[109,161213,1618],{"class":133},[109,161215,31961],{"class":126},[109,161217,161218,161220,161222],{"class":111,"line":154},[109,161219,160482],{"class":126},[109,161221,10795],{"class":122},[109,161223,160487],{"class":126},[109,161225,161226],{"class":111,"line":161},[109,161227,158],{"emptyLinePlaceholder":157},[109,161229,161230,161232],{"class":111,"line":167},[109,161231,31590],{"class":133},[109,161233,160506],{"class":126},[14,161235,161237],{"id":161236},"_49-循环嵌套","4.9 循环嵌套",[19,161239,161240],{},"嵌套循环就是循环里面再写循环。",[99,161242,161244],{"className":31553,"code":161243,"language":31555,"meta":104,"style":104},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[106,161245,161246,161266,161286],{"__ignoreMap":104},[109,161247,161248,161250,161252,161254,161256,161258,161260,161262,161264],{"class":111,"line":112},[109,161249,4372],{"class":122},[109,161251,10756],{"class":126},[109,161253,27218],{"class":122},[109,161255,33618],{"class":133},[109,161257,714],{"class":126},[109,161259,1755],{"class":133},[109,161261,13608],{"class":126},[109,161263,1831],{"class":133},[109,161265,31961],{"class":126},[109,161267,161268,161270,161272,161274,161276,161278,161280,161282,161284],{"class":111,"line":119},[109,161269,1302],{"class":122},[109,161271,10818],{"class":126},[109,161273,27218],{"class":122},[109,161275,33618],{"class":133},[109,161277,714],{"class":126},[109,161279,1755],{"class":133},[109,161281,13608],{"class":126},[109,161283,1831],{"class":133},[109,161285,31961],{"class":126},[109,161287,161288,161290,161292,161294,161297,161299,161301,161303,161306,161308,161310,161312,161314],{"class":111,"line":140},[109,161289,33626],{"class":133},[109,161291,714],{"class":126},[109,161293,1595],{"class":122},[109,161295,161296],{"class":278},"\"i=",[109,161298,2427],{"class":133},[109,161300,1345],{"class":126},[109,161302,2476],{"class":133},[109,161304,161305],{"class":278},", j=",[109,161307,2427],{"class":133},[109,161309,2000],{"class":126},[109,161311,2476],{"class":133},[109,161313,1789],{"class":278},[109,161315,1330],{"class":126},[19,161317,161318],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161320,161322],{"id":161321},"_410-九九乘法表","4.10 九九乘法表",[99,161324,161326],{"className":31553,"code":161325,"language":31555,"meta":104,"style":104},"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",[106,161327,161328,161348,161371,161423],{"__ignoreMap":104},[109,161329,161330,161332,161334,161336,161338,161340,161342,161344,161346],{"class":111,"line":112},[109,161331,4372],{"class":122},[109,161333,10756],{"class":126},[109,161335,27218],{"class":122},[109,161337,33618],{"class":133},[109,161339,714],{"class":126},[109,161341,1755],{"class":133},[109,161343,13608],{"class":126},[109,161345,1008],{"class":133},[109,161347,31961],{"class":126},[109,161349,161350,161352,161354,161356,161358,161360,161362,161365,161367,161369],{"class":111,"line":119},[109,161351,1302],{"class":122},[109,161353,10818],{"class":126},[109,161355,27218],{"class":122},[109,161357,33618],{"class":133},[109,161359,714],{"class":126},[109,161361,1755],{"class":133},[109,161363,161364],{"class":126},", i ",[109,161366,1348],{"class":122},[109,161368,26293],{"class":133},[109,161370,31961],{"class":126},[109,161372,161373,161375,161377,161379,161381,161383,161385,161387,161389,161391,161393,161395,161397,161399,161401,161403,161405,161407,161409,161411,161413,161415,161417,161419,161421],{"class":111,"line":140},[109,161374,33626],{"class":133},[109,161376,714],{"class":126},[109,161378,1595],{"class":122},[109,161380,1789],{"class":278},[109,161382,2427],{"class":133},[109,161384,2000],{"class":126},[109,161386,2476],{"class":133},[109,161388,1988],{"class":278},[109,161390,2427],{"class":133},[109,161392,1345],{"class":126},[109,161394,2476],{"class":133},[109,161396,130],{"class":278},[109,161398,2427],{"class":133},[109,161400,101323],{"class":126},[109,161402,1988],{"class":122},[109,161404,4754],{"class":126},[109,161406,2476],{"class":133},[109,161408,1789],{"class":278},[109,161410,13608],{"class":126},[109,161412,46976],{"class":6553},[109,161414,130],{"class":122},[109,161416,1789],{"class":278},[109,161418,2627],{"class":133},[109,161420,1789],{"class":278},[109,161422,1330],{"class":126},[109,161424,161425,161427],{"class":111,"line":154},[109,161426,32474],{"class":133},[109,161428,803],{"class":126},[19,161430,161431],{},"关键点：",[765,161433,161434,161440,161446,161452],{},[30,161435,161436,161437,161439],{},"外层 ",[106,161438,1345],{}," 控制行。",[30,161441,161442,161443,161445],{},"内层 ",[106,161444,2000],{}," 控制列。",[30,161447,161448,161449,161451],{},"每行结束后用 ",[106,161450,147647],{}," 换行。",[30,161453,161454,161457],{},[106,161455,161456],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161459,161461],{"id":161460},"_411-循环else","4.11 循环else",[19,161463,161464,161465,161467,161468,161470,161471,161473],{},"Python 的循环可以带 ",[106,161466,3077],{},"。当循环正常结束时执行 ",[106,161469,3077],{},"，如果被 ",[106,161472,3415],{}," 打断，则不执行。",[99,161475,161477],{"className":31553,"code":161476,"language":31555,"meta":104,"style":104},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[106,161478,161479,161499,161511,161522,161526,161532],{"__ignoreMap":104},[109,161480,161481,161483,161485,161487,161489,161491,161493,161495,161497],{"class":111,"line":112},[109,161482,4372],{"class":122},[109,161484,10756],{"class":126},[109,161486,27218],{"class":122},[109,161488,33618],{"class":133},[109,161490,714],{"class":126},[109,161492,1755],{"class":133},[109,161494,13608],{"class":126},[109,161496,1881],{"class":133},[109,161498,31961],{"class":126},[109,161500,161501,161503,161505,161507,161509],{"class":111,"line":119},[109,161502,4446],{"class":122},[109,161504,10756],{"class":126},[109,161506,4296],{"class":122},[109,161508,134],{"class":133},[109,161510,5082],{"class":126},[109,161512,161513,161515,161517,161520],{"class":111,"line":140},[109,161514,33626],{"class":133},[109,161516,714],{"class":126},[109,161518,161519],{"class":278},"\"找到了\"",[109,161521,1330],{"class":126},[109,161523,161524],{"class":111,"line":154},[109,161525,32802],{"class":122},[109,161527,161528,161530],{"class":111,"line":161},[109,161529,3077],{"class":122},[109,161531,5082],{"class":126},[109,161533,161534,161536,161538,161541],{"class":111,"line":167},[109,161535,32474],{"class":133},[109,161537,714],{"class":126},[109,161539,161540],{"class":278},"\"没找到\"",[109,161542,1330],{"class":126},[19,161544,161545],{},"常用于搜索。",[99,161547,161549],{"className":31553,"code":161548,"language":31555,"meta":104,"style":104},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[106,161550,161551,161572,161581,161585,161597,161608,161618,161622,161628],{"__ignoreMap":104},[109,161552,161553,161556,161558,161560,161562,161564,161566,161568,161570],{"class":111,"line":112},[109,161554,161555],{"class":126},"names ",[109,161557,130],{"class":122},[109,161559,53401],{"class":126},[109,161561,151063],{"class":278},[109,161563,13608],{"class":126},[109,161565,152111],{"class":278},[109,161567,13608],{"class":126},[109,161569,160906],{"class":278},[109,161571,34421],{"class":126},[109,161573,161574,161576,161578],{"class":111,"line":119},[109,161575,112753],{"class":126},[109,161577,130],{"class":122},[109,161579,161580],{"class":278}," \"小李\"\n",[109,161582,161583],{"class":111,"line":140},[109,161584,158],{"emptyLinePlaceholder":157},[109,161586,161587,161589,161592,161594],{"class":111,"line":154},[109,161588,4372],{"class":122},[109,161590,161591],{"class":126}," name ",[109,161593,27218],{"class":122},[109,161595,161596],{"class":126}," names:\n",[109,161598,161599,161601,161603,161605],{"class":111,"line":161},[109,161600,4446],{"class":122},[109,161602,161591],{"class":126},[109,161604,4296],{"class":122},[109,161606,161607],{"class":126}," target:\n",[109,161609,161610,161612,161614,161616],{"class":111,"line":167},[109,161611,33626],{"class":133},[109,161613,714],{"class":126},[109,161615,161519],{"class":278},[109,161617,1330],{"class":126},[109,161619,161620],{"class":111,"line":185},[109,161621,32802],{"class":122},[109,161623,161624,161626],{"class":111,"line":201},[109,161625,3077],{"class":122},[109,161627,5082],{"class":126},[109,161629,161630,161632,161634,161636],{"class":111,"line":206},[109,161631,32474],{"class":133},[109,161633,714],{"class":126},[109,161635,161540],{"class":278},[109,161637,1330],{"class":126},[14,161639,161641],{"id":161640},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161643,124467],{},[765,161645,161646,161649,161652],{},[30,161647,161648],{},"用户最多输入 3 次密码。",[30,161650,161651],{},"密码正确则登录成功。",[30,161653,161654],{},"3 次都错误则锁定账号。",[19,161656,11353],{},[99,161658,161660],{"className":31553,"code":161659,"language":31555,"meta":104,"style":104},"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",[106,161661,161662,161672,161676,161692,161708,161712,161724,161735,161739,161745,161770,161776],{"__ignoreMap":104},[109,161663,161664,161667,161669],{"class":111,"line":112},[109,161665,161666],{"class":126},"password ",[109,161668,130],{"class":122},[109,161670,161671],{"class":278}," \"123456\"\n",[109,161673,161674],{"class":111,"line":119},[109,161675,158],{"emptyLinePlaceholder":157},[109,161677,161678,161680,161682,161684,161686,161688,161690],{"class":111,"line":140},[109,161679,4372],{"class":122},[109,161681,10756],{"class":126},[109,161683,27218],{"class":122},[109,161685,33618],{"class":133},[109,161687,714],{"class":126},[109,161689,1612],{"class":133},[109,161691,31961],{"class":126},[109,161693,161694,161697,161699,161701,161703,161706],{"class":111,"line":154},[109,161695,161696],{"class":126},"    user_password ",[109,161698,130],{"class":122},[109,161700,61780],{"class":133},[109,161702,714],{"class":126},[109,161704,161705],{"class":278},"\"请输入密码:\"",[109,161707,1330],{"class":126},[109,161709,161710],{"class":111,"line":161},[109,161711,158],{"emptyLinePlaceholder":157},[109,161713,161714,161716,161719,161721],{"class":111,"line":167},[109,161715,4446],{"class":122},[109,161717,161718],{"class":126}," user_password ",[109,161720,4296],{"class":122},[109,161722,161723],{"class":126}," password:\n",[109,161725,161726,161728,161730,161733],{"class":111,"line":185},[109,161727,33626],{"class":133},[109,161729,714],{"class":126},[109,161731,161732],{"class":278},"\"登录成功\"",[109,161734,1330],{"class":126},[109,161736,161737],{"class":111,"line":201},[109,161738,32802],{"class":122},[109,161740,161741,161743],{"class":111,"line":206},[109,161742,159197],{"class":122},[109,161744,5082],{"class":126},[109,161746,161747,161749,161751,161753,161756,161759,161761,161763,161765,161768],{"class":111,"line":218},[109,161748,33626],{"class":133},[109,161750,714],{"class":126},[109,161752,1595],{"class":122},[109,161754,161755],{"class":278},"\"密码错误，还剩",[109,161757,161758],{"class":133},"{2",[109,161760,53446],{"class":122},[109,161762,1309],{"class":126},[109,161764,2476],{"class":133},[109,161766,161767],{"class":278},"次机会\"",[109,161769,1330],{"class":126},[109,161771,161772,161774],{"class":111,"line":223},[109,161773,3077],{"class":122},[109,161775,5082],{"class":126},[109,161777,161778,161780,161782,161785],{"class":111,"line":229},[109,161779,32474],{"class":133},[109,161781,714],{"class":126},[109,161783,161784],{"class":278},"\"账号已锁定\"",[109,161786,1330],{"class":126},[14,161788,161790],{"id":161789},"_413-小案例菜单程序","4.13 小案例：菜单程序",[99,161792,161794],{"className":31553,"code":161793,"language":31555,"meta":104,"style":104},"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",[106,161795,161796,161804,161815,161826,161837,161848,161859,161863,161878,161882,161894,161905,161917,161928,161940,161951,161963,161973,161977,161983],{"__ignoreMap":104},[109,161797,161798,161800,161802],{"class":111,"line":112},[109,161799,109838],{"class":122},[109,161801,96467],{"class":133},[109,161803,5082],{"class":126},[109,161805,161806,161808,161810,161813],{"class":111,"line":119},[109,161807,32474],{"class":133},[109,161809,714],{"class":126},[109,161811,161812],{"class":278},"\"====== 菜单 ======\"",[109,161814,1330],{"class":126},[109,161816,161817,161819,161821,161824],{"class":111,"line":140},[109,161818,32474],{"class":133},[109,161820,714],{"class":126},[109,161822,161823],{"class":278},"\"1. 查询余额\"",[109,161825,1330],{"class":126},[109,161827,161828,161830,161832,161835],{"class":111,"line":154},[109,161829,32474],{"class":133},[109,161831,714],{"class":126},[109,161833,161834],{"class":278},"\"2. 存款\"",[109,161836,1330],{"class":126},[109,161838,161839,161841,161843,161846],{"class":111,"line":161},[109,161840,32474],{"class":133},[109,161842,714],{"class":126},[109,161844,161845],{"class":278},"\"3. 取款\"",[109,161847,1330],{"class":126},[109,161849,161850,161852,161854,161857],{"class":111,"line":167},[109,161851,32474],{"class":133},[109,161853,714],{"class":126},[109,161855,161856],{"class":278},"\"0. 退出\"",[109,161858,1330],{"class":126},[109,161860,161861],{"class":111,"line":185},[109,161862,158],{"emptyLinePlaceholder":157},[109,161864,161865,161868,161870,161872,161874,161876],{"class":111,"line":201},[109,161866,161867],{"class":126},"    choice ",[109,161869,130],{"class":122},[109,161871,61780],{"class":133},[109,161873,714],{"class":126},[109,161875,154248],{"class":278},[109,161877,1330],{"class":126},[109,161879,161880],{"class":111,"line":206},[109,161881,158],{"emptyLinePlaceholder":157},[109,161883,161884,161886,161888,161890,161892],{"class":111,"line":218},[109,161885,4446],{"class":122},[109,161887,154261],{"class":126},[109,161889,4296],{"class":122},[109,161891,154266],{"class":278},[109,161893,5082],{"class":126},[109,161895,161896,161898,161900,161903],{"class":111,"line":223},[109,161897,33626],{"class":133},[109,161899,714],{"class":126},[109,161901,161902],{"class":278},"\"余额为1000元\"",[109,161904,1330],{"class":126},[109,161906,161907,161909,161911,161913,161915],{"class":111,"line":229},[109,161908,40468],{"class":122},[109,161910,154261],{"class":126},[109,161912,4296],{"class":122},[109,161914,154285],{"class":278},[109,161916,5082],{"class":126},[109,161918,161919,161921,161923,161926],{"class":111,"line":244},[109,161920,33626],{"class":133},[109,161922,714],{"class":126},[109,161924,161925],{"class":278},"\"存款功能\"",[109,161927,1330],{"class":126},[109,161929,161930,161932,161934,161936,161938],{"class":111,"line":258},[109,161931,40468],{"class":122},[109,161933,154261],{"class":126},[109,161935,4296],{"class":122},[109,161937,154303],{"class":278},[109,161939,5082],{"class":126},[109,161941,161942,161944,161946,161949],{"class":111,"line":263},[109,161943,33626],{"class":133},[109,161945,714],{"class":126},[109,161947,161948],{"class":278},"\"取款功能\"",[109,161950,1330],{"class":126},[109,161952,161953,161955,161957,161959,161961],{"class":111,"line":269},[109,161954,40468],{"class":122},[109,161956,154261],{"class":126},[109,161958,4296],{"class":122},[109,161960,154357],{"class":278},[109,161962,5082],{"class":126},[109,161964,161965,161967,161969,161971],{"class":111,"line":304},[109,161966,33626],{"class":133},[109,161968,714],{"class":126},[109,161970,154368],{"class":278},[109,161972,1330],{"class":126},[109,161974,161975],{"class":111,"line":331},[109,161976,32802],{"class":122},[109,161978,161979,161981],{"class":111,"line":336},[109,161980,159197],{"class":122},[109,161982,5082],{"class":126},[109,161984,161985,161987,161989,161991],{"class":111,"line":364},[109,161986,33626],{"class":133},[109,161988,714],{"class":126},[109,161990,154389],{"class":278},[109,161992,1330],{"class":126},[19,161994,161995,161996,161998,161999,29560],{},"菜单类程序通常使用 ",[106,161997,160697],{},"，用户选择退出时 ",[106,162000,3415],{},[14,162002,162004],{"id":162003},"_414-易错点","4.14 易错点",[765,162006,162007,162012,162018,162026,162032],{},[30,162008,162009,162011],{},[106,162010,109838],{}," 循环必须更新控制变量。",[30,162013,162014,162017],{},[106,162015,162016],{},"range(1, 10)"," 不包含 10。",[30,162019,162020,162022,162023,162025],{},[106,162021,3415],{}," 结束整个循环，",[106,162024,155847],{}," 只跳过本轮。",[30,162027,162028,162029,162031],{},"嵌套循环中，",[106,162030,3415],{}," 只跳出当前所在的一层循环。",[30,162033,162034],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162036,162038],{"id":162037},"_415-本章练习","4.15 本章练习",[765,162040,162041,162044,162047,162050,162053],{},[30,162042,162043],{},"输出 1 到 100。",[30,162045,162046],{},"计算 1 到 100 的偶数和。",[30,162048,162049],{},"输出 100 以内能被 3 和 5 同时整除的数。",[30,162051,162052],{},"编写猜数字游戏，限制最多猜 7 次。",[30,162054,162055],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1467,162057,162058],{},"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":104,"searchDepth":119,"depth":119,"links":162060},[162061,162062,162063,162064,162065,162069,162070,162071,162072,162073,162074,162075,162076,162077,162078],{"id":160317,"depth":119,"text":160318},{"id":160347,"depth":119,"text":160348},{"id":160436,"depth":119,"text":160437},{"id":160530,"depth":119,"text":160531},{"id":160704,"depth":119,"text":160705,"children":162066},[162067,162068],{"id":160708,"depth":140,"text":160709},{"id":160772,"depth":140,"text":160773},{"id":160836,"depth":119,"text":160837},{"id":160931,"depth":119,"text":160932},{"id":161040,"depth":119,"text":161041},{"id":161236,"depth":119,"text":161237},{"id":161321,"depth":119,"text":161322},{"id":161460,"depth":119,"text":161461},{"id":161640,"depth":119,"text":161641},{"id":161789,"depth":119,"text":161790},{"id":162003,"depth":119,"text":162004},{"id":162037,"depth":119,"text":162038},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160309,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162085,"title":162086,"body":162087,"description":24550,"extension":1476,"meta":164092,"navigation":157,"path":164093,"seo":164094,"stem":164095,"__hash__":164096},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162088,"toc":164072},[162089,162092,162096,162099,162102,162116,162119,162133,162137,162139,162158,162160,162207,162209,162223,162227,162301,162304,162308,162311,162370,162378,162381,162434,162437,162441,162446,162501,162509,162559,162563,162568,162576,162675,162681,162685,162690,162693,162704,162745,162758,162762,162765,162801,162804,162817,162820,162880,162884,162888,162891,162942,162946,162949,162996,163002,163068,163071,163075,163078,163194,163197,163201,163204,163310,163314,163317,163355,163358,163400,163403,163463,163466,163470,163934,163937,163941,163968,163974,164035,164039,164069],[10,162090,162086],{"id":162091},"_5-函数基础",[14,162093,162095],{"id":162094},"_51-为什么需要函数","5.1 为什么需要函数",[19,162097,162098],{},"函数用于封装一段可以重复使用的代码。",[19,162100,162101],{},"不使用函数的问题：",[765,162103,162104,162107,162110,162113],{},[30,162105,162106],{},"重复代码多。",[30,162108,162109],{},"修改逻辑时容易漏改。",[30,162111,162112],{},"主流程不清晰。",[30,162114,162115],{},"程序越写越长，难以维护。",[19,162117,162118],{},"使用函数后的好处：",[765,162120,162121,162124,162127,162130],{},[30,162122,162123],{},"提高复用性。",[30,162125,162126],{},"提高可读性。",[30,162128,162129],{},"便于调试。",[30,162131,162132],{},"便于分工。",[14,162134,162136],{"id":162135},"_52-函数定义","5.2 函数定义",[19,162138,6518],{},[99,162140,162142],{"className":31553,"code":162141,"language":31555,"meta":104,"style":104},"def 函数名():\n    函数体\n",[106,162143,162144,162153],{"__ignoreMap":104},[109,162145,162146,162148,162151],{"class":111,"line":112},[109,162147,33122],{"class":122},[109,162149,162150],{"class":211}," 函数名",[109,162152,33128],{"class":126},[109,162154,162155],{"class":111,"line":119},[109,162156,162157],{"class":126},"    函数体\n",[19,162159,16308],{},[99,162161,162163],{"className":31553,"code":162162,"language":31555,"meta":104,"style":104},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[106,162164,162165,162174,162184,162194,162198,162202],{"__ignoreMap":104},[109,162166,162167,162169,162172],{"class":111,"line":112},[109,162168,33122],{"class":122},[109,162170,162171],{"class":211}," say_hello",[109,162173,33128],{"class":126},[109,162175,162176,162178,162180,162182],{"class":111,"line":119},[109,162177,32474],{"class":133},[109,162179,714],{"class":126},[109,162181,7175],{"class":278},[109,162183,1330],{"class":126},[109,162185,162186,162188,162190,162192],{"class":111,"line":140},[109,162187,32474],{"class":133},[109,162189,714],{"class":126},[109,162191,147814],{"class":278},[109,162193,1330],{"class":126},[109,162195,162196],{"class":111,"line":154},[109,162197,158],{"emptyLinePlaceholder":157},[109,162199,162200],{"class":111,"line":161},[109,162201,158],{"emptyLinePlaceholder":157},[109,162203,162204],{"class":111,"line":167},[109,162205,162206],{"class":126},"say_hello()\n",[19,162208,10343],{},[765,162210,162211,162214,162217,162220],{},[30,162212,162213],{},"函数必须先定义，再调用。",[30,162215,162216],{},"函数名遵循变量命名规则。",[30,162218,162219],{},"函数体需要缩进。",[30,162221,162222],{},"函数不调用就不会执行。",[14,162224,162226],{"id":162225},"_53-函数调用","5.3 函数调用",[99,162228,162230],{"className":31553,"code":162229,"language":31555,"meta":104,"style":104},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[106,162231,162232,162241,162252,162263,162274,162284,162288,162292,162297],{"__ignoreMap":104},[109,162233,162234,162236,162239],{"class":111,"line":112},[109,162235,33122],{"class":122},[109,162237,162238],{"class":211}," print_menu",[109,162240,33128],{"class":126},[109,162242,162243,162245,162247,162250],{"class":111,"line":119},[109,162244,32474],{"class":133},[109,162246,714],{"class":126},[109,162248,162249],{"class":278},"\"1. 查询\"",[109,162251,1330],{"class":126},[109,162253,162254,162256,162258,162261],{"class":111,"line":140},[109,162255,32474],{"class":133},[109,162257,714],{"class":126},[109,162259,162260],{"class":278},"\"2. 添加\"",[109,162262,1330],{"class":126},[109,162264,162265,162267,162269,162272],{"class":111,"line":154},[109,162266,32474],{"class":133},[109,162268,714],{"class":126},[109,162270,162271],{"class":278},"\"3. 删除\"",[109,162273,1330],{"class":126},[109,162275,162276,162278,162280,162282],{"class":111,"line":161},[109,162277,32474],{"class":133},[109,162279,714],{"class":126},[109,162281,161856],{"class":278},[109,162283,1330],{"class":126},[109,162285,162286],{"class":111,"line":167},[109,162287,158],{"emptyLinePlaceholder":157},[109,162289,162290],{"class":111,"line":185},[109,162291,158],{"emptyLinePlaceholder":157},[109,162293,162294],{"class":111,"line":201},[109,162295,162296],{"class":126},"print_menu()\n",[109,162298,162299],{"class":111,"line":206},[109,162300,162296],{"class":126},[19,162302,162303],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162305,162307],{"id":162306},"_54-参数","5.4 参数",[19,162309,162310],{},"参数用于向函数传递数据。",[99,162312,162314],{"className":31553,"code":162313,"language":31555,"meta":104,"style":104},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[106,162315,162316,162325,162345,162349,162353,162362],{"__ignoreMap":104},[109,162317,162318,162320,162322],{"class":111,"line":112},[109,162319,33122],{"class":122},[109,162321,162171],{"class":211},[109,162323,162324],{"class":126},"(name):\n",[109,162326,162327,162329,162331,162333,162335,162337,162339,162341,162343],{"class":111,"line":119},[109,162328,32474],{"class":133},[109,162330,714],{"class":126},[109,162332,1595],{"class":122},[109,162334,158229],{"class":278},[109,162336,2427],{"class":133},[109,162338,80985],{"class":126},[109,162340,2476],{"class":133},[109,162342,1789],{"class":278},[109,162344,1330],{"class":126},[109,162346,162347],{"class":111,"line":140},[109,162348,158],{"emptyLinePlaceholder":157},[109,162350,162351],{"class":111,"line":154},[109,162352,158],{"emptyLinePlaceholder":157},[109,162354,162355,162358,162360],{"class":111,"line":161},[109,162356,162357],{"class":126},"say_hello(",[109,162359,151063],{"class":278},[109,162361,1330],{"class":126},[109,162363,162364,162366,162368],{"class":111,"line":167},[109,162365,162357],{"class":126},[109,162367,152111],{"class":278},[109,162369,1330],{"class":126},[19,162371,162372,162374,162375,162377],{},[106,162373,80985],{}," 是形参，",[106,162376,151063],{}," 是实参。",[19,162379,162380],{},"多个参数：",[99,162382,162384],{"className":31553,"code":162383,"language":31555,"meta":104,"style":104},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[106,162385,162386,162394,162407,162413,162417,162421],{"__ignoreMap":104},[109,162387,162388,162390,162392],{"class":111,"line":112},[109,162389,33122],{"class":122},[109,162391,6546],{"class":211},[109,162393,152268],{"class":126},[109,162395,162396,162399,162401,162403,162405],{"class":111,"line":119},[109,162397,162398],{"class":126},"    result ",[109,162400,130],{"class":122},[109,162402,235],{"class":126},[109,162404,1348],{"class":122},[109,162406,152279],{"class":126},[109,162408,162409,162411],{"class":111,"line":140},[109,162410,32474],{"class":133},[109,162412,77760],{"class":126},[109,162414,162415],{"class":111,"line":154},[109,162416,158],{"emptyLinePlaceholder":157},[109,162418,162419],{"class":111,"line":161},[109,162420,158],{"emptyLinePlaceholder":157},[109,162422,162423,162426,162428,162430,162432],{"class":111,"line":167},[109,162424,162425],{"class":126},"add(",[109,162427,1008],{"class":133},[109,162429,13608],{"class":126},[109,162431,2232],{"class":133},[109,162433,1330],{"class":126},[19,162435,162436],{},"调用时参数数量必须匹配。",[14,162438,162440],{"id":162439},"_55-返回值","5.5 返回值",[19,162442,162443,162445],{},[106,162444,18219],{}," 用于把函数内部的结果返回给调用者。",[99,162447,162449],{"className":31553,"code":162448,"language":31555,"meta":104,"style":104},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[106,162450,162451,162459,162469,162473,162477,162495],{"__ignoreMap":104},[109,162452,162453,162455,162457],{"class":111,"line":112},[109,162454,33122],{"class":122},[109,162456,6546],{"class":211},[109,162458,152268],{"class":126},[109,162460,162461,162463,162465,162467],{"class":111,"line":119},[109,162462,731],{"class":122},[109,162464,235],{"class":126},[109,162466,1348],{"class":122},[109,162468,152279],{"class":126},[109,162470,162471],{"class":111,"line":140},[109,162472,158],{"emptyLinePlaceholder":157},[109,162474,162475],{"class":111,"line":154},[109,162476,158],{"emptyLinePlaceholder":157},[109,162478,162479,162482,162484,162487,162489,162491,162493],{"class":111,"line":161},[109,162480,162481],{"class":126},"result ",[109,162483,130],{"class":122},[109,162485,162486],{"class":126}," add(",[109,162488,1008],{"class":133},[109,162490,13608],{"class":126},[109,162492,2232],{"class":133},[109,162494,1330],{"class":126},[109,162496,162497,162499],{"class":111,"line":167},[109,162498,31590],{"class":133},[109,162500,77760],{"class":126},[19,162502,162503,162504,162506,162507,29560],{},"如果函数没有写 ",[106,162505,18219],{},"，默认返回 ",[106,162508,96861],{},[99,162510,162512],{"className":31553,"code":162511,"language":31555,"meta":104,"style":104},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[106,162513,162514,162522,162532,162536,162540,162549],{"__ignoreMap":104},[109,162515,162516,162518,162520],{"class":111,"line":112},[109,162517,33122],{"class":122},[109,162519,162171],{"class":211},[109,162521,33128],{"class":126},[109,162523,162524,162526,162528,162530],{"class":111,"line":119},[109,162525,32474],{"class":133},[109,162527,714],{"class":126},[109,162529,7175],{"class":278},[109,162531,1330],{"class":126},[109,162533,162534],{"class":111,"line":140},[109,162535,158],{"emptyLinePlaceholder":157},[109,162537,162538],{"class":111,"line":154},[109,162539,158],{"emptyLinePlaceholder":157},[109,162541,162542,162544,162546],{"class":111,"line":161},[109,162543,162481],{"class":126},[109,162545,130],{"class":122},[109,162547,162548],{"class":126}," say_hello()\n",[109,162550,162551,162553,162556],{"class":111,"line":167},[109,162552,31590],{"class":133},[109,162554,162555],{"class":126},"(result)  ",[109,162557,162558],{"class":115},"# None\n",[14,162560,162562],{"id":162561},"_56-return的作用","5.6 return的作用",[19,162564,162565,162567],{},[106,162566,18219],{}," 有两个作用：",[765,162569,162570,162573],{},[30,162571,162572],{},"返回结果。",[30,162574,162575],{},"结束函数。",[99,162577,162579],{"className":31553,"code":162578,"language":31555,"meta":104,"style":104},"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",[106,162580,162581,162591,162603,162610,162614,162626,162633,162637,162644,162648,162652,162663],{"__ignoreMap":104},[109,162582,162583,162585,162588],{"class":111,"line":112},[109,162584,33122],{"class":122},[109,162586,162587],{"class":211}," check_age",[109,162589,162590],{"class":126},"(age):\n",[109,162592,162593,162595,162597,162599,162601],{"class":111,"line":119},[109,162594,4446],{"class":122},[109,162596,16880],{"class":126},[109,162598,1320],{"class":122},[109,162600,734],{"class":133},[109,162602,5082],{"class":126},[109,162604,162605,162607],{"class":111,"line":140},[109,162606,15925],{"class":122},[109,162608,162609],{"class":278}," \"年龄不合法\"\n",[109,162611,162612],{"class":111,"line":154},[109,162613,158],{"emptyLinePlaceholder":157},[109,162615,162616,162618,162620,162622,162624],{"class":111,"line":161},[109,162617,4446],{"class":122},[109,162619,16880],{"class":126},[109,162621,3086],{"class":122},[109,162623,157460],{"class":133},[109,162625,5082],{"class":126},[109,162627,162628,162630],{"class":111,"line":167},[109,162629,15925],{"class":122},[109,162631,162632],{"class":278}," \"成年人\"\n",[109,162634,162635],{"class":111,"line":185},[109,162636,158],{"emptyLinePlaceholder":157},[109,162638,162639,162641],{"class":111,"line":201},[109,162640,731],{"class":122},[109,162642,162643],{"class":278}," \"未成年人\"\n",[109,162645,162646],{"class":111,"line":206},[109,162647,158],{"emptyLinePlaceholder":157},[109,162649,162650],{"class":111,"line":218},[109,162651,158],{"emptyLinePlaceholder":157},[109,162653,162654,162656,162659,162661],{"class":111,"line":223},[109,162655,31590],{"class":133},[109,162657,162658],{"class":126},"(check_age(",[109,162660,2232],{"class":133},[109,162662,31672],{"class":126},[109,162664,162665,162667,162669,162671,162673],{"class":111,"line":229},[109,162666,31590],{"class":133},[109,162668,162658],{"class":126},[109,162670,2064],{"class":122},[109,162672,1755],{"class":133},[109,162674,31672],{"class":126},[19,162676,162677,162678,162680],{},"函数执行到 ",[106,162679,18219],{}," 后，后面的代码不会继续执行。",[14,162682,162684],{"id":162683},"_57-none","5.7 None",[19,162686,162687,162689],{},[106,162688,96861],{}," 表示空值或没有结果。",[19,162691,162692],{},"常见使用场景：",[765,162694,162695,162698,162701],{},[30,162696,162697],{},"函数没有返回值。",[30,162699,162700],{},"变量暂时没有具体值。",[30,162702,162703],{},"表示查询不到结果。",[99,162705,162707],{"className":31553,"code":162706,"language":31555,"meta":104,"style":104},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[106,162708,162709,162717,162721,162734],{"__ignoreMap":104},[109,162710,162711,162713,162715],{"class":111,"line":112},[109,162712,162481],{"class":126},[109,162714,130],{"class":122},[109,162716,153347],{"class":133},[109,162718,162719],{"class":111,"line":119},[109,162720,158],{"emptyLinePlaceholder":157},[109,162722,162723,162725,162728,162730,162732],{"class":111,"line":140},[109,162724,2922],{"class":122},[109,162726,162727],{"class":126}," result ",[109,162729,40102],{"class":122},[109,162731,40108],{"class":133},[109,162733,5082],{"class":126},[109,162735,162736,162738,162740,162743],{"class":111,"line":154},[109,162737,32474],{"class":133},[109,162739,714],{"class":126},[109,162741,162742],{"class":278},"\"没有数据\"",[109,162744,1330],{"class":126},[19,162746,162747,162748,162750,162751,162754,162755,29560],{},"判断 ",[106,162749,96861],{}," 推荐使用 ",[106,162752,162753],{},"is None","，不要写成 ",[106,162756,162757],{},"== None",[14,162759,162761],{"id":162760},"_58-函数文档字符串","5.8 函数文档字符串",[19,162763,162764],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[99,162766,162768],{"className":31553,"code":162767,"language":31555,"meta":104,"style":104},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[106,162769,162770,162780,162785],{"__ignoreMap":104},[109,162771,162772,162774,162777],{"class":111,"line":112},[109,162773,33122],{"class":122},[109,162775,162776],{"class":211}," calculate_bmi",[109,162778,162779],{"class":126},"(weight, height):\n",[109,162781,162782],{"class":111,"line":119},[109,162783,162784],{"class":278},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[109,162786,162787,162789,162792,162794,162797,162799],{"class":111,"line":140},[109,162788,731],{"class":122},[109,162790,162791],{"class":126}," weight ",[109,162793,2116],{"class":122},[109,162795,162796],{"class":126}," height ",[109,162798,11978],{"class":122},[109,162800,48898],{"class":133},[19,162802,162803],{},"查看说明：",[99,162805,162807],{"className":31553,"code":162806,"language":31555,"meta":104,"style":104},"help(calculate_bmi)\n",[106,162808,162809],{"__ignoreMap":104},[109,162810,162811,162814],{"class":111,"line":112},[109,162812,162813],{"class":133},"help",[109,162815,162816],{"class":126},"(calculate_bmi)\n",[19,162818,162819],{},"较完整的写法：",[99,162821,162823],{"className":31553,"code":162822,"language":31555,"meta":104,"style":104},"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",[106,162824,162825,162833,162838,162843,162847,162852,162857,162862,162866],{"__ignoreMap":104},[109,162826,162827,162829,162831],{"class":111,"line":112},[109,162828,33122],{"class":122},[109,162830,162776],{"class":211},[109,162832,162779],{"class":126},[109,162834,162835],{"class":111,"line":119},[109,162836,162837],{"class":278},"    \"\"\"\n",[109,162839,162840],{"class":111,"line":140},[109,162841,162842],{"class":278},"    计算BMI。\n",[109,162844,162845],{"class":111,"line":154},[109,162846,158],{"emptyLinePlaceholder":157},[109,162848,162849],{"class":111,"line":161},[109,162850,162851],{"class":278},"    :param weight: 体重，单位kg\n",[109,162853,162854],{"class":111,"line":167},[109,162855,162856],{"class":278},"    :param height: 身高，单位m\n",[109,162858,162859],{"class":111,"line":185},[109,162860,162861],{"class":278},"    :return: BMI数值\n",[109,162863,162864],{"class":111,"line":201},[109,162865,162837],{"class":278},[109,162867,162868,162870,162872,162874,162876,162878],{"class":111,"line":206},[109,162869,731],{"class":122},[109,162871,162791],{"class":126},[109,162873,2116],{"class":122},[109,162875,162796],{"class":126},[109,162877,11978],{"class":122},[109,162879,48898],{"class":133},[14,162881,162883],{"id":162882},"_59-变量作用域","5.9 变量作用域",[51,162885,162887],{"id":162886},"_591-局部变量","5.9.1 局部变量",[19,162889,162890],{},"在函数内部定义的变量，只能在函数内部使用。",[99,162892,162894],{"className":31553,"code":162893,"language":31555,"meta":104,"style":104},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[106,162895,162896,162905,162913,162919,162923,162927,162932],{"__ignoreMap":104},[109,162897,162898,162900,162903],{"class":111,"line":112},[109,162899,33122],{"class":122},[109,162901,162902],{"class":211}," test",[109,162904,33128],{"class":126},[109,162906,162907,162909,162911],{"class":111,"line":119},[109,162908,46768],{"class":126},[109,162910,130],{"class":122},[109,162912,59603],{"class":133},[109,162914,162915,162917],{"class":111,"line":140},[109,162916,32474],{"class":133},[109,162918,1558],{"class":126},[109,162920,162921],{"class":111,"line":154},[109,162922,158],{"emptyLinePlaceholder":157},[109,162924,162925],{"class":111,"line":161},[109,162926,158],{"emptyLinePlaceholder":157},[109,162928,162929],{"class":111,"line":167},[109,162930,162931],{"class":126},"test()\n",[109,162933,162934,162936,162939],{"class":111,"line":185},[109,162935,31590],{"class":133},[109,162937,162938],{"class":126},"(num)  ",[109,162940,162941],{"class":115},"# 报错\n",[51,162943,162945],{"id":162944},"_592-全局变量","5.9.2 全局变量",[19,162947,162948],{},"在函数外部定义的变量，可以在函数内部读取。",[99,162950,162952],{"className":31553,"code":162951,"language":31555,"meta":104,"style":104},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[106,162953,162954,162962,162966,162970,162978,162984,162988,162992],{"__ignoreMap":104},[109,162955,162956,162958,162960],{"class":111,"line":112},[109,162957,147711],{"class":126},[109,162959,130],{"class":122},[109,162961,150528],{"class":278},[109,162963,162964],{"class":111,"line":119},[109,162965,158],{"emptyLinePlaceholder":157},[109,162967,162968],{"class":111,"line":140},[109,162969,158],{"emptyLinePlaceholder":157},[109,162971,162972,162974,162976],{"class":111,"line":154},[109,162973,33122],{"class":122},[109,162975,162171],{"class":211},[109,162977,33128],{"class":126},[109,162979,162980,162982],{"class":111,"line":161},[109,162981,32474],{"class":133},[109,162983,151835],{"class":126},[109,162985,162986],{"class":111,"line":167},[109,162987,158],{"emptyLinePlaceholder":157},[109,162989,162990],{"class":111,"line":185},[109,162991,158],{"emptyLinePlaceholder":157},[109,162993,162994],{"class":111,"line":201},[109,162995,162206],{"class":126},[19,162997,162998,162999,29560],{},"如果要在函数内部修改全局变量，需要 ",[106,163000,163001],{},"global",[99,163003,163005],{"className":31553,"code":163004,"language":31555,"meta":104,"style":104},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[106,163006,163007,163015,163019,163023,163032,163040,163048,163052,163056,163061],{"__ignoreMap":104},[109,163008,163009,163011,163013],{"class":111,"line":112},[109,163010,147866],{"class":126},[109,163012,130],{"class":122},[109,163014,48508],{"class":133},[109,163016,163017],{"class":111,"line":119},[109,163018,158],{"emptyLinePlaceholder":157},[109,163020,163021],{"class":111,"line":140},[109,163022,158],{"emptyLinePlaceholder":157},[109,163024,163025,163027,163030],{"class":111,"line":154},[109,163026,33122],{"class":122},[109,163028,163029],{"class":211}," add_count",[109,163031,33128],{"class":126},[109,163033,163034,163037],{"class":111,"line":161},[109,163035,163036],{"class":122},"    global",[109,163038,163039],{"class":126}," count\n",[109,163041,163042,163044,163046],{"class":111,"line":167},[109,163043,160608],{"class":126},[109,163045,10795],{"class":122},[109,163047,56874],{"class":133},[109,163049,163050],{"class":111,"line":185},[109,163051,158],{"emptyLinePlaceholder":157},[109,163053,163054],{"class":111,"line":201},[109,163055,158],{"emptyLinePlaceholder":157},[109,163057,163058],{"class":111,"line":206},[109,163059,163060],{"class":126},"add_count()\n",[109,163062,163063,163065],{"class":111,"line":218},[109,163064,31590],{"class":133},[109,163066,163067],{"class":126},"(count)\n",[19,163069,163070],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163072,163074],{"id":163073},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163076,163077],{},"一个函数中可以调用另一个函数。",[99,163079,163081],{"className":31553,"code":163080,"language":31555,"meta":104,"style":104},"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",[106,163082,163083,163092,163106,163110,163114,163123,163128,163148,163169,163173,163177,163181],{"__ignoreMap":104},[109,163084,163085,163087,163090],{"class":111,"line":112},[109,163086,33122],{"class":122},[109,163088,163089],{"class":211}," print_line",[109,163091,33128],{"class":126},[109,163093,163094,163096,163098,163100,163102,163104],{"class":111,"line":119},[109,163095,32474],{"class":133},[109,163097,714],{"class":126},[109,163099,33658],{"class":278},[109,163101,797],{"class":122},[109,163103,79840],{"class":133},[109,163105,1330],{"class":126},[109,163107,163108],{"class":111,"line":140},[109,163109,158],{"emptyLinePlaceholder":157},[109,163111,163112],{"class":111,"line":154},[109,163113,158],{"emptyLinePlaceholder":157},[109,163115,163116,163118,163121],{"class":111,"line":161},[109,163117,33122],{"class":122},[109,163119,163120],{"class":211}," print_info",[109,163122,150550],{"class":126},[109,163124,163125],{"class":111,"line":167},[109,163126,163127],{"class":126},"    print_line()\n",[109,163129,163130,163132,163134,163136,163138,163140,163142,163144,163146],{"class":111,"line":185},[109,163131,32474],{"class":133},[109,163133,714],{"class":126},[109,163135,1595],{"class":122},[109,163137,157857],{"class":278},[109,163139,2427],{"class":133},[109,163141,80985],{"class":126},[109,163143,2476],{"class":133},[109,163145,1789],{"class":278},[109,163147,1330],{"class":126},[109,163149,163150,163152,163154,163156,163159,163161,163163,163165,163167],{"class":111,"line":201},[109,163151,32474],{"class":133},[109,163153,714],{"class":126},[109,163155,1595],{"class":122},[109,163157,163158],{"class":278},"\"年龄:",[109,163160,2427],{"class":133},[109,163162,71396],{"class":126},[109,163164,2476],{"class":133},[109,163166,1789],{"class":278},[109,163168,1330],{"class":126},[109,163170,163171],{"class":111,"line":206},[109,163172,163127],{"class":126},[109,163174,163175],{"class":111,"line":218},[109,163176,158],{"emptyLinePlaceholder":157},[109,163178,163179],{"class":111,"line":223},[109,163180,158],{"emptyLinePlaceholder":157},[109,163182,163183,163186,163188,163190,163192],{"class":111,"line":229},[109,163184,163185],{"class":126},"print_info(",[109,163187,151063],{"class":278},[109,163189,13608],{"class":126},[109,163191,2182],{"class":133},[109,163193,1330],{"class":126},[19,163195,163196],{},"这种方式可以把小功能组合成大功能。",[14,163198,163200],{"id":163199},"_511-参数检查","5.11 参数检查",[19,163202,163203],{},"函数内部可以检查参数是否合法。",[99,163205,163207],{"className":31553,"code":163206,"language":31555,"meta":104,"style":104},"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",[106,163208,163209,163218,163230,163236,163246,163250,163254,163271,163275,163287,163298,163304],{"__ignoreMap":104},[109,163210,163211,163213,163216],{"class":111,"line":112},[109,163212,33122],{"class":122},[109,163214,163215],{"class":211}," divide",[109,163217,152268],{"class":126},[109,163219,163220,163222,163224,163226,163228],{"class":111,"line":119},[109,163221,4446],{"class":122},[109,163223,249],{"class":126},[109,163225,4296],{"class":122},[109,163227,734],{"class":133},[109,163229,5082],{"class":126},[109,163231,163232,163234],{"class":111,"line":140},[109,163233,15925],{"class":122},[109,163235,153347],{"class":133},[109,163237,163238,163240,163242,163244],{"class":111,"line":154},[109,163239,731],{"class":122},[109,163241,235],{"class":126},[109,163243,2116],{"class":122},[109,163245,152279],{"class":126},[109,163247,163248],{"class":111,"line":161},[109,163249,158],{"emptyLinePlaceholder":157},[109,163251,163252],{"class":111,"line":167},[109,163253,158],{"emptyLinePlaceholder":157},[109,163255,163256,163258,163260,163263,163265,163267,163269],{"class":111,"line":185},[109,163257,162481],{"class":126},[109,163259,130],{"class":122},[109,163261,163262],{"class":126}," divide(",[109,163264,1008],{"class":133},[109,163266,13608],{"class":126},[109,163268,1314],{"class":133},[109,163270,1330],{"class":126},[109,163272,163273],{"class":111,"line":201},[109,163274,158],{"emptyLinePlaceholder":157},[109,163276,163277,163279,163281,163283,163285],{"class":111,"line":206},[109,163278,2922],{"class":122},[109,163280,162727],{"class":126},[109,163282,40102],{"class":122},[109,163284,40108],{"class":133},[109,163286,5082],{"class":126},[109,163288,163289,163291,163293,163296],{"class":111,"line":218},[109,163290,32474],{"class":133},[109,163292,714],{"class":126},[109,163294,163295],{"class":278},"\"除数不能为0\"",[109,163297,1330],{"class":126},[109,163299,163300,163302],{"class":111,"line":223},[109,163301,3077],{"class":122},[109,163303,5082],{"class":126},[109,163305,163306,163308],{"class":111,"line":229},[109,163307,32474],{"class":133},[109,163309,77760],{"class":126},[14,163311,163313],{"id":163312},"_512-类型提示","5.12 类型提示",[19,163315,163316],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[99,163318,163320],{"className":31553,"code":163319,"language":31555,"meta":104,"style":104},"def add(a: int, b: int) -> int:\n    return a + b\n",[106,163321,163322,163345],{"__ignoreMap":104},[109,163323,163324,163326,163328,163331,163333,163336,163338,163341,163343],{"class":111,"line":112},[109,163325,33122],{"class":122},[109,163327,6546],{"class":211},[109,163329,163330],{"class":126},"(a: ",[109,163332,123],{"class":133},[109,163334,163335],{"class":126},", b: ",[109,163337,123],{"class":133},[109,163339,163340],{"class":126},") -> ",[109,163342,123],{"class":133},[109,163344,5082],{"class":126},[109,163346,163347,163349,163351,163353],{"class":111,"line":119},[109,163348,731],{"class":122},[109,163350,235],{"class":126},[109,163352,1348],{"class":122},[109,163354,152279],{"class":126},[19,163356,163357],{},"字符串参数：",[99,163359,163361],{"className":31553,"code":163360,"language":31555,"meta":104,"style":104},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[106,163362,163363,163380],{"__ignoreMap":104},[109,163364,163365,163367,163369,163372,163374,163376,163378],{"class":111,"line":112},[109,163366,33122],{"class":122},[109,163368,162171],{"class":211},[109,163370,163371],{"class":126},"(name: ",[109,163373,2695],{"class":133},[109,163375,163340],{"class":126},[109,163377,96861],{"class":133},[109,163379,5082],{"class":126},[109,163381,163382,163384,163386,163388,163390,163392,163394,163396,163398],{"class":111,"line":119},[109,163383,32474],{"class":133},[109,163385,714],{"class":126},[109,163387,1595],{"class":122},[109,163389,158229],{"class":278},[109,163391,2427],{"class":133},[109,163393,80985],{"class":126},[109,163395,2476],{"class":133},[109,163397,1789],{"class":278},[109,163399,1330],{"class":126},[19,163401,163402],{},"列表参数：",[99,163404,163406],{"className":31553,"code":163405,"language":31555,"meta":104,"style":104},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[106,163407,163408,163427,163435,163447,163456],{"__ignoreMap":104},[109,163409,163410,163412,163415,163418,163420,163423,163425],{"class":111,"line":112},[109,163411,33122],{"class":122},[109,163413,163414],{"class":211}," get_total",[109,163416,163417],{"class":126},"(numbers: list[",[109,163419,123],{"class":133},[109,163421,163422],{"class":126},"]) -> ",[109,163424,123],{"class":133},[109,163426,5082],{"class":126},[109,163428,163429,163431,163433],{"class":111,"line":119},[109,163430,160482],{"class":126},[109,163432,130],{"class":122},[109,163434,48508],{"class":133},[109,163436,163437,163439,163442,163444],{"class":111,"line":140},[109,163438,1302],{"class":122},[109,163440,163441],{"class":126}," number ",[109,163443,27218],{"class":122},[109,163445,163446],{"class":126}," numbers:\n",[109,163448,163449,163451,163453],{"class":111,"line":154},[109,163450,161157],{"class":126},[109,163452,10795],{"class":122},[109,163454,163455],{"class":126}," number\n",[109,163457,163458,163460],{"class":111,"line":161},[109,163459,731],{"class":122},[109,163461,163462],{"class":126}," total\n",[19,163464,163465],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163467,163469],{"id":163468},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[99,163471,163473],{"className":31553,"code":163472,"language":31555,"meta":104,"style":104},"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",[106,163474,163475,163485,163489,163493,163501,163512,163522,163532,163542,163552,163556,163560,163569,163591,163595,163599,163608,163614,163634,163646,163657,163661,163670,163681,163686,163690,163694,163703,163709,163728,163740,163750,163754,163765,163775,163779,163787,163798,163802,163806,163810,163818,163823,163837,163841,163853,163858,163870,163875,163887,163892,163904,163914,163918,163924],{"__ignoreMap":104},[109,163476,163477,163480,163482],{"class":111,"line":112},[109,163478,163479],{"class":126},"balance ",[109,163481,130],{"class":122},[109,163483,163484],{"class":133}," 1000\n",[109,163486,163487],{"class":111,"line":119},[109,163488,158],{"emptyLinePlaceholder":157},[109,163490,163491],{"class":111,"line":140},[109,163492,158],{"emptyLinePlaceholder":157},[109,163494,163495,163497,163499],{"class":111,"line":154},[109,163496,33122],{"class":122},[109,163498,153208],{"class":211},[109,163500,33128],{"class":126},[109,163502,163503,163505,163507,163510],{"class":111,"line":161},[109,163504,32474],{"class":133},[109,163506,714],{"class":126},[109,163508,163509],{"class":278},"\"====== ATM ======\"",[109,163511,1330],{"class":126},[109,163513,163514,163516,163518,163520],{"class":111,"line":167},[109,163515,32474],{"class":133},[109,163517,714],{"class":126},[109,163519,161823],{"class":278},[109,163521,1330],{"class":126},[109,163523,163524,163526,163528,163530],{"class":111,"line":185},[109,163525,32474],{"class":133},[109,163527,714],{"class":126},[109,163529,161834],{"class":278},[109,163531,1330],{"class":126},[109,163533,163534,163536,163538,163540],{"class":111,"line":201},[109,163535,32474],{"class":133},[109,163537,714],{"class":126},[109,163539,161845],{"class":278},[109,163541,1330],{"class":126},[109,163543,163544,163546,163548,163550],{"class":111,"line":206},[109,163545,32474],{"class":133},[109,163547,714],{"class":126},[109,163549,161856],{"class":278},[109,163551,1330],{"class":126},[109,163553,163554],{"class":111,"line":218},[109,163555,158],{"emptyLinePlaceholder":157},[109,163557,163558],{"class":111,"line":223},[109,163559,158],{"emptyLinePlaceholder":157},[109,163561,163562,163564,163567],{"class":111,"line":229},[109,163563,33122],{"class":122},[109,163565,163566],{"class":211}," show_balance",[109,163568,33128],{"class":126},[109,163570,163571,163573,163575,163577,163580,163582,163585,163587,163589],{"class":111,"line":244},[109,163572,32474],{"class":133},[109,163574,714],{"class":126},[109,163576,1595],{"class":122},[109,163578,163579],{"class":278},"\"当前余额:",[109,163581,2427],{"class":133},[109,163583,163584],{"class":126},"balance",[109,163586,2476],{"class":133},[109,163588,158187],{"class":278},[109,163590,1330],{"class":126},[109,163592,163593],{"class":111,"line":258},[109,163594,158],{"emptyLinePlaceholder":157},[109,163596,163597],{"class":111,"line":263},[109,163598,158],{"emptyLinePlaceholder":157},[109,163600,163601,163603,163606],{"class":111,"line":269},[109,163602,33122],{"class":122},[109,163604,163605],{"class":211}," save_money",[109,163607,33128],{"class":126},[109,163609,163610,163612],{"class":111,"line":304},[109,163611,163036],{"class":122},[109,163613,151274],{"class":126},[109,163615,163616,163619,163621,163623,163625,163627,163629,163632],{"class":111,"line":331},[109,163617,163618],{"class":126},"    money ",[109,163620,130],{"class":122},[109,163622,110972],{"class":133},[109,163624,714],{"class":126},[109,163626,54996],{"class":133},[109,163628,714],{"class":126},[109,163630,163631],{"class":278},"\"请输入存款金额:\"",[109,163633,31672],{"class":126},[109,163635,163636,163638,163640,163642,163644],{"class":111,"line":336},[109,163637,4446],{"class":122},[109,163639,151317],{"class":126},[109,163641,2976],{"class":122},[109,163643,734],{"class":133},[109,163645,5082],{"class":126},[109,163647,163648,163650,163652,163655],{"class":111,"line":364},[109,163649,33626],{"class":133},[109,163651,714],{"class":126},[109,163653,163654],{"class":278},"\"金额必须大于0\"",[109,163656,1330],{"class":126},[109,163658,163659],{"class":111,"line":391},[109,163660,153536],{"class":122},[109,163662,163663,163666,163668],{"class":111,"line":396},[109,163664,163665],{"class":126},"    balance ",[109,163667,10795],{"class":122},[109,163669,151350],{"class":126},[109,163671,163672,163674,163676,163679],{"class":111,"line":402},[109,163673,32474],{"class":133},[109,163675,714],{"class":126},[109,163677,163678],{"class":278},"\"存款成功\"",[109,163680,1330],{"class":126},[109,163682,163683],{"class":111,"line":419},[109,163684,163685],{"class":126},"    show_balance()\n",[109,163687,163688],{"class":111,"line":435},[109,163689,158],{"emptyLinePlaceholder":157},[109,163691,163692],{"class":111,"line":440},[109,163693,158],{"emptyLinePlaceholder":157},[109,163695,163696,163698,163701],{"class":111,"line":467},[109,163697,33122],{"class":122},[109,163699,163700],{"class":211}," withdraw_money",[109,163702,33128],{"class":126},[109,163704,163705,163707],{"class":111,"line":494},[109,163706,163036],{"class":122},[109,163708,151274],{"class":126},[109,163710,163711,163713,163715,163717,163719,163721,163723,163726],{"class":111,"line":499},[109,163712,163618],{"class":126},[109,163714,130],{"class":122},[109,163716,110972],{"class":133},[109,163718,714],{"class":126},[109,163720,54996],{"class":133},[109,163722,714],{"class":126},[109,163724,163725],{"class":278},"\"请输入取款金额:\"",[109,163727,31672],{"class":126},[109,163729,163730,163732,163734,163736,163738],{"class":111,"line":526},[109,163731,4446],{"class":122},[109,163733,151317],{"class":126},[109,163735,2976],{"class":122},[109,163737,734],{"class":133},[109,163739,5082],{"class":126},[109,163741,163742,163744,163746,163748],{"class":111,"line":552},[109,163743,33626],{"class":133},[109,163745,714],{"class":126},[109,163747,163654],{"class":278},[109,163749,1330],{"class":126},[109,163751,163752],{"class":111,"line":557},[109,163753,153536],{"class":122},[109,163755,163756,163758,163760,163762],{"class":111,"line":584},[109,163757,4446],{"class":122},[109,163759,151317],{"class":126},[109,163761,2490],{"class":122},[109,163763,163764],{"class":126}," balance:\n",[109,163766,163767,163769,163771,163773],{"class":111,"line":611},[109,163768,33626],{"class":133},[109,163770,714],{"class":126},[109,163772,151412],{"class":278},[109,163774,1330],{"class":126},[109,163776,163777],{"class":111,"line":616},[109,163778,153536],{"class":122},[109,163780,163781,163783,163785],{"class":111,"line":633},[109,163782,163665],{"class":126},[109,163784,151427],{"class":122},[109,163786,151350],{"class":126},[109,163788,163789,163791,163793,163796],{"class":111,"line":649},[109,163790,32474],{"class":133},[109,163792,714],{"class":126},[109,163794,163795],{"class":278},"\"取款成功\"",[109,163797,1330],{"class":126},[109,163799,163800],{"class":111,"line":676},[109,163801,163685],{"class":126},[109,163803,163804],{"class":111,"line":703},[109,163805,158],{"emptyLinePlaceholder":157},[109,163807,163808],{"class":111,"line":708},[109,163809,158],{"emptyLinePlaceholder":157},[109,163811,163812,163814,163816],{"class":111,"line":723},[109,163813,109838],{"class":122},[109,163815,96467],{"class":133},[109,163817,5082],{"class":126},[109,163819,163820],{"class":111,"line":728},[109,163821,163822],{"class":126},"    show_menu()\n",[109,163824,163825,163827,163829,163831,163833,163835],{"class":111,"line":739},[109,163826,161867],{"class":126},[109,163828,130],{"class":122},[109,163830,61780],{"class":133},[109,163832,714],{"class":126},[109,163834,154248],{"class":278},[109,163836,1330],{"class":126},[109,163838,163839],{"class":111,"line":9352},[109,163840,158],{"emptyLinePlaceholder":157},[109,163842,163843,163845,163847,163849,163851],{"class":111,"line":9364},[109,163844,4446],{"class":122},[109,163846,154261],{"class":126},[109,163848,4296],{"class":122},[109,163850,154266],{"class":278},[109,163852,5082],{"class":126},[109,163854,163855],{"class":111,"line":9376},[109,163856,163857],{"class":126},"        show_balance()\n",[109,163859,163860,163862,163864,163866,163868],{"class":111,"line":11034},[109,163861,40468],{"class":122},[109,163863,154261],{"class":126},[109,163865,4296],{"class":122},[109,163867,154285],{"class":278},[109,163869,5082],{"class":126},[109,163871,163872],{"class":111,"line":11059},[109,163873,163874],{"class":126},"        save_money()\n",[109,163876,163877,163879,163881,163883,163885],{"class":111,"line":11082},[109,163878,40468],{"class":122},[109,163880,154261],{"class":126},[109,163882,4296],{"class":122},[109,163884,154303],{"class":278},[109,163886,5082],{"class":126},[109,163888,163889],{"class":111,"line":11106},[109,163890,163891],{"class":126},"        withdraw_money()\n",[109,163893,163894,163896,163898,163900,163902],{"class":111,"line":11111},[109,163895,40468],{"class":122},[109,163897,154261],{"class":126},[109,163899,4296],{"class":122},[109,163901,154357],{"class":278},[109,163903,5082],{"class":126},[109,163905,163906,163908,163910,163912],{"class":111,"line":11116},[109,163907,33626],{"class":133},[109,163909,714],{"class":126},[109,163911,154368],{"class":278},[109,163913,1330],{"class":126},[109,163915,163916],{"class":111,"line":11121},[109,163917,32802],{"class":122},[109,163919,163920,163922],{"class":111,"line":11130},[109,163921,159197],{"class":122},[109,163923,5082],{"class":126},[109,163925,163926,163928,163930,163932],{"class":111,"line":11135},[109,163927,33626],{"class":133},[109,163929,714],{"class":126},[109,163931,154389],{"class":278},[109,163933,1330],{"class":126},[19,163935,163936],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163938,163940],{"id":163939},"_514-易错点","5.14 易错点",[765,163942,163943,163946,163949,163954,163959,163962],{},[30,163944,163945],{},"函数定义后必须调用才会执行。",[30,163947,163948],{},"函数名后面有括号才是调用。",[30,163950,163951,163953],{},[106,163952,18219],{}," 后面的代码不会执行。",[30,163955,163956,163957,29560],{},"没有返回值的函数默认返回 ",[106,163958,96861],{},[30,163960,163961],{},"局部变量不能在函数外部访问。",[30,163963,163964,163965,163967],{},"不要滥用 ",[106,163966,163001],{},"，更好的方式是让函数返回新值。",[19,163969,163970,163971,163973],{},"例如不用 ",[106,163972,163001],{}," 改写存款：",[99,163975,163977],{"className":31553,"code":163976,"language":31555,"meta":104,"style":104},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[106,163978,163979,163988,163999,164003,164007,164015,164028],{"__ignoreMap":104},[109,163980,163981,163983,163985],{"class":111,"line":112},[109,163982,33122],{"class":122},[109,163984,163605],{"class":211},[109,163986,163987],{"class":126},"(balance, money):\n",[109,163989,163990,163992,163995,163997],{"class":111,"line":119},[109,163991,731],{"class":122},[109,163993,163994],{"class":126}," balance ",[109,163996,1348],{"class":122},[109,163998,151350],{"class":126},[109,164000,164001],{"class":111,"line":140},[109,164002,158],{"emptyLinePlaceholder":157},[109,164004,164005],{"class":111,"line":154},[109,164006,158],{"emptyLinePlaceholder":157},[109,164008,164009,164011,164013],{"class":111,"line":161},[109,164010,163479],{"class":126},[109,164012,130],{"class":122},[109,164014,163484],{"class":133},[109,164016,164017,164019,164021,164024,164026],{"class":111,"line":167},[109,164018,163479],{"class":126},[109,164020,130],{"class":122},[109,164022,164023],{"class":126}," save_money(balance, ",[109,164025,3098],{"class":133},[109,164027,1330],{"class":126},[109,164029,164030,164032],{"class":111,"line":185},[109,164031,31590],{"class":133},[109,164033,164034],{"class":126},"(balance)\n",[14,164036,164038],{"id":164037},"_515-本章练习","5.15 本章练习",[765,164040,164041,164048,164054,164060,164066],{},[30,164042,164043,164044,164047],{},"定义函数 ",[106,164045,164046],{},"print_student(name, age)","，输出学生信息。",[30,164049,164043,164050,164053],{},[106,164051,164052],{},"get_max(a, b, c)","，返回三个数中的最大值。",[30,164055,164043,164056,164059],{},[106,164057,164058],{},"is_even(num)","，判断一个数是否为偶数。",[30,164061,164043,164062,164065],{},[106,164063,164064],{},"calculate_bmi(weight, height)","，返回 BMI。",[30,164067,164068],{},"把第 4 章的菜单程序拆分成多个函数。",[1467,164070,164071],{},"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":104,"searchDepth":119,"depth":119,"links":164073},[164074,164075,164076,164077,164078,164079,164080,164081,164082,164086,164087,164088,164089,164090,164091],{"id":162094,"depth":119,"text":162095},{"id":162135,"depth":119,"text":162136},{"id":162225,"depth":119,"text":162226},{"id":162306,"depth":119,"text":162307},{"id":162439,"depth":119,"text":162440},{"id":162561,"depth":119,"text":162562},{"id":162683,"depth":119,"text":162684},{"id":162760,"depth":119,"text":162761},{"id":162882,"depth":119,"text":162883,"children":164083},[164084,164085],{"id":162886,"depth":140,"text":162887},{"id":162944,"depth":140,"text":162945},{"id":163073,"depth":119,"text":163074},{"id":163199,"depth":119,"text":163200},{"id":163312,"depth":119,"text":163313},{"id":163468,"depth":119,"text":163469},{"id":163939,"depth":119,"text":163940},{"id":164037,"depth":119,"text":164038},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162086,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164098,"title":164099,"body":164100,"description":24550,"extension":1476,"meta":167144,"navigation":157,"path":167145,"seo":167146,"stem":167147,"__hash__":167148},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164101,"toc":167125},[164102,164105,164109,164112,164115,164219,164222,164226,164229,164309,164312,164316,164319,164379,164382,164418,164421,164436,164440,164513,164516,164571,164574,164644,164647,164731,164741,164799,164803,164848,164851,164877,164880,164986,164990,164993,165035,165038,165102,165105,165109,165112,165173,165176,165206,165209,165247,165251,165254,165263,165266,165390,165393,165434,165438,165441,165452,165492,165495,165510,165515,165518,165585,165588,165678,165682,165685,165733,165736,165763,165765,165795,165798,165818,165821,165852,165855,165888,165892,165895,165919,165922,165946,165949,165973,165977,165980,166110,166113,166193,166196,166271,166275,166278,166328,166331,166373,166376,166400,166402,166426,166429,166484,166487,166553,166557,166560,166563,166601,166604,166657,166660,166706,166709,166742,166745,166749,167068,167072,167101,167105,167122],[10,164103,164099],{"id":164104},"_6-数据容器",[14,164106,164108],{"id":164107},"_61-什么是数据容器","6.1 什么是数据容器",[19,164110,164111],{},"数据容器用于一次保存多个数据。",[19,164113,164114],{},"常见容器：",[1677,164116,164117,164134],{},[1680,164118,164119],{},[1683,164120,164121,164123,164126,164129,164132],{},[1686,164122,26946],{},[1686,164124,164125],{},"是否有序",[1686,164127,164128],{},"是否可变",[1686,164130,164131],{},"是否允许重复",[1686,164133,28667],{},[1723,164135,164136,164154,164170,164185,164202],{},[1683,164137,164138,164141,164144,164147,164150],{},[1728,164139,164140],{},"list列表",[1728,164142,164143],{},"有序",[1728,164145,164146],{},"可变",[1728,164148,164149],{},"允许",[1728,164151,164152],{},[106,164153,156432],{},[1683,164155,164156,164159,164161,164164,164166],{},[1728,164157,164158],{},"tuple元组",[1728,164160,164143],{},[1728,164162,164163],{},"不可变",[1728,164165,164149],{},[1728,164167,164168],{},[106,164169,156445],{},[1683,164171,164172,164175,164177,164179,164181],{},[1728,164173,164174],{},"str字符串",[1728,164176,164143],{},[1728,164178,164163],{},[1728,164180,164149],{},[1728,164182,164183],{},[106,164184,157055],{},[1683,164186,164187,164190,164193,164195,164198],{},[1728,164188,164189],{},"set集合",[1728,164191,164192],{},"无序",[1728,164194,164146],{},[1728,164196,164197],{},"不允许",[1728,164199,164200],{},[106,164201,156470],{},[1683,164203,164204,164207,164209,164211,164214],{},[1728,164205,164206],{},"dict字典",[1728,164208,164143],{},[1728,164210,164146],{},[1728,164212,164213],{},"key不允许重复",[1728,164215,164216],{},[106,164217,164218],{},"{\"name\": \"小明\"}",[19,164220,164221],{},"Python 3.7 之后，字典保持插入顺序。",[14,164223,164225],{"id":164224},"_62-列表list","6.2 列表list",[19,164227,164228],{},"列表用于保存一组有顺序的数据。",[99,164230,164232],{"className":31553,"code":164231,"language":31555,"meta":104,"style":104},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[106,164233,164234,164254,164279,164300],{"__ignoreMap":104},[109,164235,164236,164238,164240,164242,164244,164246,164248,164250,164252],{"class":111,"line":112},[109,164237,161555],{"class":126},[109,164239,130],{"class":122},[109,164241,53401],{"class":126},[109,164243,151063],{"class":278},[109,164245,13608],{"class":126},[109,164247,152111],{"class":278},[109,164249,13608],{"class":126},[109,164251,160906],{"class":278},[109,164253,34421],{"class":126},[109,164255,164256,164259,164261,164263,164265,164267,164269,164271,164273,164275,164277],{"class":111,"line":119},[109,164257,164258],{"class":126},"numbers ",[109,164260,130],{"class":122},[109,164262,53401],{"class":126},[109,164264,1755],{"class":133},[109,164266,13608],{"class":126},[109,164268,1618],{"class":133},[109,164270,13608],{"class":126},[109,164272,1612],{"class":133},[109,164274,13608],{"class":126},[109,164276,1831],{"class":133},[109,164278,34421],{"class":126},[109,164280,164281,164284,164286,164288,164290,164292,164294,164296,164298],{"class":111,"line":140},[109,164282,164283],{"class":126},"mixed ",[109,164285,130],{"class":122},[109,164287,53401],{"class":126},[109,164289,151063],{"class":278},[109,164291,13608],{"class":126},[109,164293,2182],{"class":133},[109,164295,13608],{"class":126},[109,164297,32651],{"class":133},[109,164299,34421],{"class":126},[109,164301,164302,164305,164307],{"class":111,"line":154},[109,164303,164304],{"class":126},"empty ",[109,164306,130],{"class":122},[109,164308,53013],{"class":126},[19,164310,164311],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164313,164315],{"id":164314},"_63-列表索引","6.3 列表索引",[19,164317,164318],{},"正向索引从 0 开始：",[99,164320,164322],{"className":31553,"code":164321,"language":31555,"meta":104,"style":104},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[106,164323,164324,164344,164348,164359,164369],{"__ignoreMap":104},[109,164325,164326,164328,164330,164332,164334,164336,164338,164340,164342],{"class":111,"line":112},[109,164327,161555],{"class":126},[109,164329,130],{"class":122},[109,164331,53401],{"class":126},[109,164333,151063],{"class":278},[109,164335,13608],{"class":126},[109,164337,152111],{"class":278},[109,164339,13608],{"class":126},[109,164341,160906],{"class":278},[109,164343,34421],{"class":126},[109,164345,164346],{"class":111,"line":119},[109,164347,158],{"emptyLinePlaceholder":157},[109,164349,164350,164352,164355,164357],{"class":111,"line":140},[109,164351,31590],{"class":133},[109,164353,164354],{"class":126},"(names[",[109,164356,1314],{"class":133},[109,164358,5994],{"class":126},[109,164360,164361,164363,164365,164367],{"class":111,"line":154},[109,164362,31590],{"class":133},[109,164364,164354],{"class":126},[109,164366,1755],{"class":133},[109,164368,5994],{"class":126},[109,164370,164371,164373,164375,164377],{"class":111,"line":161},[109,164372,31590],{"class":133},[109,164374,164354],{"class":126},[109,164376,1618],{"class":133},[109,164378,5994],{"class":126},[19,164380,164381],{},"反向索引从 -1 开始：",[99,164383,164385],{"className":31553,"code":164384,"language":31555,"meta":104,"style":104},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[106,164386,164387,164403],{"__ignoreMap":104},[109,164388,164389,164391,164393,164395,164397,164400],{"class":111,"line":112},[109,164390,31590],{"class":133},[109,164392,164354],{"class":126},[109,164394,2064],{"class":122},[109,164396,1755],{"class":133},[109,164398,164399],{"class":126},"])  ",[109,164401,164402],{"class":115},"# 小刚\n",[109,164404,164405,164407,164409,164411,164413,164415],{"class":111,"line":119},[109,164406,31590],{"class":133},[109,164408,164354],{"class":126},[109,164410,2064],{"class":122},[109,164412,1618],{"class":133},[109,164414,164399],{"class":126},[109,164416,164417],{"class":115},"# 小红\n",[19,164419,164420],{},"索引越界会报错：",[99,164422,164424],{"className":31553,"code":164423,"language":31555,"meta":104,"style":104},"print(names[3])\n",[106,164425,164426],{"__ignoreMap":104},[109,164427,164428,164430,164432,164434],{"class":111,"line":112},[109,164429,31590],{"class":133},[109,164431,164354],{"class":126},[109,164433,1612],{"class":133},[109,164435,5994],{"class":126},[14,164437,164439],{"id":164438},"_64-列表常用方法","6.4 列表常用方法",[99,164441,164443],{"className":31553,"code":164442,"language":31555,"meta":104,"style":104},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[106,164444,164445,164461,164465,164474,164488,164502,164506],{"__ignoreMap":104},[109,164446,164447,164449,164451,164453,164455,164457,164459],{"class":111,"line":112},[109,164448,161555],{"class":126},[109,164450,130],{"class":122},[109,164452,53401],{"class":126},[109,164454,151063],{"class":278},[109,164456,13608],{"class":126},[109,164458,152111],{"class":278},[109,164460,34421],{"class":126},[109,164462,164463],{"class":111,"line":119},[109,164464,158],{"emptyLinePlaceholder":157},[109,164466,164467,164470,164472],{"class":111,"line":140},[109,164468,164469],{"class":126},"names.append(",[109,164471,160906],{"class":278},[109,164473,1330],{"class":126},[109,164475,164476,164479,164481,164483,164486],{"class":111,"line":154},[109,164477,164478],{"class":126},"names.insert(",[109,164480,1755],{"class":133},[109,164482,13608],{"class":126},[109,164484,164485],{"class":278},"\"小李\"",[109,164487,1330],{"class":126},[109,164489,164490,164493,164495,164497,164500],{"class":111,"line":161},[109,164491,164492],{"class":126},"names.extend([",[109,164494,10002],{"class":278},[109,164496,13608],{"class":126},[109,164498,164499],{"class":278},"\"小赵\"",[109,164501,5994],{"class":126},[109,164503,164504],{"class":111,"line":167},[109,164505,158],{"emptyLinePlaceholder":157},[109,164507,164508,164510],{"class":111,"line":185},[109,164509,31590],{"class":133},[109,164511,164512],{"class":126},"(names)\n",[19,164514,164515],{},"删除元素：",[99,164517,164519],{"className":31553,"code":164518,"language":31555,"meta":104,"style":104},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[106,164520,164521,164530,164540,164554,164566],{"__ignoreMap":104},[109,164522,164523,164526,164528],{"class":111,"line":112},[109,164524,164525],{"class":126},"names.remove(",[109,164527,152111],{"class":278},[109,164529,1330],{"class":126},[109,164531,164532,164535,164537],{"class":111,"line":119},[109,164533,164534],{"class":126},"last ",[109,164536,130],{"class":122},[109,164538,164539],{"class":126}," names.pop()\n",[109,164541,164542,164545,164547,164550,164552],{"class":111,"line":140},[109,164543,164544],{"class":126},"first ",[109,164546,130],{"class":122},[109,164548,164549],{"class":126}," names.pop(",[109,164551,1314],{"class":133},[109,164553,1330],{"class":126},[109,164555,164556,164559,164562,164564],{"class":111,"line":154},[109,164557,164558],{"class":122},"del",[109,164560,164561],{"class":126}," names[",[109,164563,1314],{"class":133},[109,164565,34421],{"class":126},[109,164567,164568],{"class":111,"line":161},[109,164569,164570],{"class":126},"names.clear()\n",[19,164572,164573],{},"查询和统计：",[99,164575,164577],{"className":31553,"code":164576,"language":31555,"meta":104,"style":104},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[106,164578,164579,164607,164611,164622,164633],{"__ignoreMap":104},[109,164580,164581,164583,164585,164587,164589,164591,164593,164595,164597,164599,164601,164603,164605],{"class":111,"line":112},[109,164582,164258],{"class":126},[109,164584,130],{"class":122},[109,164586,53401],{"class":126},[109,164588,1755],{"class":133},[109,164590,13608],{"class":126},[109,164592,1618],{"class":133},[109,164594,13608],{"class":126},[109,164596,1612],{"class":133},[109,164598,13608],{"class":126},[109,164600,1618],{"class":133},[109,164602,13608],{"class":126},[109,164604,1831],{"class":133},[109,164606,34421],{"class":126},[109,164608,164609],{"class":111,"line":119},[109,164610,158],{"emptyLinePlaceholder":157},[109,164612,164613,164615,164618,164620],{"class":111,"line":140},[109,164614,31590],{"class":133},[109,164616,164617],{"class":126},"(numbers.index(",[109,164619,1612],{"class":133},[109,164621,31672],{"class":126},[109,164623,164624,164626,164629,164631],{"class":111,"line":154},[109,164625,31590],{"class":133},[109,164627,164628],{"class":126},"(numbers.count(",[109,164630,1618],{"class":133},[109,164632,31672],{"class":126},[109,164634,164635,164637,164639,164641],{"class":111,"line":161},[109,164636,31590],{"class":133},[109,164638,714],{"class":126},[109,164640,8684],{"class":133},[109,164642,164643],{"class":126},"(numbers))\n",[19,164645,164646],{},"排序：",[99,164648,164650],{"className":31553,"code":164649,"language":31555,"meta":104,"style":104},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[106,164651,164652,164676,164680,164685,164692,164696,164710,164716,164720,164725],{"__ignoreMap":104},[109,164653,164654,164656,164658,164660,164662,164664,164666,164668,164670,164672,164674],{"class":111,"line":112},[109,164655,164258],{"class":126},[109,164657,130],{"class":122},[109,164659,53401],{"class":126},[109,164661,1612],{"class":133},[109,164663,13608],{"class":126},[109,164665,1755],{"class":133},[109,164667,13608],{"class":126},[109,164669,1856],{"class":133},[109,164671,13608],{"class":126},[109,164673,1618],{"class":133},[109,164675,34421],{"class":126},[109,164677,164678],{"class":111,"line":119},[109,164679,158],{"emptyLinePlaceholder":157},[109,164681,164682],{"class":111,"line":140},[109,164683,164684],{"class":126},"numbers.sort()\n",[109,164686,164687,164689],{"class":111,"line":154},[109,164688,31590],{"class":133},[109,164690,164691],{"class":126},"(numbers)\n",[109,164693,164694],{"class":111,"line":161},[109,164695,158],{"emptyLinePlaceholder":157},[109,164697,164698,164701,164704,164706,164708],{"class":111,"line":167},[109,164699,164700],{"class":126},"numbers.sort(",[109,164702,164703],{"class":6553},"reverse",[109,164705,130],{"class":122},[109,164707,32651],{"class":133},[109,164709,1330],{"class":126},[109,164711,164712,164714],{"class":111,"line":185},[109,164713,31590],{"class":133},[109,164715,164691],{"class":126},[109,164717,164718],{"class":111,"line":201},[109,164719,158],{"emptyLinePlaceholder":157},[109,164721,164722],{"class":111,"line":206},[109,164723,164724],{"class":126},"numbers.reverse()\n",[109,164726,164727,164729],{"class":111,"line":218},[109,164728,31590],{"class":133},[109,164730,164691],{"class":126},[19,164732,164733,164736,164737,164740],{},[106,164734,164735],{},"sort()"," 会修改原列表，",[106,164738,164739],{},"sorted()"," 返回新列表。",[99,164742,164744],{"className":31553,"code":164743,"language":31555,"meta":104,"style":104},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[106,164745,164746,164770,164782,164786,164792],{"__ignoreMap":104},[109,164747,164748,164750,164752,164754,164756,164758,164760,164762,164764,164766,164768],{"class":111,"line":112},[109,164749,164258],{"class":126},[109,164751,130],{"class":122},[109,164753,53401],{"class":126},[109,164755,1612],{"class":133},[109,164757,13608],{"class":126},[109,164759,1755],{"class":133},[109,164761,13608],{"class":126},[109,164763,1856],{"class":133},[109,164765,13608],{"class":126},[109,164767,1618],{"class":133},[109,164769,34421],{"class":126},[109,164771,164772,164775,164777,164780],{"class":111,"line":119},[109,164773,164774],{"class":126},"new_numbers ",[109,164776,130],{"class":122},[109,164778,164779],{"class":133}," sorted",[109,164781,164691],{"class":126},[109,164783,164784],{"class":111,"line":140},[109,164785,158],{"emptyLinePlaceholder":157},[109,164787,164788,164790],{"class":111,"line":154},[109,164789,31590],{"class":133},[109,164791,164691],{"class":126},[109,164793,164794,164796],{"class":111,"line":161},[109,164795,31590],{"class":133},[109,164797,164798],{"class":126},"(new_numbers)\n",[14,164800,164802],{"id":164801},"_65-列表遍历","6.5 列表遍历",[99,164804,164806],{"className":31553,"code":164805,"language":31555,"meta":104,"style":104},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[106,164807,164808,164828,164832,164842],{"__ignoreMap":104},[109,164809,164810,164812,164814,164816,164818,164820,164822,164824,164826],{"class":111,"line":112},[109,164811,161555],{"class":126},[109,164813,130],{"class":122},[109,164815,53401],{"class":126},[109,164817,151063],{"class":278},[109,164819,13608],{"class":126},[109,164821,152111],{"class":278},[109,164823,13608],{"class":126},[109,164825,160906],{"class":278},[109,164827,34421],{"class":126},[109,164829,164830],{"class":111,"line":119},[109,164831,158],{"emptyLinePlaceholder":157},[109,164833,164834,164836,164838,164840],{"class":111,"line":140},[109,164835,4372],{"class":122},[109,164837,161591],{"class":126},[109,164839,27218],{"class":122},[109,164841,161596],{"class":126},[109,164843,164844,164846],{"class":111,"line":154},[109,164845,32474],{"class":133},[109,164847,151835],{"class":126},[19,164849,164850],{},"需要索引时：",[99,164852,164854],{"className":31553,"code":164853,"language":31555,"meta":104,"style":104},"for index, name in enumerate(names):\n    print(index, name)\n",[106,164855,164856,164870],{"__ignoreMap":104},[109,164857,164858,164860,164863,164865,164867],{"class":111,"line":112},[109,164859,4372],{"class":122},[109,164861,164862],{"class":126}," index, name ",[109,164864,27218],{"class":122},[109,164866,32781],{"class":133},[109,164868,164869],{"class":126},"(names):\n",[109,164871,164872,164874],{"class":111,"line":119},[109,164873,32474],{"class":133},[109,164875,164876],{"class":126},"(index, name)\n",[19,164878,164879],{},"统计总分：",[99,164881,164883],{"className":31553,"code":164882,"language":31555,"meta":104,"style":104},"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",[106,164884,164885,164910,164918,164922,164933,164941,164945,164962],{"__ignoreMap":104},[109,164886,164887,164890,164892,164894,164896,164898,164900,164902,164904,164906,164908],{"class":111,"line":112},[109,164888,164889],{"class":126},"scores ",[109,164891,130],{"class":122},[109,164893,53401],{"class":126},[109,164895,2394],{"class":133},[109,164897,13608],{"class":126},[109,164899,2268],{"class":133},[109,164901,13608],{"class":126},[109,164903,1792],{"class":133},[109,164905,13608],{"class":126},[109,164907,2093],{"class":133},[109,164909,34421],{"class":126},[109,164911,164912,164914,164916],{"class":111,"line":119},[109,164913,158435],{"class":126},[109,164915,130],{"class":122},[109,164917,48508],{"class":133},[109,164919,164920],{"class":111,"line":140},[109,164921,158],{"emptyLinePlaceholder":157},[109,164923,164924,164926,164928,164930],{"class":111,"line":154},[109,164925,4372],{"class":122},[109,164927,158958],{"class":126},[109,164929,27218],{"class":122},[109,164931,164932],{"class":126}," scores:\n",[109,164934,164935,164937,164939],{"class":111,"line":161},[109,164936,160482],{"class":126},[109,164938,10795],{"class":122},[109,164940,2967],{"class":126},[109,164942,164943],{"class":111,"line":167},[109,164944,158],{"emptyLinePlaceholder":157},[109,164946,164947,164950,164952,164955,164957,164959],{"class":111,"line":185},[109,164948,164949],{"class":126},"avg ",[109,164951,130],{"class":122},[109,164953,164954],{"class":126}," total ",[109,164956,2116],{"class":122},[109,164958,8657],{"class":133},[109,164960,164961],{"class":126},"(scores)\n",[109,164963,164964,164966,164968,164970,164973,164975,164978,164980,164982,164984],{"class":111,"line":201},[109,164965,31590],{"class":133},[109,164967,714],{"class":126},[109,164969,1595],{"class":122},[109,164971,164972],{"class":278},"\"平均分:",[109,164974,2427],{"class":133},[109,164976,164977],{"class":126},"avg",[109,164979,158334],{"class":122},[109,164981,2476],{"class":133},[109,164983,1789],{"class":278},[109,164985,1330],{"class":126},[14,164987,164989],{"id":164988},"_66-元组tuple","6.6 元组tuple",[19,164991,164992],{},"元组和列表类似，但不可修改。",[99,164994,164996],{"className":31553,"code":164995,"language":31555,"meta":104,"style":104},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[106,164997,164998,165015],{"__ignoreMap":104},[109,164999,165000,165003,165005,165007,165009,165011,165013],{"class":111,"line":112},[109,165001,165002],{"class":126},"point ",[109,165004,130],{"class":122},[109,165006,285],{"class":126},[109,165008,1008],{"class":133},[109,165010,13608],{"class":126},[109,165012,2232],{"class":133},[109,165014,1330],{"class":126},[109,165016,165017,165019,165021,165023,165025,165027,165029,165031,165033],{"class":111,"line":119},[109,165018,117489],{"class":126},[109,165020,130],{"class":122},[109,165022,285],{"class":126},[109,165024,151063],{"class":278},[109,165026,13608],{"class":126},[109,165028,2182],{"class":133},[109,165030,13608],{"class":126},[109,165032,70444],{"class":278},[109,165034,1330],{"class":126},[19,165036,165037],{},"单元素元组必须加逗号：",[99,165039,165041],{"className":31553,"code":165040,"language":31555,"meta":104,"style":104},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[106,165042,165043,165057,165070,165074,165088],{"__ignoreMap":104},[109,165044,165045,165048,165050,165052,165054],{"class":111,"line":112},[109,165046,165047],{"class":126},"t1 ",[109,165049,130],{"class":122},[109,165051,285],{"class":126},[109,165053,1008],{"class":133},[109,165055,165056],{"class":126},",)\n",[109,165058,165059,165062,165064,165066,165068],{"class":111,"line":119},[109,165060,165061],{"class":126},"t2 ",[109,165063,130],{"class":122},[109,165065,285],{"class":126},[109,165067,1008],{"class":133},[109,165069,1330],{"class":126},[109,165071,165072],{"class":111,"line":140},[109,165073,158],{"emptyLinePlaceholder":157},[109,165075,165076,165078,165080,165082,165085],{"class":111,"line":154},[109,165077,31590],{"class":133},[109,165079,714],{"class":126},[109,165081,104282],{"class":133},[109,165083,165084],{"class":126},"(t1))  ",[109,165086,165087],{"class":115},"# tuple\n",[109,165089,165090,165092,165094,165096,165099],{"class":111,"line":161},[109,165091,31590],{"class":133},[109,165093,714],{"class":126},[109,165095,104282],{"class":133},[109,165097,165098],{"class":126},"(t2))  ",[109,165100,165101],{"class":115},"# int\n",[19,165103,165104],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165106,165108],{"id":165107},"_67-字符串str","6.7 字符串str",[19,165110,165111],{},"字符串也是序列，可以索引、切片和遍历。",[99,165113,165115],{"className":31553,"code":165114,"language":31555,"meta":104,"style":104},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[106,165116,165117,165125,165129,165140,165152,165156,165167],{"__ignoreMap":104},[109,165118,165119,165121,165123],{"class":111,"line":112},[109,165120,157619],{"class":126},[109,165122,130],{"class":122},[109,165124,160856],{"class":278},[109,165126,165127],{"class":111,"line":119},[109,165128,158],{"emptyLinePlaceholder":157},[109,165130,165131,165133,165136,165138],{"class":111,"line":140},[109,165132,31590],{"class":133},[109,165134,165135],{"class":126},"(text[",[109,165137,1314],{"class":133},[109,165139,5994],{"class":126},[109,165141,165142,165144,165146,165148,165150],{"class":111,"line":154},[109,165143,31590],{"class":133},[109,165145,165135],{"class":126},[109,165147,2064],{"class":122},[109,165149,1755],{"class":133},[109,165151,5994],{"class":126},[109,165153,165154],{"class":111,"line":161},[109,165155,158],{"emptyLinePlaceholder":157},[109,165157,165158,165160,165162,165164],{"class":111,"line":167},[109,165159,4372],{"class":122},[109,165161,160867],{"class":126},[109,165163,27218],{"class":122},[109,165165,165166],{"class":126}," text:\n",[109,165168,165169,165171],{"class":111,"line":185},[109,165170,32474],{"class":133},[109,165172,160878],{"class":126},[19,165174,165175],{},"字符串不可变：",[99,165177,165179],{"className":31553,"code":165178,"language":31555,"meta":104,"style":104},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[106,165180,165181,165189],{"__ignoreMap":104},[109,165182,165183,165185,165187],{"class":111,"line":112},[109,165184,157619],{"class":126},[109,165186,130],{"class":122},[109,165188,160856],{"class":278},[109,165190,165191,165194,165196,165198,165200,165203],{"class":111,"line":119},[109,165192,165193],{"class":126},"text[",[109,165195,1314],{"class":133},[109,165197,5780],{"class":126},[109,165199,130],{"class":122},[109,165201,165202],{"class":278}," \"P\"",[109,165204,165205],{"class":115},"  # 报错\n",[19,165207,165208],{},"如果要得到新字符串：",[99,165210,165212],{"className":31553,"code":165211,"language":31555,"meta":104,"style":104},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[106,165213,165214,165222,165240],{"__ignoreMap":104},[109,165215,165216,165218,165220],{"class":111,"line":112},[109,165217,157619],{"class":126},[109,165219,130],{"class":122},[109,165221,160856],{"class":278},[109,165223,165224,165226,165228,165230,165232,165235,165237],{"class":111,"line":119},[109,165225,157619],{"class":126},[109,165227,130],{"class":122},[109,165229,165202],{"class":278},[109,165231,46741],{"class":122},[109,165233,165234],{"class":126}," text[",[109,165236,1755],{"class":133},[109,165238,165239],{"class":126},":]\n",[109,165241,165242,165244],{"class":111,"line":140},[109,165243,31590],{"class":133},[109,165245,165246],{"class":126},"(text)\n",[14,165248,165250],{"id":165249},"_68-切片","6.8 切片",[19,165252,165253],{},"切片用于从序列中取一部分。",[99,165255,165257],{"className":31553,"code":165256,"language":31555,"meta":104,"style":104},"序列[开始:结束:步长]\n",[106,165258,165259],{"__ignoreMap":104},[109,165260,165261],{"class":111,"line":112},[109,165262,165256],{"class":126},[19,165264,165265],{},"结束位置不包含。",[99,165267,165269],{"className":31553,"code":165268,"language":31555,"meta":104,"style":104},"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",[106,165270,165271,165308,165312,165331,165346,165360,165374],{"__ignoreMap":104},[109,165272,165273,165276,165278,165280,165282,165284,165286,165288,165290,165292,165294,165296,165298,165300,165302,165304,165306],{"class":111,"line":112},[109,165274,165275],{"class":126},"nums ",[109,165277,130],{"class":122},[109,165279,53401],{"class":126},[109,165281,1314],{"class":133},[109,165283,13608],{"class":126},[109,165285,1755],{"class":133},[109,165287,13608],{"class":126},[109,165289,1618],{"class":133},[109,165291,13608],{"class":126},[109,165293,1612],{"class":133},[109,165295,13608],{"class":126},[109,165297,1831],{"class":133},[109,165299,13608],{"class":126},[109,165301,1856],{"class":133},[109,165303,13608],{"class":126},[109,165305,1881],{"class":133},[109,165307,34421],{"class":126},[109,165309,165310],{"class":111,"line":119},[109,165311,158],{"emptyLinePlaceholder":157},[109,165313,165314,165316,165319,165321,165323,165325,165328],{"class":111,"line":140},[109,165315,31590],{"class":133},[109,165317,165318],{"class":126},"(nums[",[109,165320,1755],{"class":133},[109,165322,2391],{"class":126},[109,165324,1831],{"class":133},[109,165326,165327],{"class":126},"])    ",[109,165329,165330],{"class":115},"# [1, 2, 3]\n",[109,165332,165333,165335,165338,165340,165343],{"class":111,"line":154},[109,165334,31590],{"class":133},[109,165336,165337],{"class":126},"(nums[:",[109,165339,1612],{"class":133},[109,165341,165342],{"class":126},"])     ",[109,165344,165345],{"class":115},"# [0, 1, 2]\n",[109,165347,165348,165350,165352,165354,165357],{"class":111,"line":161},[109,165349,31590],{"class":133},[109,165351,165318],{"class":126},[109,165353,1612],{"class":133},[109,165355,165356],{"class":126},":])     ",[109,165358,165359],{"class":115},"# [3, 4, 5, 6]\n",[109,165361,165362,165364,165367,165369,165371],{"class":111,"line":167},[109,165363,31590],{"class":133},[109,165365,165366],{"class":126},"(nums[::",[109,165368,1618],{"class":133},[109,165370,165327],{"class":126},[109,165372,165373],{"class":115},"# [0, 2, 4, 6]\n",[109,165375,165376,165378,165380,165382,165384,165387],{"class":111,"line":185},[109,165377,31590],{"class":133},[109,165379,165366],{"class":126},[109,165381,2064],{"class":122},[109,165383,1755],{"class":133},[109,165385,165386],{"class":126},"])   ",[109,165388,165389],{"class":115},"# 反转\n",[19,165391,165392],{},"字符串切片：",[99,165394,165396],{"className":31553,"code":165395,"language":31555,"meta":104,"style":104},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[106,165397,165398,165407,165421],{"__ignoreMap":104},[109,165399,165400,165402,165404],{"class":111,"line":112},[109,165401,157619],{"class":126},[109,165403,130],{"class":122},[109,165405,165406],{"class":278}," \"abcdef\"\n",[109,165408,165409,165411,165413,165415,165417,165419],{"class":111,"line":119},[109,165410,31590],{"class":133},[109,165412,165135],{"class":126},[109,165414,1755],{"class":133},[109,165416,2391],{"class":126},[109,165418,1831],{"class":133},[109,165420,5994],{"class":126},[109,165422,165423,165425,165428,165430,165432],{"class":111,"line":140},[109,165424,31590],{"class":133},[109,165426,165427],{"class":126},"(text[::",[109,165429,2064],{"class":122},[109,165431,1755],{"class":133},[109,165433,5994],{"class":126},[14,165435,165437],{"id":165436},"_69-集合set","6.9 集合set",[19,165439,165440],{},"集合特点：",[765,165442,165443,165446,165449],{},[30,165444,165445],{},"无序。",[30,165447,165448],{},"元素不重复。",[30,165450,165451],{},"可以做交集、并集、差集。",[99,165453,165455],{"className":31553,"code":165454,"language":31555,"meta":104,"style":104},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[106,165456,165457,165485],{"__ignoreMap":104},[109,165458,165459,165461,165463,165465,165467,165469,165471,165473,165475,165477,165479,165481,165483],{"class":111,"line":112},[109,165460,165275],{"class":126},[109,165462,130],{"class":122},[109,165464,5785],{"class":126},[109,165466,1755],{"class":133},[109,165468,13608],{"class":126},[109,165470,1618],{"class":133},[109,165472,13608],{"class":126},[109,165474,1612],{"class":133},[109,165476,13608],{"class":126},[109,165478,1612],{"class":133},[109,165480,13608],{"class":126},[109,165482,1831],{"class":133},[109,165484,742],{"class":126},[109,165486,165487,165489],{"class":111,"line":119},[109,165488,31590],{"class":133},[109,165490,165491],{"class":126},"(nums)\n",[19,165493,165494],{},"创建空集合：",[99,165496,165498],{"className":31553,"code":165497,"language":31555,"meta":104,"style":104},"s = set()\n",[106,165499,165500],{"__ignoreMap":104},[109,165501,165502,165504,165506,165508],{"class":111,"line":112},[109,165503,11897],{"class":126},[109,165505,130],{"class":122},[109,165507,120897],{"class":133},[109,165509,803],{"class":126},[19,165511,10343,165512,165514],{},[106,165513,33634],{}," 是空字典，不是空集合。",[19,165516,165517],{},"集合常用操作：",[99,165519,165521],{"className":31553,"code":165520,"language":31555,"meta":104,"style":104},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[106,165522,165523,165543,165547,165556,165565,165574],{"__ignoreMap":104},[109,165524,165525,165527,165529,165531,165533,165535,165537,165539,165541],{"class":111,"line":112},[109,165526,11897],{"class":126},[109,165528,130],{"class":122},[109,165530,5785],{"class":126},[109,165532,1755],{"class":133},[109,165534,13608],{"class":126},[109,165536,1618],{"class":133},[109,165538,13608],{"class":126},[109,165540,1612],{"class":133},[109,165542,742],{"class":126},[109,165544,165545],{"class":111,"line":119},[109,165546,158],{"emptyLinePlaceholder":157},[109,165548,165549,165552,165554],{"class":111,"line":140},[109,165550,165551],{"class":126},"s.add(",[109,165553,1831],{"class":133},[109,165555,1330],{"class":126},[109,165557,165558,165561,165563],{"class":111,"line":154},[109,165559,165560],{"class":126},"s.remove(",[109,165562,1618],{"class":133},[109,165564,1330],{"class":126},[109,165566,165567,165570,165572],{"class":111,"line":161},[109,165568,165569],{"class":126},"s.discard(",[109,165571,1008],{"class":133},[109,165573,1330],{"class":126},[109,165575,165576,165578,165580,165582],{"class":111,"line":167},[109,165577,31590],{"class":133},[109,165579,714],{"class":126},[109,165581,8684],{"class":133},[109,165583,165584],{"class":126},"(s))\n",[19,165586,165587],{},"交并差：",[99,165589,165591],{"className":31553,"code":165590,"language":31555,"meta":104,"style":104},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[106,165592,165593,165613,165633,165637,165652,165665],{"__ignoreMap":104},[109,165594,165595,165597,165599,165601,165603,165605,165607,165609,165611],{"class":111,"line":112},[109,165596,296],{"class":126},[109,165598,130],{"class":122},[109,165600,5785],{"class":126},[109,165602,1755],{"class":133},[109,165604,13608],{"class":126},[109,165606,1618],{"class":133},[109,165608,13608],{"class":126},[109,165610,1612],{"class":133},[109,165612,742],{"class":126},[109,165614,165615,165617,165619,165621,165623,165625,165627,165629,165631],{"class":111,"line":119},[109,165616,324],{"class":126},[109,165618,130],{"class":122},[109,165620,5785],{"class":126},[109,165622,1612],{"class":133},[109,165624,13608],{"class":126},[109,165626,1831],{"class":133},[109,165628,13608],{"class":126},[109,165630,1856],{"class":133},[109,165632,742],{"class":126},[109,165634,165635],{"class":111,"line":140},[109,165636,158],{"emptyLinePlaceholder":157},[109,165638,165639,165641,165644,165646,165649],{"class":111,"line":154},[109,165640,31590],{"class":133},[109,165642,165643],{"class":126},"(a ",[109,165645,293],{"class":122},[109,165647,165648],{"class":126}," b)  ",[109,165650,165651],{"class":115},"# 交集\n",[109,165653,165654,165656,165658,165660,165662],{"class":111,"line":161},[109,165655,31590],{"class":133},[109,165657,165643],{"class":126},[109,165659,2451],{"class":122},[109,165661,165648],{"class":126},[109,165663,165664],{"class":115},"# 并集\n",[109,165666,165667,165669,165671,165673,165675],{"class":111,"line":167},[109,165668,31590],{"class":133},[109,165670,165643],{"class":126},[109,165672,2064],{"class":122},[109,165674,165648],{"class":126},[109,165676,165677],{"class":115},"# 差集\n",[14,165679,165681],{"id":165680},"_610-字典dict","6.10 字典dict",[19,165683,165684],{},"字典通过 key-value 保存数据。",[99,165686,165688],{"className":31553,"code":165687,"language":31555,"meta":104,"style":104},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[106,165689,165690,165698,165708,165719,165729],{"__ignoreMap":104},[109,165691,165692,165694,165696],{"class":111,"line":112},[109,165693,150656],{"class":126},[109,165695,130],{"class":122},[109,165697,16745],{"class":126},[109,165699,165700,165702,165704,165706],{"class":111,"line":119},[109,165701,148195],{"class":278},[109,165703,52612],{"class":126},[109,165705,151063],{"class":278},[109,165707,32641],{"class":126},[109,165709,165710,165713,165715,165717],{"class":111,"line":140},[109,165711,165712],{"class":278},"    \"age\"",[109,165714,52612],{"class":126},[109,165716,2182],{"class":133},[109,165718,32641],{"class":126},[109,165720,165721,165724,165726],{"class":111,"line":154},[109,165722,165723],{"class":278},"    \"score\"",[109,165725,52612],{"class":126},[109,165727,165728],{"class":133},"95\n",[109,165730,165731],{"class":111,"line":161},[109,165732,742],{"class":126},[19,165734,165735],{},"获取值：",[99,165737,165739],{"className":31553,"code":165738,"language":31555,"meta":104,"style":104},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[106,165740,165741,165752],{"__ignoreMap":104},[109,165742,165743,165745,165748,165750],{"class":111,"line":112},[109,165744,31590],{"class":133},[109,165746,165747],{"class":126},"(student[",[109,165749,63854],{"class":278},[109,165751,5994],{"class":126},[109,165753,165754,165756,165759,165761],{"class":111,"line":119},[109,165755,31590],{"class":133},[109,165757,165758],{"class":126},"(student.get(",[109,165760,63854],{"class":278},[109,165762,31672],{"class":126},[19,165764,16561],{},[99,165766,165768],{"className":31553,"code":165767,"language":31555,"meta":104,"style":104},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[106,165769,165770,165783],{"__ignoreMap":104},[109,165771,165772,165774,165777,165780],{"class":111,"line":112},[109,165773,154034],{"class":126},[109,165775,165776],{"class":278},"\"address\"",[109,165778,165779],{"class":126},"]     ",[109,165781,165782],{"class":115},"# key不存在会报错\n",[109,165784,165785,165788,165790,165792],{"class":111,"line":119},[109,165786,165787],{"class":126},"student.get(",[109,165789,165776],{"class":278},[109,165791,14887],{"class":126},[109,165793,165794],{"class":115},"# key不存在返回None\n",[19,165796,165797],{},"设置默认值：",[99,165799,165801],{"className":31553,"code":165800,"language":31555,"meta":104,"style":104},"print(student.get(\"address\", \"未知\"))\n",[106,165802,165803],{"__ignoreMap":104},[109,165804,165805,165807,165809,165811,165813,165816],{"class":111,"line":112},[109,165806,31590],{"class":133},[109,165808,165758],{"class":126},[109,165810,165776],{"class":278},[109,165812,13608],{"class":126},[109,165814,165815],{"class":278},"\"未知\"",[109,165817,31672],{"class":126},[19,165819,165820],{},"新增和修改：",[99,165822,165824],{"className":31553,"code":165823,"language":31555,"meta":104,"style":104},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[106,165825,165826,165839],{"__ignoreMap":104},[109,165827,165828,165830,165832,165834,165836],{"class":111,"line":112},[109,165829,154034],{"class":126},[109,165831,70299],{"class":278},[109,165833,5780],{"class":126},[109,165835,130],{"class":122},[109,165837,165838],{"class":133}," 19\n",[109,165840,165841,165843,165845,165847,165849],{"class":111,"line":119},[109,165842,154034],{"class":126},[109,165844,165776],{"class":278},[109,165846,5780],{"class":126},[109,165848,130],{"class":122},[109,165850,165851],{"class":278}," \"北京\"\n",[19,165853,165854],{},"删除：",[99,165856,165858],{"className":31553,"code":165857,"language":31555,"meta":104,"style":104},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[106,165859,165860,165873,165883],{"__ignoreMap":104},[109,165861,165862,165864,165866,165869,165871],{"class":111,"line":112},[109,165863,156533],{"class":126},[109,165865,130],{"class":122},[109,165867,165868],{"class":126}," student.pop(",[109,165870,152647],{"class":278},[109,165872,1330],{"class":126},[109,165874,165875,165877,165879,165881],{"class":111,"line":119},[109,165876,164558],{"class":122},[109,165878,153324],{"class":126},[109,165880,70299],{"class":278},[109,165882,34421],{"class":126},[109,165884,165885],{"class":111,"line":140},[109,165886,165887],{"class":126},"student.clear()\n",[14,165889,165891],{"id":165890},"_611-字典遍历","6.11 字典遍历",[19,165893,165894],{},"遍历 key：",[99,165896,165898],{"className":31553,"code":165897,"language":31555,"meta":104,"style":104},"for key in student:\n    print(key, student[key])\n",[106,165899,165900,165912],{"__ignoreMap":104},[109,165901,165902,165904,165907,165909],{"class":111,"line":112},[109,165903,4372],{"class":122},[109,165905,165906],{"class":126}," key ",[109,165908,27218],{"class":122},[109,165910,165911],{"class":126}," student:\n",[109,165913,165914,165916],{"class":111,"line":119},[109,165915,32474],{"class":133},[109,165917,165918],{"class":126},"(key, student[key])\n",[19,165920,165921],{},"遍历 value：",[99,165923,165925],{"className":31553,"code":165924,"language":31555,"meta":104,"style":104},"for value in student.values():\n    print(value)\n",[106,165926,165927,165939],{"__ignoreMap":104},[109,165928,165929,165931,165934,165936],{"class":111,"line":112},[109,165930,4372],{"class":122},[109,165932,165933],{"class":126}," value ",[109,165935,27218],{"class":122},[109,165937,165938],{"class":126}," student.values():\n",[109,165940,165941,165943],{"class":111,"line":119},[109,165942,32474],{"class":133},[109,165944,165945],{"class":126},"(value)\n",[19,165947,165948],{},"遍历 key 和 value：",[99,165950,165952],{"className":31553,"code":165951,"language":31555,"meta":104,"style":104},"for key, value in student.items():\n    print(key, value)\n",[106,165953,165954,165966],{"__ignoreMap":104},[109,165955,165956,165958,165961,165963],{"class":111,"line":112},[109,165957,4372],{"class":122},[109,165959,165960],{"class":126}," key, value ",[109,165962,27218],{"class":122},[109,165964,165965],{"class":126}," student.items():\n",[109,165967,165968,165970],{"class":111,"line":119},[109,165969,32474],{"class":133},[109,165971,165972],{"class":126},"(key, value)\n",[14,165974,165976],{"id":165975},"_612-嵌套容器","6.12 嵌套容器",[19,165978,165979],{},"列表中保存字典，是项目中最常见的结构之一。",[99,165981,165983],{"className":31553,"code":165982,"language":31555,"meta":104,"style":104},"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",[106,165984,165985,165993,166021,166049,166077,166081,166085,166095],{"__ignoreMap":104},[109,165986,165987,165989,165991],{"class":111,"line":112},[109,165988,160891],{"class":126},[109,165990,130],{"class":122},[109,165992,56622],{"class":126},[109,165994,165995,165997,165999,166001,166003,166005,166007,166009,166011,166013,166015,166017,166019],{"class":111,"line":119},[109,165996,149560],{"class":126},[109,165998,63854],{"class":278},[109,166000,52612],{"class":126},[109,166002,151063],{"class":278},[109,166004,13608],{"class":126},[109,166006,70299],{"class":278},[109,166008,52612],{"class":126},[109,166010,2182],{"class":133},[109,166012,13608],{"class":126},[109,166014,152647],{"class":278},[109,166016,52612],{"class":126},[109,166018,2519],{"class":133},[109,166020,6267],{"class":126},[109,166022,166023,166025,166027,166029,166031,166033,166035,166037,166039,166041,166043,166045,166047],{"class":111,"line":140},[109,166024,149560],{"class":126},[109,166026,63854],{"class":278},[109,166028,52612],{"class":126},[109,166030,152111],{"class":278},[109,166032,13608],{"class":126},[109,166034,70299],{"class":278},[109,166036,52612],{"class":126},[109,166038,2157],{"class":133},[109,166040,13608],{"class":126},[109,166042,152647],{"class":278},[109,166044,52612],{"class":126},[109,166046,2343],{"class":133},[109,166048,6267],{"class":126},[109,166050,166051,166053,166055,166057,166059,166061,166063,166065,166067,166069,166071,166073,166075],{"class":111,"line":154},[109,166052,149560],{"class":126},[109,166054,63854],{"class":278},[109,166056,52612],{"class":126},[109,166058,160906],{"class":278},[109,166060,13608],{"class":126},[109,166062,70299],{"class":278},[109,166064,52612],{"class":126},[109,166066,2207],{"class":133},[109,166068,13608],{"class":126},[109,166070,152647],{"class":278},[109,166072,52612],{"class":126},[109,166074,1942],{"class":133},[109,166076,6267],{"class":126},[109,166078,166079],{"class":111,"line":161},[109,166080,34421],{"class":126},[109,166082,166083],{"class":111,"line":167},[109,166084,158],{"emptyLinePlaceholder":157},[109,166086,166087,166089,166091,166093],{"class":111,"line":185},[109,166088,4372],{"class":122},[109,166090,153312],{"class":126},[109,166092,27218],{"class":122},[109,166094,153317],{"class":126},[109,166096,166097,166099,166101,166103,166106,166108],{"class":111,"line":201},[109,166098,32474],{"class":133},[109,166100,165747],{"class":126},[109,166102,63854],{"class":278},[109,166104,166105],{"class":126},"], student[",[109,166107,152647],{"class":278},[109,166109,5994],{"class":126},[19,166111,166112],{},"统计平均分：",[99,166114,166116],{"className":31553,"code":166115,"language":31555,"meta":104,"style":104},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[106,166117,166118,166126,166130,166140,166152,166156,166171],{"__ignoreMap":104},[109,166119,166120,166122,166124],{"class":111,"line":112},[109,166121,158435],{"class":126},[109,166123,130],{"class":122},[109,166125,48508],{"class":133},[109,166127,166128],{"class":111,"line":119},[109,166129,158],{"emptyLinePlaceholder":157},[109,166131,166132,166134,166136,166138],{"class":111,"line":140},[109,166133,4372],{"class":122},[109,166135,153312],{"class":126},[109,166137,27218],{"class":122},[109,166139,153317],{"class":126},[109,166141,166142,166144,166146,166148,166150],{"class":111,"line":154},[109,166143,160482],{"class":126},[109,166145,10795],{"class":122},[109,166147,153324],{"class":126},[109,166149,152647],{"class":278},[109,166151,34421],{"class":126},[109,166153,166154],{"class":111,"line":161},[109,166155,158],{"emptyLinePlaceholder":157},[109,166157,166158,166160,166162,166164,166166,166168],{"class":111,"line":167},[109,166159,164949],{"class":126},[109,166161,130],{"class":122},[109,166163,164954],{"class":126},[109,166165,2116],{"class":122},[109,166167,8657],{"class":133},[109,166169,166170],{"class":126},"(students)\n",[109,166172,166173,166175,166177,166179,166181,166183,166185,166187,166189,166191],{"class":111,"line":185},[109,166174,31590],{"class":133},[109,166176,714],{"class":126},[109,166178,1595],{"class":122},[109,166180,164972],{"class":278},[109,166182,2427],{"class":133},[109,166184,164977],{"class":126},[109,166186,158334],{"class":122},[109,166188,2476],{"class":133},[109,166190,1789],{"class":278},[109,166192,1330],{"class":126},[19,166194,166195],{},"查找学生：",[99,166197,166199],{"className":31553,"code":166198,"language":31555,"meta":104,"style":104},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[106,166200,166201,166216,166220,166230,166244,166250,166254,166260],{"__ignoreMap":104},[109,166202,166203,166205,166207,166209,166211,166214],{"class":111,"line":112},[109,166204,112753],{"class":126},[109,166206,130],{"class":122},[109,166208,61780],{"class":133},[109,166210,714],{"class":126},[109,166212,166213],{"class":278},"\"请输入学生姓名:\"",[109,166215,1330],{"class":126},[109,166217,166218],{"class":111,"line":119},[109,166219,158],{"emptyLinePlaceholder":157},[109,166221,166222,166224,166226,166228],{"class":111,"line":140},[109,166223,4372],{"class":122},[109,166225,153312],{"class":126},[109,166227,27218],{"class":122},[109,166229,153317],{"class":126},[109,166231,166232,166234,166236,166238,166240,166242],{"class":111,"line":154},[109,166233,4446],{"class":122},[109,166235,153324],{"class":126},[109,166237,63854],{"class":278},[109,166239,5780],{"class":126},[109,166241,4296],{"class":122},[109,166243,161607],{"class":126},[109,166245,166246,166248],{"class":111,"line":161},[109,166247,33626],{"class":133},[109,166249,151217],{"class":126},[109,166251,166252],{"class":111,"line":167},[109,166253,32802],{"class":122},[109,166255,166256,166258],{"class":111,"line":185},[109,166257,3077],{"class":122},[109,166259,5082],{"class":126},[109,166261,166262,166264,166266,166269],{"class":111,"line":201},[109,166263,32474],{"class":133},[109,166265,714],{"class":126},[109,166267,166268],{"class":278},"\"没有找到\"",[109,166270,1330],{"class":126},[14,166272,166274],{"id":166273},"_613-容器通用操作","6.13 容器通用操作",[19,166276,166277],{},"长度：",[99,166279,166281],{"className":31553,"code":166280,"language":31555,"meta":104,"style":104},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[106,166282,166283,166302,166312],{"__ignoreMap":104},[109,166284,166285,166287,166290,166292,166294,166296,166298,166300],{"class":111,"line":112},[109,166286,8684],{"class":133},[109,166288,166289],{"class":126},"([",[109,166291,1755],{"class":133},[109,166293,13608],{"class":126},[109,166295,1618],{"class":133},[109,166297,13608],{"class":126},[109,166299,1612],{"class":133},[109,166301,5994],{"class":126},[109,166303,166304,166306,166308,166310],{"class":111,"line":119},[109,166305,8684],{"class":133},[109,166307,714],{"class":126},[109,166309,157055],{"class":278},[109,166311,1330],{"class":126},[109,166313,166314,166316,166319,166321,166323,166325],{"class":111,"line":140},[109,166315,8684],{"class":133},[109,166317,166318],{"class":126},"({",[109,166320,63854],{"class":278},[109,166322,52612],{"class":126},[109,166324,151063],{"class":278},[109,166326,166327],{"class":126},"})\n",[19,166329,166330],{},"最大最小：",[99,166332,166334],{"className":31553,"code":166333,"language":31555,"meta":104,"style":104},"max([1, 2, 3])\nmin([1, 2, 3])\n",[106,166335,166336,166354],{"__ignoreMap":104},[109,166337,166338,166340,166342,166344,166346,166348,166350,166352],{"class":111,"line":112},[109,166339,7345],{"class":133},[109,166341,166289],{"class":126},[109,166343,1755],{"class":133},[109,166345,13608],{"class":126},[109,166347,1618],{"class":133},[109,166349,13608],{"class":126},[109,166351,1612],{"class":133},[109,166353,5994],{"class":126},[109,166355,166356,166359,166361,166363,166365,166367,166369,166371],{"class":111,"line":119},[109,166357,166358],{"class":133},"min",[109,166360,166289],{"class":126},[109,166362,1755],{"class":133},[109,166364,13608],{"class":126},[109,166366,1618],{"class":133},[109,166368,13608],{"class":126},[109,166370,1612],{"class":133},[109,166372,5994],{"class":126},[19,166374,166375],{},"求和：",[99,166377,166379],{"className":31553,"code":166378,"language":31555,"meta":104,"style":104},"sum([1, 2, 3])\n",[106,166380,166381],{"__ignoreMap":104},[109,166382,166383,166386,166388,166390,166392,166394,166396,166398],{"class":111,"line":112},[109,166384,166385],{"class":133},"sum",[109,166387,166289],{"class":126},[109,166389,1755],{"class":133},[109,166391,13608],{"class":126},[109,166393,1618],{"class":133},[109,166395,13608],{"class":126},[109,166397,1612],{"class":133},[109,166399,5994],{"class":126},[19,166401,164646],{},[99,166403,166405],{"className":31553,"code":166404,"language":31555,"meta":104,"style":104},"sorted([3, 1, 2])\n",[106,166406,166407],{"__ignoreMap":104},[109,166408,166409,166412,166414,166416,166418,166420,166422,166424],{"class":111,"line":112},[109,166410,166411],{"class":133},"sorted",[109,166413,166289],{"class":126},[109,166415,1612],{"class":133},[109,166417,13608],{"class":126},[109,166419,1755],{"class":133},[109,166421,13608],{"class":126},[109,166423,1618],{"class":133},[109,166425,5994],{"class":126},[19,166427,166428],{},"类型转换：",[99,166430,166432],{"className":31553,"code":166431,"language":31555,"meta":104,"style":104},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[106,166433,166434,166444,166462],{"__ignoreMap":104},[109,166435,166436,166438,166440,166442],{"class":111,"line":112},[109,166437,155245],{"class":133},[109,166439,714],{"class":126},[109,166441,157055],{"class":278},[109,166443,1330],{"class":126},[109,166445,166446,166448,166450,166452,166454,166456,166458,166460],{"class":111,"line":119},[109,166447,156440],{"class":133},[109,166449,166289],{"class":126},[109,166451,1755],{"class":133},[109,166453,13608],{"class":126},[109,166455,1618],{"class":133},[109,166457,13608],{"class":126},[109,166459,1612],{"class":133},[109,166461,5994],{"class":126},[109,166463,166464,166466,166468,166470,166472,166474,166476,166478,166480,166482],{"class":111,"line":140},[109,166465,156465],{"class":133},[109,166467,166289],{"class":126},[109,166469,1755],{"class":133},[109,166471,13608],{"class":126},[109,166473,1755],{"class":133},[109,166475,13608],{"class":126},[109,166477,1618],{"class":133},[109,166479,13608],{"class":126},[109,166481,1612],{"class":133},[109,166483,5994],{"class":126},[19,166485,166486],{},"成员判断：",[99,166488,166490],{"className":31553,"code":166489,"language":31555,"meta":104,"style":104},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[106,166491,166492,166509,166533],{"__ignoreMap":104},[109,166493,166494,166496,166498,166501,166504,166507],{"class":111,"line":112},[109,166495,31590],{"class":133},[109,166497,714],{"class":126},[109,166499,166500],{"class":278},"\"a\"",[109,166502,166503],{"class":122}," in",[109,166505,166506],{"class":278}," \"abc\"",[109,166508,1330],{"class":126},[109,166510,166511,166513,166515,166517,166519,166521,166523,166525,166527,166529,166531],{"class":111,"line":119},[109,166512,31590],{"class":133},[109,166514,714],{"class":126},[109,166516,1755],{"class":133},[109,166518,166503],{"class":122},[109,166520,53401],{"class":126},[109,166522,1755],{"class":133},[109,166524,13608],{"class":126},[109,166526,1618],{"class":133},[109,166528,13608],{"class":126},[109,166530,1612],{"class":133},[109,166532,5994],{"class":126},[109,166534,166535,166537,166539,166541,166543,166545,166547,166549,166551],{"class":111,"line":140},[109,166536,31590],{"class":133},[109,166538,714],{"class":126},[109,166540,63854],{"class":278},[109,166542,166503],{"class":122},[109,166544,5785],{"class":126},[109,166546,63854],{"class":278},[109,166548,52612],{"class":126},[109,166550,151063],{"class":278},[109,166552,166327],{"class":126},[14,166554,166556],{"id":166555},"_614-推导式","6.14 推导式",[19,166558,166559],{},"推导式用于快速生成容器。",[19,166561,166562],{},"列表推导式：",[99,166564,166566],{"className":31553,"code":166565,"language":31555,"meta":104,"style":104},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[106,166567,166568,166595],{"__ignoreMap":104},[109,166569,166570,166572,166574,166577,166579,166581,166583,166585,166587,166589,166591,166593],{"class":111,"line":112},[109,166571,165275],{"class":126},[109,166573,130],{"class":122},[109,166575,166576],{"class":126}," [i ",[109,166578,4372],{"class":122},[109,166580,10756],{"class":126},[109,166582,27218],{"class":122},[109,166584,33618],{"class":133},[109,166586,714],{"class":126},[109,166588,1755],{"class":133},[109,166590,13608],{"class":126},[109,166592,1881],{"class":133},[109,166594,98475],{"class":126},[109,166596,166597,166599],{"class":111,"line":119},[109,166598,31590],{"class":133},[109,166600,165491],{"class":126},[19,166602,166603],{},"带条件：",[99,166605,166607],{"className":31553,"code":166606,"language":31555,"meta":104,"style":104},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[106,166608,166609,166650],{"__ignoreMap":104},[109,166610,166611,166614,166616,166618,166620,166622,166624,166626,166628,166630,166632,166634,166636,166638,166640,166642,166644,166646,166648],{"class":111,"line":112},[109,166612,166613],{"class":126},"even_nums ",[109,166615,130],{"class":122},[109,166617,166576],{"class":126},[109,166619,4372],{"class":122},[109,166621,10756],{"class":126},[109,166623,27218],{"class":122},[109,166625,33618],{"class":133},[109,166627,714],{"class":126},[109,166629,1755],{"class":133},[109,166631,13608],{"class":126},[109,166633,1874],{"class":133},[109,166635,14887],{"class":126},[109,166637,2922],{"class":122},[109,166639,10756],{"class":126},[109,166641,1865],{"class":122},[109,166643,15928],{"class":133},[109,166645,102734],{"class":122},[109,166647,734],{"class":133},[109,166649,34421],{"class":126},[109,166651,166652,166654],{"class":111,"line":119},[109,166653,31590],{"class":133},[109,166655,166656],{"class":126},"(even_nums)\n",[19,166658,166659],{},"字典推导式：",[99,166661,166663],{"className":31553,"code":166662,"language":31555,"meta":104,"style":104},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[106,166664,166665,166699],{"__ignoreMap":104},[109,166666,166667,166670,166672,166675,166677,166679,166682,166684,166686,166688,166690,166692,166694,166696],{"class":111,"line":112},[109,166668,166669],{"class":126},"squares ",[109,166671,130],{"class":122},[109,166673,166674],{"class":126}," {i: i ",[109,166676,11978],{"class":122},[109,166678,15928],{"class":133},[109,166680,166681],{"class":122}," for",[109,166683,10756],{"class":126},[109,166685,27218],{"class":122},[109,166687,33618],{"class":133},[109,166689,714],{"class":126},[109,166691,1755],{"class":133},[109,166693,13608],{"class":126},[109,166695,1881],{"class":133},[109,166697,166698],{"class":126},")}\n",[109,166700,166701,166703],{"class":111,"line":119},[109,166702,31590],{"class":133},[109,166704,166705],{"class":126},"(squares)\n",[19,166707,166708],{},"集合推导式：",[99,166710,166712],{"className":31553,"code":166711,"language":31555,"meta":104,"style":104},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[106,166713,166714,166735],{"__ignoreMap":104},[109,166715,166716,166719,166721,166724,166726,166728,166730,166733],{"class":111,"line":112},[109,166717,166718],{"class":126},"chars ",[109,166720,130],{"class":122},[109,166722,166723],{"class":126}," {ch ",[109,166725,4372],{"class":122},[109,166727,160867],{"class":126},[109,166729,27218],{"class":122},[109,166731,166732],{"class":278}," \"hello\"",[109,166734,742],{"class":126},[109,166736,166737,166739],{"class":111,"line":119},[109,166738,31590],{"class":133},[109,166740,166741],{"class":126},"(chars)\n",[19,166743,166744],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166746,166748],{"id":166747},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[99,166750,166752],{"className":31553,"code":166751,"language":31555,"meta":104,"style":104},"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",[106,166753,166754,166762,166782,166802,166822,166842,166846,166850,166858,166872,166881,166885,166895,166907,166911,166931,166940,166944,166960,166965,166969,166983,166987,167009,167045],{"__ignoreMap":104},[109,166755,166756,166758,166760],{"class":111,"line":112},[109,166757,160891],{"class":126},[109,166759,130],{"class":122},[109,166761,56622],{"class":126},[109,166763,166764,166766,166768,166770,166772,166774,166776,166778,166780],{"class":111,"line":119},[109,166765,149560],{"class":126},[109,166767,63854],{"class":278},[109,166769,52612],{"class":126},[109,166771,151063],{"class":278},[109,166773,13608],{"class":126},[109,166775,152647],{"class":278},[109,166777,52612],{"class":126},[109,166779,2519],{"class":133},[109,166781,6267],{"class":126},[109,166783,166784,166786,166788,166790,166792,166794,166796,166798,166800],{"class":111,"line":140},[109,166785,149560],{"class":126},[109,166787,63854],{"class":278},[109,166789,52612],{"class":126},[109,166791,152111],{"class":278},[109,166793,13608],{"class":126},[109,166795,152647],{"class":278},[109,166797,52612],{"class":126},[109,166799,2343],{"class":133},[109,166801,6267],{"class":126},[109,166803,166804,166806,166808,166810,166812,166814,166816,166818,166820],{"class":111,"line":154},[109,166805,149560],{"class":126},[109,166807,63854],{"class":278},[109,166809,52612],{"class":126},[109,166811,160906],{"class":278},[109,166813,13608],{"class":126},[109,166815,152647],{"class":278},[109,166817,52612],{"class":126},[109,166819,1942],{"class":133},[109,166821,6267],{"class":126},[109,166823,166824,166826,166828,166830,166832,166834,166836,166838,166840],{"class":111,"line":161},[109,166825,149560],{"class":126},[109,166827,63854],{"class":278},[109,166829,52612],{"class":126},[109,166831,164485],{"class":278},[109,166833,13608],{"class":126},[109,166835,152647],{"class":278},[109,166837,52612],{"class":126},[109,166839,2414],{"class":133},[109,166841,6267],{"class":126},[109,166843,166844],{"class":111,"line":167},[109,166845,34421],{"class":126},[109,166847,166848],{"class":111,"line":185},[109,166849,158],{"emptyLinePlaceholder":157},[109,166851,166852,166854,166856],{"class":111,"line":201},[109,166853,158435],{"class":126},[109,166855,130],{"class":122},[109,166857,48508],{"class":133},[109,166859,166860,166863,166865,166868,166870],{"class":111,"line":206},[109,166861,166862],{"class":126},"max_student ",[109,166864,130],{"class":122},[109,166866,166867],{"class":126}," students[",[109,166869,1314],{"class":133},[109,166871,34421],{"class":126},[109,166873,166874,166877,166879],{"class":111,"line":218},[109,166875,166876],{"class":126},"passed ",[109,166878,130],{"class":122},[109,166880,53013],{"class":126},[109,166882,166883],{"class":111,"line":223},[109,166884,158],{"emptyLinePlaceholder":157},[109,166886,166887,166889,166891,166893],{"class":111,"line":229},[109,166888,4372],{"class":122},[109,166890,153312],{"class":126},[109,166892,27218],{"class":122},[109,166894,153317],{"class":126},[109,166896,166897,166899,166901,166903,166905],{"class":111,"line":244},[109,166898,160482],{"class":126},[109,166900,10795],{"class":122},[109,166902,153324],{"class":126},[109,166904,152647],{"class":278},[109,166906,34421],{"class":126},[109,166908,166909],{"class":111,"line":258},[109,166910,158],{"emptyLinePlaceholder":157},[109,166912,166913,166915,166917,166919,166921,166923,166926,166928],{"class":111,"line":263},[109,166914,4446],{"class":122},[109,166916,153324],{"class":126},[109,166918,152647],{"class":278},[109,166920,5780],{"class":126},[109,166922,2490],{"class":122},[109,166924,166925],{"class":126}," max_student[",[109,166927,152647],{"class":278},[109,166929,166930],{"class":126},"]:\n",[109,166932,166933,166936,166938],{"class":111,"line":269},[109,166934,166935],{"class":126},"        max_student ",[109,166937,130],{"class":122},[109,166939,153340],{"class":126},[109,166941,166942],{"class":111,"line":304},[109,166943,158],{"emptyLinePlaceholder":157},[109,166945,166946,166948,166950,166952,166954,166956,166958],{"class":111,"line":331},[109,166947,4446],{"class":122},[109,166949,153324],{"class":126},[109,166951,152647],{"class":278},[109,166953,5780],{"class":126},[109,166955,3086],{"class":122},[109,166957,159012],{"class":133},[109,166959,5082],{"class":126},[109,166961,166962],{"class":111,"line":336},[109,166963,166964],{"class":126},"        passed.append(student)\n",[109,166966,166967],{"class":111,"line":364},[109,166968,158],{"emptyLinePlaceholder":157},[109,166970,166971,166973,166975,166977,166979,166981],{"class":111,"line":391},[109,166972,164949],{"class":126},[109,166974,130],{"class":122},[109,166976,164954],{"class":126},[109,166978,2116],{"class":122},[109,166980,8657],{"class":133},[109,166982,166170],{"class":126},[109,166984,166985],{"class":111,"line":396},[109,166986,158],{"emptyLinePlaceholder":157},[109,166988,166989,166991,166993,166995,166997,166999,167001,167003,167005,167007],{"class":111,"line":402},[109,166990,31590],{"class":133},[109,166992,714],{"class":126},[109,166994,1595],{"class":122},[109,166996,164972],{"class":278},[109,166998,2427],{"class":133},[109,167000,164977],{"class":126},[109,167002,158334],{"class":122},[109,167004,2476],{"class":133},[109,167006,1789],{"class":278},[109,167008,1330],{"class":126},[109,167010,167011,167013,167015,167017,167020,167022,167025,167027,167029,167031,167033,167035,167037,167039,167041,167043],{"class":111,"line":419},[109,167012,31590],{"class":133},[109,167014,714],{"class":126},[109,167016,1595],{"class":122},[109,167018,167019],{"class":278},"\"最高分学生:",[109,167021,2427],{"class":133},[109,167023,167024],{"class":126},"max_student[",[109,167026,154057],{"class":278},[109,167028,2470],{"class":126},[109,167030,2476],{"class":133},[109,167032,5785],{"class":133},[109,167034,167024],{"class":126},[109,167036,154095],{"class":278},[109,167038,2470],{"class":126},[109,167040,2476],{"class":133},[109,167042,1789],{"class":278},[109,167044,1330],{"class":126},[109,167046,167047,167049,167051,167053,167056,167059,167062,167064,167066],{"class":111,"line":435},[109,167048,31590],{"class":133},[109,167050,714],{"class":126},[109,167052,1595],{"class":122},[109,167054,167055],{"class":278},"\"及格人数:",[109,167057,167058],{"class":133},"{len",[109,167060,167061],{"class":126},"(passed)",[109,167063,2476],{"class":133},[109,167065,1789],{"class":278},[109,167067,1330],{"class":126},[14,167069,167071],{"id":167070},"_616-易错点","6.16 易错点",[765,167073,167074,167077,167080,167083,167089,167098],{},[30,167075,167076],{},"列表可变，元组和字符串不可变。",[30,167078,167079],{},"切片结束位置不包含。",[30,167081,167082],{},"字典通过 key 取值，不是通过索引。",[30,167084,167085,167086,29560],{},"空集合要用 ",[106,167087,167088],{},"set()",[30,167090,105541,167091,167094,167095,29560],{},[106,167092,167093],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[106,167096,167097],{},"get()",[30,167099,167100],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167102,167104],{"id":167103},"_617-本章练习","6.17 本章练习",[765,167106,167107,167110,167113,167116,167119],{},[30,167108,167109],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[30,167111,167112],{},"输入一句话，统计每个字符出现次数。",[30,167114,167115],{},"使用集合去除列表中的重复元素。",[30,167117,167118],{},"使用字典保存一个学生的信息，并实现修改成绩。",[30,167120,167121],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1467,167123,167124],{},"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":104,"searchDepth":119,"depth":119,"links":167126},[167127,167128,167129,167130,167131,167132,167133,167134,167135,167136,167137,167138,167139,167140,167141,167142,167143],{"id":164107,"depth":119,"text":164108},{"id":164224,"depth":119,"text":164225},{"id":164314,"depth":119,"text":164315},{"id":164438,"depth":119,"text":164439},{"id":164801,"depth":119,"text":164802},{"id":164988,"depth":119,"text":164989},{"id":165107,"depth":119,"text":165108},{"id":165249,"depth":119,"text":165250},{"id":165436,"depth":119,"text":165437},{"id":165680,"depth":119,"text":165681},{"id":165890,"depth":119,"text":165891},{"id":165975,"depth":119,"text":165976},{"id":166273,"depth":119,"text":166274},{"id":166555,"depth":119,"text":166556},{"id":166747,"depth":119,"text":166748},{"id":167070,"depth":119,"text":167071},{"id":167103,"depth":119,"text":167104},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164099,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167150,"title":167151,"body":167152,"description":24550,"extension":1476,"meta":169324,"navigation":157,"path":169325,"seo":169326,"stem":169327,"__hash__":169328},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167153,"toc":169299},[167154,167157,167161,167164,167244,167247,167268,167271,167275,167278,167340,167343,167360,167364,167367,167412,167414,167422,167426,167429,167511,167514,167517,167542,167545,167568,167572,167575,167577,167639,167642,167644,167695,167699,167703,167709,167814,167818,167824,167895,167899,167902,167970,167973,168053,168057,168063,168099,168102,168105,168215,168221,168225,168228,168300,168303,168307,168311,168316,168378,168382,168387,168455,168459,168464,168580,168584,168587,168667,168670,168674,168677,168781,168783,168798,168801,168805,168943,168951,168955,168957,168968,168970,169228,169232,169264,169268,169296],[10,167155,167151],{"id":167156},"_7-函数进阶",[14,167158,167160],{"id":167159},"_71-多返回值","7.1 多返回值",[19,167162,167163],{},"Python 函数可以返回多个值，本质上返回的是元组。",[99,167165,167167],{"className":31553,"code":167166,"language":31555,"meta":104,"style":104},"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",[106,167168,167169,167178,167186,167194,167203,167210,167214,167218,167227,167233],{"__ignoreMap":104},[109,167170,167171,167173,167176],{"class":111,"line":112},[109,167172,33122],{"class":122},[109,167174,167175],{"class":211}," get_info",[109,167177,33128],{"class":126},[109,167179,167180,167182,167184],{"class":111,"line":119},[109,167181,153545],{"class":126},[109,167183,130],{"class":122},[109,167185,150528],{"class":278},[109,167187,167188,167190,167192],{"class":111,"line":140},[109,167189,153561],{"class":126},[109,167191,130],{"class":122},[109,167193,147726],{"class":133},[109,167195,167196,167198,167200],{"class":111,"line":154},[109,167197,153576],{"class":126},[109,167199,130],{"class":122},[109,167201,167202],{"class":133}," 95\n",[109,167204,167205,167207],{"class":111,"line":161},[109,167206,731],{"class":122},[109,167208,167209],{"class":126}," name, age, score\n",[109,167211,167212],{"class":111,"line":167},[109,167213,158],{"emptyLinePlaceholder":157},[109,167215,167216],{"class":111,"line":185},[109,167217,158],{"emptyLinePlaceholder":157},[109,167219,167220,167222,167224],{"class":111,"line":201},[109,167221,162481],{"class":126},[109,167223,130],{"class":122},[109,167225,167226],{"class":126}," get_info()\n",[109,167228,167229,167231],{"class":111,"line":206},[109,167230,31590],{"class":133},[109,167232,77760],{"class":126},[109,167234,167235,167237,167239,167241],{"class":111,"line":218},[109,167236,31590],{"class":133},[109,167238,714],{"class":126},[109,167240,104282],{"class":133},[109,167242,167243],{"class":126},"(result))\n",[19,167245,167246],{},"可以直接解包：",[99,167248,167250],{"className":31553,"code":167249,"language":31555,"meta":104,"style":104},"name, age, score = get_info()\nprint(name, age, score)\n",[106,167251,167252,167261],{"__ignoreMap":104},[109,167253,167254,167257,167259],{"class":111,"line":112},[109,167255,167256],{"class":126},"name, age, score ",[109,167258,130],{"class":122},[109,167260,167226],{"class":126},[109,167262,167263,167265],{"class":111,"line":119},[109,167264,31590],{"class":133},[109,167266,167267],{"class":126},"(name, age, score)\n",[19,167269,167270],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167272,167274],{"id":167273},"_72-位置参数","7.2 位置参数",[19,167276,167277],{},"位置参数按顺序传递。",[99,167279,167281],{"className":31553,"code":167280,"language":31555,"meta":104,"style":104},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[106,167282,167283,167291,167319,167323,167327],{"__ignoreMap":104},[109,167284,167285,167287,167289],{"class":111,"line":112},[109,167286,33122],{"class":122},[109,167288,150547],{"class":211},[109,167290,150550],{"class":126},[109,167292,167293,167295,167297,167299,167301,167303,167305,167307,167309,167311,167313,167315,167317],{"class":111,"line":119},[109,167294,32474],{"class":133},[109,167296,714],{"class":126},[109,167298,1595],{"class":122},[109,167300,150561],{"class":278},[109,167302,2427],{"class":133},[109,167304,80985],{"class":126},[109,167306,2476],{"class":133},[109,167308,150570],{"class":278},[109,167310,2427],{"class":133},[109,167312,71396],{"class":126},[109,167314,2476],{"class":133},[109,167316,150579],{"class":278},[109,167318,1330],{"class":126},[109,167320,167321],{"class":111,"line":140},[109,167322,158],{"emptyLinePlaceholder":157},[109,167324,167325],{"class":111,"line":154},[109,167326,158],{"emptyLinePlaceholder":157},[109,167328,167329,167332,167334,167336,167338],{"class":111,"line":161},[109,167330,167331],{"class":126},"introduce(",[109,167333,151063],{"class":278},[109,167335,13608],{"class":126},[109,167337,2182],{"class":133},[109,167339,1330],{"class":126},[19,167341,167342],{},"顺序错了就会得到错误含义：",[99,167344,167346],{"className":31553,"code":167345,"language":31555,"meta":104,"style":104},"introduce(18, \"小明\")\n",[106,167347,167348],{"__ignoreMap":104},[109,167349,167350,167352,167354,167356,167358],{"class":111,"line":112},[109,167351,167331],{"class":126},[109,167353,2182],{"class":133},[109,167355,13608],{"class":126},[109,167357,151063],{"class":278},[109,167359,1330],{"class":126},[14,167361,167363],{"id":167362},"_73-关键字参数","7.3 关键字参数",[19,167365,167366],{},"关键字参数按参数名传递。",[99,167368,167370],{"className":31553,"code":167369,"language":31555,"meta":104,"style":104},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[106,167371,167372,167392],{"__ignoreMap":104},[109,167373,167374,167376,167378,167380,167382,167384,167386,167388,167390],{"class":111,"line":112},[109,167375,167331],{"class":126},[109,167377,80985],{"class":6553},[109,167379,130],{"class":122},[109,167381,151063],{"class":278},[109,167383,13608],{"class":126},[109,167385,71396],{"class":6553},[109,167387,130],{"class":122},[109,167389,2182],{"class":133},[109,167391,1330],{"class":126},[109,167393,167394,167396,167398,167400,167402,167404,167406,167408,167410],{"class":111,"line":119},[109,167395,167331],{"class":126},[109,167397,71396],{"class":6553},[109,167399,130],{"class":122},[109,167401,2182],{"class":133},[109,167403,13608],{"class":126},[109,167405,80985],{"class":6553},[109,167407,130],{"class":122},[109,167409,151063],{"class":278},[109,167411,1330],{"class":126},[19,167413,119109],{},[765,167415,167416,167419],{},[30,167417,167418],{},"顺序不容易错。",[30,167420,167421],{},"调用时可读性更强。",[14,167423,167425],{"id":167424},"_74-默认参数","7.4 默认参数",[19,167427,167428],{},"默认参数给参数设置默认值。",[99,167430,167432],{"className":31553,"code":167431,"language":31555,"meta":104,"style":104},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[106,167433,167434,167450,167480,167484,167488,167498],{"__ignoreMap":104},[109,167435,167436,167438,167440,167443,167445,167448],{"class":111,"line":112},[109,167437,33122],{"class":122},[109,167439,123268],{"class":211},[109,167441,167442],{"class":126},"(host, port",[109,167444,130],{"class":122},[109,167446,167447],{"class":133},"3306",[109,167449,31961],{"class":126},[109,167451,167452,167454,167456,167458,167461,167463,167465,167467,167469,167471,167474,167476,167478],{"class":111,"line":119},[109,167453,32474],{"class":133},[109,167455,714],{"class":126},[109,167457,1595],{"class":122},[109,167459,167460],{"class":278},"\"连接",[109,167462,2427],{"class":133},[109,167464,28570],{"class":126},[109,167466,2476],{"class":133},[109,167468,2391],{"class":278},[109,167470,2427],{"class":133},[109,167472,167473],{"class":126},"port",[109,167475,2476],{"class":133},[109,167477,1789],{"class":278},[109,167479,1330],{"class":126},[109,167481,167482],{"class":111,"line":140},[109,167483,158],{"emptyLinePlaceholder":157},[109,167485,167486],{"class":111,"line":154},[109,167487,158],{"emptyLinePlaceholder":157},[109,167489,167490,167493,167496],{"class":111,"line":161},[109,167491,167492],{"class":126},"connect(",[109,167494,167495],{"class":278},"\"localhost\"",[109,167497,1330],{"class":126},[109,167499,167500,167502,167504,167506,167509],{"class":111,"line":167},[109,167501,167492],{"class":126},[109,167503,167495],{"class":278},[109,167505,13608],{"class":126},[109,167507,167508],{"class":133},"6379",[109,167510,1330],{"class":126},[19,167512,167513],{},"注意：默认参数必须放在非默认参数后面。",[19,167515,167516],{},"错误：",[99,167518,167520],{"className":31553,"code":167519,"language":31555,"meta":104,"style":104},"def connect(port=3306, host):\n    pass\n",[106,167521,167522,167538],{"__ignoreMap":104},[109,167523,167524,167526,167528,167531,167533,167535],{"class":111,"line":112},[109,167525,33122],{"class":122},[109,167527,123268],{"class":211},[109,167529,167530],{"class":126},"(port",[109,167532,130],{"class":122},[109,167534,167447],{"class":133},[109,167536,167537],{"class":126},", host):\n",[109,167539,167540],{"class":111,"line":119},[109,167541,150712],{"class":122},[19,167543,167544],{},"正确：",[99,167546,167548],{"className":31553,"code":167547,"language":31555,"meta":104,"style":104},"def connect(host, port=3306):\n    pass\n",[106,167549,167550,167564],{"__ignoreMap":104},[109,167551,167552,167554,167556,167558,167560,167562],{"class":111,"line":112},[109,167553,33122],{"class":122},[109,167555,123268],{"class":211},[109,167557,167442],{"class":126},[109,167559,130],{"class":122},[109,167561,167447],{"class":133},[109,167563,31961],{"class":126},[109,167565,167566],{"class":111,"line":119},[109,167567,150712],{"class":122},[14,167569,167571],{"id":167570},"_75-默认参数的坑","7.5 默认参数的坑",[19,167573,167574],{},"不要使用可变对象作为默认参数。",[19,167576,158798],{},[99,167578,167580],{"className":31553,"code":167579,"language":31555,"meta":104,"style":104},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[106,167581,167582,167597,167602,167609,167613,167617,167628],{"__ignoreMap":104},[109,167583,167584,167586,167589,167592,167594],{"class":111,"line":112},[109,167585,33122],{"class":122},[109,167587,167588],{"class":211}," add_item",[109,167590,167591],{"class":126},"(item, items",[109,167593,130],{"class":122},[109,167595,167596],{"class":126},"[]):\n",[109,167598,167599],{"class":111,"line":119},[109,167600,167601],{"class":126},"    items.append(item)\n",[109,167603,167604,167606],{"class":111,"line":140},[109,167605,731],{"class":122},[109,167607,167608],{"class":126}," items\n",[109,167610,167611],{"class":111,"line":154},[109,167612,158],{"emptyLinePlaceholder":157},[109,167614,167615],{"class":111,"line":161},[109,167616,158],{"emptyLinePlaceholder":157},[109,167618,167619,167621,167624,167626],{"class":111,"line":167},[109,167620,31590],{"class":133},[109,167622,167623],{"class":126},"(add_item(",[109,167625,166500],{"class":278},[109,167627,31672],{"class":126},[109,167629,167630,167632,167634,167637],{"class":111,"line":185},[109,167631,31590],{"class":133},[109,167633,167623],{"class":126},[109,167635,167636],{"class":278},"\"b\"",[109,167638,31672],{"class":126},[19,167640,167641],{},"第二次调用会复用第一次的列表。",[19,167643,157063],{},[99,167645,167647],{"className":31553,"code":167646,"language":31555,"meta":104,"style":104},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[106,167648,167649,167663,167676,167685,167689],{"__ignoreMap":104},[109,167650,167651,167653,167655,167657,167659,167661],{"class":111,"line":112},[109,167652,33122],{"class":122},[109,167654,167588],{"class":211},[109,167656,167591],{"class":126},[109,167658,130],{"class":122},[109,167660,96861],{"class":133},[109,167662,31961],{"class":126},[109,167664,167665,167667,167670,167672,167674],{"class":111,"line":119},[109,167666,4446],{"class":122},[109,167668,167669],{"class":126}," items ",[109,167671,40102],{"class":122},[109,167673,40108],{"class":133},[109,167675,5082],{"class":126},[109,167677,167678,167681,167683],{"class":111,"line":140},[109,167679,167680],{"class":126},"        items ",[109,167682,130],{"class":122},[109,167684,53013],{"class":126},[109,167686,167687],{"class":111,"line":154},[109,167688,167601],{"class":126},[109,167690,167691,167693],{"class":111,"line":161},[109,167692,731],{"class":122},[109,167694,167608],{"class":126},[14,167696,167698],{"id":167697},"_76-不定长参数","7.6 不定长参数",[51,167700,167702],{"id":167701},"_761-args","7.6.1 *args",[19,167704,167705,167708],{},[106,167706,167707],{},"*args"," 接收任意数量的位置参数，得到元组。",[99,167710,167712],{"className":31553,"code":167711,"language":31555,"meta":104,"style":104},"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",[106,167713,167714,167727,167735,167746,167755,167761,167765,167769,167788],{"__ignoreMap":104},[109,167715,167716,167718,167720,167722,167724],{"class":111,"line":112},[109,167717,33122],{"class":122},[109,167719,6546],{"class":211},[109,167721,714],{"class":126},[109,167723,1988],{"class":122},[109,167725,167726],{"class":126},"args):\n",[109,167728,167729,167731,167733],{"class":111,"line":119},[109,167730,160482],{"class":126},[109,167732,130],{"class":122},[109,167734,48508],{"class":133},[109,167736,167737,167739,167741,167743],{"class":111,"line":140},[109,167738,1302],{"class":122},[109,167740,157355],{"class":126},[109,167742,27218],{"class":122},[109,167744,167745],{"class":126}," args:\n",[109,167747,167748,167750,167752],{"class":111,"line":154},[109,167749,161157],{"class":126},[109,167751,10795],{"class":122},[109,167753,167754],{"class":126}," num\n",[109,167756,167757,167759],{"class":111,"line":161},[109,167758,731],{"class":122},[109,167760,163462],{"class":126},[109,167762,167763],{"class":111,"line":167},[109,167764,158],{"emptyLinePlaceholder":157},[109,167766,167767],{"class":111,"line":185},[109,167768,158],{"emptyLinePlaceholder":157},[109,167770,167771,167773,167776,167778,167780,167782,167784,167786],{"class":111,"line":201},[109,167772,31590],{"class":133},[109,167774,167775],{"class":126},"(add(",[109,167777,1755],{"class":133},[109,167779,13608],{"class":126},[109,167781,1618],{"class":133},[109,167783,13608],{"class":126},[109,167785,1612],{"class":133},[109,167787,31672],{"class":126},[109,167789,167790,167792,167794,167796,167798,167800,167802,167804,167806,167808,167810,167812],{"class":111,"line":206},[109,167791,31590],{"class":133},[109,167793,167775],{"class":126},[109,167795,1755],{"class":133},[109,167797,13608],{"class":126},[109,167799,1618],{"class":133},[109,167801,13608],{"class":126},[109,167803,1612],{"class":133},[109,167805,13608],{"class":126},[109,167807,1831],{"class":133},[109,167809,13608],{"class":126},[109,167811,1856],{"class":133},[109,167813,31672],{"class":126},[51,167815,167817],{"id":167816},"_762-kwargs","7.6.2 **kwargs",[19,167819,167820,167823],{},[106,167821,167822],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[99,167825,167827],{"className":31553,"code":167826,"language":31555,"meta":104,"style":104},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[106,167828,167829,167842,167853,167859,167863,167867],{"__ignoreMap":104},[109,167830,167831,167833,167835,167837,167839],{"class":111,"line":112},[109,167832,33122],{"class":122},[109,167834,163120],{"class":211},[109,167836,714],{"class":126},[109,167838,11978],{"class":122},[109,167840,167841],{"class":126},"kwargs):\n",[109,167843,167844,167846,167848,167850],{"class":111,"line":119},[109,167845,1302],{"class":122},[109,167847,165960],{"class":126},[109,167849,27218],{"class":122},[109,167851,167852],{"class":126}," kwargs.items():\n",[109,167854,167855,167857],{"class":111,"line":140},[109,167856,33626],{"class":133},[109,167858,165972],{"class":126},[109,167860,167861],{"class":111,"line":154},[109,167862,158],{"emptyLinePlaceholder":157},[109,167864,167865],{"class":111,"line":161},[109,167866,158],{"emptyLinePlaceholder":157},[109,167868,167869,167871,167873,167875,167877,167879,167881,167883,167885,167887,167889,167891,167893],{"class":111,"line":167},[109,167870,163185],{"class":126},[109,167872,80985],{"class":6553},[109,167874,130],{"class":122},[109,167876,151063],{"class":278},[109,167878,13608],{"class":126},[109,167880,71396],{"class":6553},[109,167882,130],{"class":122},[109,167884,2182],{"class":133},[109,167886,13608],{"class":126},[109,167888,71447],{"class":6553},[109,167890,130],{"class":122},[109,167892,70444],{"class":278},[109,167894,1330],{"class":126},[14,167896,167898],{"id":167897},"_77-参数解包","7.7 参数解包",[19,167900,167901],{},"列表或元组解包为位置参数：",[99,167903,167905],{"className":31553,"code":167904,"language":31555,"meta":104,"style":104},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[106,167906,167907,167916,167931,167935,167939,167959],{"__ignoreMap":104},[109,167908,167909,167911,167913],{"class":111,"line":112},[109,167910,33122],{"class":122},[109,167912,6546],{"class":211},[109,167914,167915],{"class":126},"(a, b, c):\n",[109,167917,167918,167920,167922,167924,167926,167928],{"class":111,"line":119},[109,167919,731],{"class":122},[109,167921,235],{"class":126},[109,167923,1348],{"class":122},[109,167925,249],{"class":126},[109,167927,1348],{"class":122},[109,167929,167930],{"class":126}," c\n",[109,167932,167933],{"class":111,"line":140},[109,167934,158],{"emptyLinePlaceholder":157},[109,167936,167937],{"class":111,"line":154},[109,167938,158],{"emptyLinePlaceholder":157},[109,167940,167941,167943,167945,167947,167949,167951,167953,167955,167957],{"class":111,"line":161},[109,167942,165275],{"class":126},[109,167944,130],{"class":122},[109,167946,53401],{"class":126},[109,167948,1755],{"class":133},[109,167950,13608],{"class":126},[109,167952,1618],{"class":133},[109,167954,13608],{"class":126},[109,167956,1612],{"class":133},[109,167958,34421],{"class":126},[109,167960,167961,167963,167965,167967],{"class":111,"line":167},[109,167962,31590],{"class":133},[109,167964,167775],{"class":126},[109,167966,1988],{"class":122},[109,167968,167969],{"class":126},"nums))\n",[19,167971,167972],{},"字典解包为关键字参数：",[99,167974,167976],{"className":31553,"code":167975,"language":31555,"meta":104,"style":104},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[106,167977,167978,167986,168012,168016,168020,168044],{"__ignoreMap":104},[109,167979,167980,167982,167984],{"class":111,"line":112},[109,167981,33122],{"class":122},[109,167983,150547],{"class":211},[109,167985,150550],{"class":126},[109,167987,167988,167990,167992,167994,167996,167998,168000,168002,168004,168006,168008,168010],{"class":111,"line":119},[109,167989,32474],{"class":133},[109,167991,714],{"class":126},[109,167993,1595],{"class":122},[109,167995,1789],{"class":278},[109,167997,2427],{"class":133},[109,167999,80985],{"class":126},[109,168001,2476],{"class":133},[109,168003,5785],{"class":133},[109,168005,71396],{"class":126},[109,168007,2476],{"class":133},[109,168009,1789],{"class":278},[109,168011,1330],{"class":126},[109,168013,168014],{"class":111,"line":140},[109,168015,158],{"emptyLinePlaceholder":157},[109,168017,168018],{"class":111,"line":154},[109,168019,158],{"emptyLinePlaceholder":157},[109,168021,168022,168024,168026,168028,168030,168032,168034,168036,168038,168040,168042],{"class":111,"line":161},[109,168023,117489],{"class":126},[109,168025,130],{"class":122},[109,168027,5785],{"class":126},[109,168029,63854],{"class":278},[109,168031,52612],{"class":126},[109,168033,151063],{"class":278},[109,168035,13608],{"class":126},[109,168037,70299],{"class":278},[109,168039,52612],{"class":126},[109,168041,2182],{"class":133},[109,168043,742],{"class":126},[109,168045,168046,168048,168050],{"class":111,"line":167},[109,168047,167331],{"class":126},[109,168049,11978],{"class":122},[109,168051,168052],{"class":126},"info)\n",[14,168054,168056],{"id":168055},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168058,168059,168062],{},[106,168060,168061],{},"lambda"," 用于定义简单匿名函数。",[99,168064,168066],{"className":31553,"code":168065,"language":31555,"meta":104,"style":104},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[106,168067,168068,168085],{"__ignoreMap":104},[109,168069,168070,168073,168075,168078,168081,168083],{"class":111,"line":112},[109,168071,168072],{"class":126},"add ",[109,168074,130],{"class":122},[109,168076,168077],{"class":122}," lambda",[109,168079,168080],{"class":126}," a, b: a ",[109,168082,1348],{"class":122},[109,168084,152279],{"class":126},[109,168086,168087,168089,168091,168093,168095,168097],{"class":111,"line":119},[109,168088,31590],{"class":133},[109,168090,167775],{"class":126},[109,168092,1755],{"class":133},[109,168094,13608],{"class":126},[109,168096,1618],{"class":133},[109,168098,31672],{"class":126},[19,168100,168101],{},"常和排序、过滤等函数一起使用。",[19,168103,168104],{},"按分数排序：",[99,168106,168108],{"className":31553,"code":168107,"language":31555,"meta":104,"style":104},"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",[106,168109,168110,168118,168138,168158,168178,168182,168186,168209],{"__ignoreMap":104},[109,168111,168112,168114,168116],{"class":111,"line":112},[109,168113,160891],{"class":126},[109,168115,130],{"class":122},[109,168117,56622],{"class":126},[109,168119,168120,168122,168124,168126,168128,168130,168132,168134,168136],{"class":111,"line":119},[109,168121,149560],{"class":126},[109,168123,63854],{"class":278},[109,168125,52612],{"class":126},[109,168127,151063],{"class":278},[109,168129,13608],{"class":126},[109,168131,152647],{"class":278},[109,168133,52612],{"class":126},[109,168135,2519],{"class":133},[109,168137,6267],{"class":126},[109,168139,168140,168142,168144,168146,168148,168150,168152,168154,168156],{"class":111,"line":140},[109,168141,149560],{"class":126},[109,168143,63854],{"class":278},[109,168145,52612],{"class":126},[109,168147,152111],{"class":278},[109,168149,13608],{"class":126},[109,168151,152647],{"class":278},[109,168153,52612],{"class":126},[109,168155,2343],{"class":133},[109,168157,6267],{"class":126},[109,168159,168160,168162,168164,168166,168168,168170,168172,168174,168176],{"class":111,"line":154},[109,168161,149560],{"class":126},[109,168163,63854],{"class":278},[109,168165,52612],{"class":126},[109,168167,160906],{"class":278},[109,168169,13608],{"class":126},[109,168171,152647],{"class":278},[109,168173,52612],{"class":126},[109,168175,1942],{"class":133},[109,168177,6267],{"class":126},[109,168179,168180],{"class":111,"line":161},[109,168181,34421],{"class":126},[109,168183,168184],{"class":111,"line":167},[109,168185,158],{"emptyLinePlaceholder":157},[109,168187,168188,168191,168193,168195,168197,168199,168201,168203,168205,168207],{"class":111,"line":185},[109,168189,168190],{"class":126},"students.sort(",[109,168192,155121],{"class":6553},[109,168194,155124],{"class":122},[109,168196,155127],{"class":126},[109,168198,152647],{"class":278},[109,168200,113377],{"class":126},[109,168202,164703],{"class":6553},[109,168204,130],{"class":122},[109,168206,32651],{"class":133},[109,168208,1330],{"class":126},[109,168210,168211,168213],{"class":111,"line":201},[109,168212,31590],{"class":133},[109,168214,166170],{"class":126},[19,168216,168217,168218,168220],{},"如果逻辑复杂，不要硬写 ",[106,168219,168061],{},"，定义普通函数更清晰。",[14,168222,168224],{"id":168223},"_79-函数作为参数","7.9 函数作为参数",[19,168226,168227],{},"函数可以作为参数传给另一个函数。",[99,168229,168231],{"className":31553,"code":168230,"language":31555,"meta":104,"style":104},"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",[106,168232,168233,168241,168251,168255,168259,168269,168276,168280,168284],{"__ignoreMap":104},[109,168234,168235,168237,168239],{"class":111,"line":112},[109,168236,33122],{"class":122},[109,168238,6546],{"class":211},[109,168240,152268],{"class":126},[109,168242,168243,168245,168247,168249],{"class":111,"line":119},[109,168244,731],{"class":122},[109,168246,235],{"class":126},[109,168248,1348],{"class":122},[109,168250,152279],{"class":126},[109,168252,168253],{"class":111,"line":140},[109,168254,158],{"emptyLinePlaceholder":157},[109,168256,168257],{"class":111,"line":154},[109,168258,158],{"emptyLinePlaceholder":157},[109,168260,168261,168263,168266],{"class":111,"line":161},[109,168262,33122],{"class":122},[109,168264,168265],{"class":211}," calculate",[109,168267,168268],{"class":126},"(a, b, func):\n",[109,168270,168271,168273],{"class":111,"line":167},[109,168272,731],{"class":122},[109,168274,168275],{"class":126}," func(a, b)\n",[109,168277,168278],{"class":111,"line":185},[109,168279,158],{"emptyLinePlaceholder":157},[109,168281,168282],{"class":111,"line":201},[109,168283,158],{"emptyLinePlaceholder":157},[109,168285,168286,168288,168291,168293,168295,168297],{"class":111,"line":206},[109,168287,31590],{"class":133},[109,168289,168290],{"class":126},"(calculate(",[109,168292,1008],{"class":133},[109,168294,13608],{"class":126},[109,168296,2232],{"class":133},[109,168298,168299],{"class":126},", add))\n",[19,168301,168302],{},"这种思想在排序、回调、框架中经常出现。",[14,168304,168306],{"id":168305},"_710-mapfiltersorted","7.10 map、filter、sorted",[51,168308,168310],{"id":168309},"_7101-map","7.10.1 map",[19,168312,168313,168315],{},[106,168314,75219],{}," 对每个元素执行函数。",[99,168317,168319],{"className":31553,"code":168318,"language":31555,"meta":104,"style":104},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[106,168320,168321,168345,168368],{"__ignoreMap":104},[109,168322,168323,168325,168327,168329,168331,168333,168335,168337,168339,168341,168343],{"class":111,"line":112},[109,168324,165275],{"class":126},[109,168326,130],{"class":122},[109,168328,53401],{"class":126},[109,168330,1755],{"class":133},[109,168332,13608],{"class":126},[109,168334,1618],{"class":133},[109,168336,13608],{"class":126},[109,168338,1612],{"class":133},[109,168340,13608],{"class":126},[109,168342,1831],{"class":133},[109,168344,34421],{"class":126},[109,168346,168347,168349,168351,168354,168356,168358,168361,168363,168365],{"class":111,"line":119},[109,168348,162481],{"class":126},[109,168350,130],{"class":122},[109,168352,168353],{"class":133}," map",[109,168355,714],{"class":126},[109,168357,168061],{"class":122},[109,168359,168360],{"class":126}," x: x ",[109,168362,1988],{"class":122},[109,168364,15928],{"class":133},[109,168366,168367],{"class":126},", nums)\n",[109,168369,168370,168372,168374,168376],{"class":111,"line":140},[109,168371,31590],{"class":133},[109,168373,714],{"class":126},[109,168375,155245],{"class":133},[109,168377,167243],{"class":126},[51,168379,168381],{"id":168380},"_7102-filter","7.10.2 filter",[19,168383,168384,168386],{},[106,168385,81226],{}," 保留满足条件的元素。",[99,168388,168390],{"className":31553,"code":168389,"language":31555,"meta":104,"style":104},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[106,168391,168392,168420,168445],{"__ignoreMap":104},[109,168393,168394,168396,168398,168400,168402,168404,168406,168408,168410,168412,168414,168416,168418],{"class":111,"line":112},[109,168395,165275],{"class":126},[109,168397,130],{"class":122},[109,168399,53401],{"class":126},[109,168401,1755],{"class":133},[109,168403,13608],{"class":126},[109,168405,1618],{"class":133},[109,168407,13608],{"class":126},[109,168409,1612],{"class":133},[109,168411,13608],{"class":126},[109,168413,1831],{"class":133},[109,168415,13608],{"class":126},[109,168417,1856],{"class":133},[109,168419,34421],{"class":126},[109,168421,168422,168424,168426,168429,168431,168433,168435,168437,168439,168441,168443],{"class":111,"line":119},[109,168423,162481],{"class":126},[109,168425,130],{"class":122},[109,168427,168428],{"class":133}," filter",[109,168430,714],{"class":126},[109,168432,168061],{"class":122},[109,168434,168360],{"class":126},[109,168436,1865],{"class":122},[109,168438,15928],{"class":133},[109,168440,102734],{"class":122},[109,168442,734],{"class":133},[109,168444,168367],{"class":126},[109,168446,168447,168449,168451,168453],{"class":111,"line":140},[109,168448,31590],{"class":133},[109,168450,714],{"class":126},[109,168452,155245],{"class":133},[109,168454,167243],{"class":126},[51,168456,168458],{"id":168457},"_7103-sorted","7.10.3 sorted",[19,168460,168461,168463],{},[106,168462,166411],{}," 返回排序后的新列表。",[99,168465,168467],{"className":31553,"code":168466,"language":31555,"meta":104,"style":104},"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",[106,168468,168469,168477,168497,168517,168537,168541,168545,168574],{"__ignoreMap":104},[109,168470,168471,168473,168475],{"class":111,"line":112},[109,168472,160891],{"class":126},[109,168474,130],{"class":122},[109,168476,56622],{"class":126},[109,168478,168479,168481,168483,168485,168487,168489,168491,168493,168495],{"class":111,"line":119},[109,168480,149560],{"class":126},[109,168482,63854],{"class":278},[109,168484,52612],{"class":126},[109,168486,151063],{"class":278},[109,168488,13608],{"class":126},[109,168490,152647],{"class":278},[109,168492,52612],{"class":126},[109,168494,2519],{"class":133},[109,168496,6267],{"class":126},[109,168498,168499,168501,168503,168505,168507,168509,168511,168513,168515],{"class":111,"line":140},[109,168500,149560],{"class":126},[109,168502,63854],{"class":278},[109,168504,52612],{"class":126},[109,168506,152111],{"class":278},[109,168508,13608],{"class":126},[109,168510,152647],{"class":278},[109,168512,52612],{"class":126},[109,168514,2343],{"class":133},[109,168516,6267],{"class":126},[109,168518,168519,168521,168523,168525,168527,168529,168531,168533,168535],{"class":111,"line":154},[109,168520,149560],{"class":126},[109,168522,63854],{"class":278},[109,168524,52612],{"class":126},[109,168526,160906],{"class":278},[109,168528,13608],{"class":126},[109,168530,152647],{"class":278},[109,168532,52612],{"class":126},[109,168534,1942],{"class":133},[109,168536,6267],{"class":126},[109,168538,168539],{"class":111,"line":161},[109,168540,34421],{"class":126},[109,168542,168543],{"class":111,"line":167},[109,168544,158],{"emptyLinePlaceholder":157},[109,168546,168547,168549,168551,168553,168556,168558,168560,168562,168564,168566,168568,168570,168572],{"class":111,"line":185},[109,168548,162481],{"class":126},[109,168550,130],{"class":122},[109,168552,164779],{"class":133},[109,168554,168555],{"class":126},"(students, ",[109,168557,155121],{"class":6553},[109,168559,155124],{"class":122},[109,168561,155127],{"class":126},[109,168563,152647],{"class":278},[109,168565,113377],{"class":126},[109,168567,164703],{"class":6553},[109,168569,130],{"class":122},[109,168571,32651],{"class":133},[109,168573,1330],{"class":126},[109,168575,168576,168578],{"class":111,"line":201},[109,168577,31590],{"class":133},[109,168579,77760],{"class":126},[14,168581,168583],{"id":168582},"_711-闭包入门","7.11 闭包入门",[19,168585,168586],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[99,168588,168590],{"className":31553,"code":168589,"language":31555,"meta":104,"style":104},"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",[106,168591,168592,168602,168612,168623,168627,168634,168638,168642,168656],{"__ignoreMap":104},[109,168593,168594,168596,168599],{"class":111,"line":112},[109,168595,33122],{"class":122},[109,168597,168598],{"class":211}," outer",[109,168600,168601],{"class":126},"(base):\n",[109,168603,168604,168606,168609],{"class":111,"line":119},[109,168605,31976],{"class":122},[109,168607,168608],{"class":211}," inner",[109,168610,168611],{"class":126},"(num):\n",[109,168613,168614,168616,168619,168621],{"class":111,"line":140},[109,168615,15925],{"class":122},[109,168617,168618],{"class":126}," base ",[109,168620,1348],{"class":122},[109,168622,167754],{"class":126},[109,168624,168625],{"class":111,"line":154},[109,168626,158],{"emptyLinePlaceholder":157},[109,168628,168629,168631],{"class":111,"line":161},[109,168630,731],{"class":122},[109,168632,168633],{"class":126}," inner\n",[109,168635,168636],{"class":111,"line":167},[109,168637,158],{"emptyLinePlaceholder":157},[109,168639,168640],{"class":111,"line":185},[109,168641,158],{"emptyLinePlaceholder":157},[109,168643,168644,168647,168649,168652,168654],{"class":111,"line":201},[109,168645,168646],{"class":126},"add_10 ",[109,168648,130],{"class":122},[109,168650,168651],{"class":126}," outer(",[109,168653,1008],{"class":133},[109,168655,1330],{"class":126},[109,168657,168658,168660,168663,168665],{"class":111,"line":206},[109,168659,31590],{"class":133},[109,168661,168662],{"class":126},"(add_10(",[109,168664,1856],{"class":133},[109,168666,31672],{"class":126},[19,168668,168669],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168671,168673],{"id":168672},"_712-装饰器入门","7.12 装饰器入门",[19,168675,168676],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[99,168678,168680],{"className":31553,"code":168679,"language":31555,"meta":104,"style":104},"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",[106,168681,168682,168691,168700,168711,168716,168727,168731,168738,168742,168746,168751,168759,168769,168773,168777],{"__ignoreMap":104},[109,168683,168684,168686,168688],{"class":111,"line":112},[109,168685,33122],{"class":122},[109,168687,88366],{"class":211},[109,168689,168690],{"class":126},"(func):\n",[109,168692,168693,168695,168698],{"class":111,"line":119},[109,168694,31976],{"class":122},[109,168696,168697],{"class":211}," wrapper",[109,168699,33128],{"class":126},[109,168701,168702,168704,168706,168709],{"class":111,"line":140},[109,168703,33626],{"class":133},[109,168705,714],{"class":126},[109,168707,168708],{"class":278},"\"函数开始执行\"",[109,168710,1330],{"class":126},[109,168712,168713],{"class":111,"line":154},[109,168714,168715],{"class":126},"        func()\n",[109,168717,168718,168720,168722,168725],{"class":111,"line":161},[109,168719,33626],{"class":133},[109,168721,714],{"class":126},[109,168723,168724],{"class":278},"\"函数执行结束\"",[109,168726,1330],{"class":126},[109,168728,168729],{"class":111,"line":167},[109,168730,158],{"emptyLinePlaceholder":157},[109,168732,168733,168735],{"class":111,"line":185},[109,168734,731],{"class":122},[109,168736,168737],{"class":126}," wrapper\n",[109,168739,168740],{"class":111,"line":201},[109,168741,158],{"emptyLinePlaceholder":157},[109,168743,168744],{"class":111,"line":206},[109,168745,158],{"emptyLinePlaceholder":157},[109,168747,168748],{"class":111,"line":218},[109,168749,168750],{"class":211},"@log\n",[109,168752,168753,168755,168757],{"class":111,"line":223},[109,168754,33122],{"class":122},[109,168756,162171],{"class":211},[109,168758,33128],{"class":126},[109,168760,168761,168763,168765,168767],{"class":111,"line":229},[109,168762,32474],{"class":133},[109,168764,714],{"class":126},[109,168766,7175],{"class":278},[109,168768,1330],{"class":126},[109,168770,168771],{"class":111,"line":244},[109,168772,158],{"emptyLinePlaceholder":157},[109,168774,168775],{"class":111,"line":258},[109,168776,158],{"emptyLinePlaceholder":157},[109,168778,168779],{"class":111,"line":263},[109,168780,162206],{"class":126},[19,168782,159449],{},[99,168784,168786],{"className":31553,"code":168785,"language":31555,"meta":104,"style":104},"say_hello = log(say_hello)\n",[106,168787,168788],{"__ignoreMap":104},[109,168789,168790,168793,168795],{"class":111,"line":112},[109,168791,168792],{"class":126},"say_hello ",[109,168794,130],{"class":122},[109,168796,168797],{"class":126}," log(say_hello)\n",[19,168799,168800],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168802,168804],{"id":168803},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[99,168806,168808],{"className":31553,"code":168807,"language":31555,"meta":104,"style":104},"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",[106,168809,168810,168818,168835,168845,168864,168874,168881,168885,168891,168895,168899,168903,168911,168921,168925,168929],{"__ignoreMap":104},[109,168811,168812,168814,168816],{"class":111,"line":112},[109,168813,33122],{"class":122},[109,168815,88366],{"class":211},[109,168817,168690],{"class":126},[109,168819,168820,168822,168824,168826,168828,168831,168833],{"class":111,"line":119},[109,168821,31976],{"class":122},[109,168823,168697],{"class":211},[109,168825,714],{"class":126},[109,168827,1988],{"class":122},[109,168829,168830],{"class":126},"args, ",[109,168832,11978],{"class":122},[109,168834,167841],{"class":126},[109,168836,168837,168839,168841,168843],{"class":111,"line":140},[109,168838,33626],{"class":133},[109,168840,714],{"class":126},[109,168842,168708],{"class":278},[109,168844,1330],{"class":126},[109,168846,168847,168850,168852,168855,168857,168859,168861],{"class":111,"line":154},[109,168848,168849],{"class":126},"        result ",[109,168851,130],{"class":122},[109,168853,168854],{"class":126}," func(",[109,168856,1988],{"class":122},[109,168858,168830],{"class":126},[109,168860,11978],{"class":122},[109,168862,168863],{"class":126},"kwargs)\n",[109,168865,168866,168868,168870,168872],{"class":111,"line":161},[109,168867,33626],{"class":133},[109,168869,714],{"class":126},[109,168871,168724],{"class":278},[109,168873,1330],{"class":126},[109,168875,168876,168878],{"class":111,"line":167},[109,168877,15925],{"class":122},[109,168879,168880],{"class":126}," result\n",[109,168882,168883],{"class":111,"line":185},[109,168884,158],{"emptyLinePlaceholder":157},[109,168886,168887,168889],{"class":111,"line":201},[109,168888,731],{"class":122},[109,168890,168737],{"class":126},[109,168892,168893],{"class":111,"line":206},[109,168894,158],{"emptyLinePlaceholder":157},[109,168896,168897],{"class":111,"line":218},[109,168898,158],{"emptyLinePlaceholder":157},[109,168900,168901],{"class":111,"line":223},[109,168902,168750],{"class":211},[109,168904,168905,168907,168909],{"class":111,"line":229},[109,168906,33122],{"class":122},[109,168908,6546],{"class":211},[109,168910,152268],{"class":126},[109,168912,168913,168915,168917,168919],{"class":111,"line":244},[109,168914,731],{"class":122},[109,168916,235],{"class":126},[109,168918,1348],{"class":122},[109,168920,152279],{"class":126},[109,168922,168923],{"class":111,"line":258},[109,168924,158],{"emptyLinePlaceholder":157},[109,168926,168927],{"class":111,"line":263},[109,168928,158],{"emptyLinePlaceholder":157},[109,168930,168931,168933,168935,168937,168939,168941],{"class":111,"line":269},[109,168932,31590],{"class":133},[109,168934,167775],{"class":126},[109,168936,1008],{"class":133},[109,168938,13608],{"class":126},[109,168940,2232],{"class":133},[109,168942,31672],{"class":126},[19,168944,168945,168946,102193,168948,168950],{},"这个写法使用 ",[106,168947,167707],{},[106,168949,167822],{}," 接收原函数的所有参数。",[14,168952,168954],{"id":168953},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168956,124467],{},[765,168958,168959,168962,168965],{},[30,168960,168961],{},"给定一组学生数据。",[30,168963,168964],{},"封装函数，根据传入规则筛选学生。",[30,168966,168967],{},"筛选及格、优秀、未成年学生。",[19,168969,11353],{},[99,168971,168973],{"className":31553,"code":168972,"language":31555,"meta":104,"style":104},"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",[106,168974,168975,168983,169011,169039,169067,169071,169075,169079,169089,169097,169107,169114,169119,169125,169129,169133,169157,169180,169203,169207,169214,169221],{"__ignoreMap":104},[109,168976,168977,168979,168981],{"class":111,"line":112},[109,168978,160891],{"class":126},[109,168980,130],{"class":122},[109,168982,56622],{"class":126},[109,168984,168985,168987,168989,168991,168993,168995,168997,168999,169001,169003,169005,169007,169009],{"class":111,"line":119},[109,168986,149560],{"class":126},[109,168988,63854],{"class":278},[109,168990,52612],{"class":126},[109,168992,151063],{"class":278},[109,168994,13608],{"class":126},[109,168996,70299],{"class":278},[109,168998,52612],{"class":126},[109,169000,2182],{"class":133},[109,169002,13608],{"class":126},[109,169004,152647],{"class":278},[109,169006,52612],{"class":126},[109,169008,2519],{"class":133},[109,169010,6267],{"class":126},[109,169012,169013,169015,169017,169019,169021,169023,169025,169027,169029,169031,169033,169035,169037],{"class":111,"line":140},[109,169014,149560],{"class":126},[109,169016,63854],{"class":278},[109,169018,52612],{"class":126},[109,169020,152111],{"class":278},[109,169022,13608],{"class":126},[109,169024,70299],{"class":278},[109,169026,52612],{"class":126},[109,169028,2157],{"class":133},[109,169030,13608],{"class":126},[109,169032,152647],{"class":278},[109,169034,52612],{"class":126},[109,169036,2343],{"class":133},[109,169038,6267],{"class":126},[109,169040,169041,169043,169045,169047,169049,169051,169053,169055,169057,169059,169061,169063,169065],{"class":111,"line":154},[109,169042,149560],{"class":126},[109,169044,63854],{"class":278},[109,169046,52612],{"class":126},[109,169048,160906],{"class":278},[109,169050,13608],{"class":126},[109,169052,70299],{"class":278},[109,169054,52612],{"class":126},[109,169056,2207],{"class":133},[109,169058,13608],{"class":126},[109,169060,152647],{"class":278},[109,169062,52612],{"class":126},[109,169064,2414],{"class":133},[109,169066,6267],{"class":126},[109,169068,169069],{"class":111,"line":161},[109,169070,34421],{"class":126},[109,169072,169073],{"class":111,"line":167},[109,169074,158],{"emptyLinePlaceholder":157},[109,169076,169077],{"class":111,"line":185},[109,169078,158],{"emptyLinePlaceholder":157},[109,169080,169081,169083,169086],{"class":111,"line":201},[109,169082,33122],{"class":122},[109,169084,169085],{"class":211}," filter_students",[109,169087,169088],{"class":126},"(students, condition):\n",[109,169090,169091,169093,169095],{"class":111,"line":206},[109,169092,162398],{"class":126},[109,169094,130],{"class":122},[109,169096,53013],{"class":126},[109,169098,169099,169101,169103,169105],{"class":111,"line":218},[109,169100,1302],{"class":122},[109,169102,153312],{"class":126},[109,169104,27218],{"class":122},[109,169106,153317],{"class":126},[109,169108,169109,169111],{"class":111,"line":223},[109,169110,3852],{"class":122},[109,169112,169113],{"class":126}," condition(student):\n",[109,169115,169116],{"class":111,"line":229},[109,169117,169118],{"class":126},"            result.append(student)\n",[109,169120,169121,169123],{"class":111,"line":244},[109,169122,731],{"class":122},[109,169124,168880],{"class":126},[109,169126,169127],{"class":111,"line":258},[109,169128,158],{"emptyLinePlaceholder":157},[109,169130,169131],{"class":111,"line":263},[109,169132,158],{"emptyLinePlaceholder":157},[109,169134,169135,169137,169139,169142,169144,169147,169149,169151,169153,169155],{"class":111,"line":269},[109,169136,166876],{"class":126},[109,169138,130],{"class":122},[109,169140,169141],{"class":126}," filter_students(students, ",[109,169143,168061],{"class":122},[109,169145,169146],{"class":126}," s: s[",[109,169148,152647],{"class":278},[109,169150,5780],{"class":126},[109,169152,3086],{"class":122},[109,169154,159012],{"class":133},[109,169156,1330],{"class":126},[109,169158,169159,169162,169164,169166,169168,169170,169172,169174,169176,169178],{"class":111,"line":304},[109,169160,169161],{"class":126},"excellent ",[109,169163,130],{"class":122},[109,169165,169141],{"class":126},[109,169167,168061],{"class":122},[109,169169,169146],{"class":126},[109,169171,152647],{"class":278},[109,169173,5780],{"class":126},[109,169175,3086],{"class":122},[109,169177,158963],{"class":133},[109,169179,1330],{"class":126},[109,169181,169182,169185,169187,169189,169191,169193,169195,169197,169199,169201],{"class":111,"line":331},[109,169183,169184],{"class":126},"under_age ",[109,169186,130],{"class":122},[109,169188,169141],{"class":126},[109,169190,168061],{"class":122},[109,169192,169146],{"class":126},[109,169194,70299],{"class":278},[109,169196,5780],{"class":126},[109,169198,1320],{"class":122},[109,169200,157460],{"class":133},[109,169202,1330],{"class":126},[109,169204,169205],{"class":111,"line":336},[109,169206,158],{"emptyLinePlaceholder":157},[109,169208,169209,169211],{"class":111,"line":364},[109,169210,31590],{"class":133},[109,169212,169213],{"class":126},"(passed)\n",[109,169215,169216,169218],{"class":111,"line":391},[109,169217,31590],{"class":133},[109,169219,169220],{"class":126},"(excellent)\n",[109,169222,169223,169225],{"class":111,"line":396},[109,169224,31590],{"class":133},[109,169226,169227],{"class":126},"(under_age)\n",[14,169229,169231],{"id":169230},"_715-易错点","7.15 易错点",[765,169233,169234,169237,169245,169250,169261],{},[30,169235,169236],{},"默认参数不要写可变对象。",[30,169238,169239,169241,169242,169244],{},[106,169240,167707],{}," 是元组，",[106,169243,167822],{}," 是字典。",[30,169246,169247,169249],{},[106,169248,168061],{}," 只适合简单表达式。",[30,169251,169252,102193,169254,169256,169257,169260],{},[106,169253,75219],{},[106,169255,81226],{}," 的结果是迭代器，常用 ",[106,169258,169259],{},"list()"," 转换查看。",[30,169262,169263],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169265,169267],{"id":169266},"_716-本章练习","7.16 本章练习",[765,169269,169270,169277,169283,169288,169293],{},[30,169271,169272,169273,169276],{},"写函数 ",[106,169274,169275],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[30,169278,169272,169279,169282],{},[106,169280,169281],{},"print_user(**kwargs)","，输出用户所有字段。",[30,169284,105541,169285,169287],{},[106,169286,168061],{}," 对学生列表按年龄排序。",[30,169289,105541,169290,169292],{},[106,169291,81226],{}," 找出成绩不及格的学生。",[30,169294,169295],{},"写一个装饰器，统计函数执行前后的提示信息。",[1467,169297,169298],{},"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":104,"searchDepth":119,"depth":119,"links":169300},[169301,169302,169303,169304,169305,169306,169310,169311,169312,169313,169318,169319,169320,169321,169322,169323],{"id":167159,"depth":119,"text":167160},{"id":167273,"depth":119,"text":167274},{"id":167362,"depth":119,"text":167363},{"id":167424,"depth":119,"text":167425},{"id":167570,"depth":119,"text":167571},{"id":167697,"depth":119,"text":167698,"children":169307},[169308,169309],{"id":167701,"depth":140,"text":167702},{"id":167816,"depth":140,"text":167817},{"id":167897,"depth":119,"text":167898},{"id":168055,"depth":119,"text":168056},{"id":168223,"depth":119,"text":168224},{"id":168305,"depth":119,"text":168306,"children":169314},[169315,169316,169317],{"id":168309,"depth":140,"text":168310},{"id":168380,"depth":140,"text":168381},{"id":168457,"depth":140,"text":168458},{"id":168582,"depth":119,"text":168583},{"id":168672,"depth":119,"text":168673},{"id":168803,"depth":119,"text":168804},{"id":168953,"depth":119,"text":168954},{"id":169230,"depth":119,"text":169231},{"id":169266,"depth":119,"text":169267},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167151,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169330,"title":169331,"body":169332,"description":24550,"extension":1476,"meta":171851,"navigation":157,"path":171852,"seo":171853,"stem":171854,"__hash__":171855},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169333,"toc":171826},[169334,169337,169341,169344,169347,169378,169382,169386,169389,169416,169420,169423,169474,169477,169492,169495,169530,169534,169536,169560,169563,169623,169627,169631,169634,169691,169694,169714,169718,169721,169784,169788,169791,169847,169854,169878,169882,169885,169948,169952,169957,170008,170011,170015,170020,170087,170090,170172,170176,170181,170232,170235,170239,170242,170245,170253,170256,170302,170305,170351,170355,170361,170405,170408,170454,170457,170497,170500,170561,170565,170568,170658,170661,170803,170806,170873,170877,170880,170883,171024,171027,171105,171108,171284,171288,171290,171301,171303,171502,171506,171750,171754,171788,171792,171823],[10,169335,169331],{"id":169336},"_8-文件操作",[14,169338,169340],{"id":169339},"_81-文件操作的意义","8.1 文件操作的意义",[19,169342,169343],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169345,169346],{},"常见文件类型：",[765,169348,169349,169355,169361,169367,169373],{},[30,169350,169351,169354],{},[106,169352,169353],{},".txt","：普通文本。",[30,169356,169357,169360],{},[106,169358,169359],{},".csv","：表格文本。",[30,169362,169363,169366],{},[106,169364,169365],{},".json","：结构化数据。",[30,169368,169369,169372],{},[106,169370,169371],{},".log","：日志文件。",[30,169374,169375,169377],{},[106,169376,147527],{},"：Python 源代码。",[14,169379,169381],{"id":169380},"_82-路径","8.2 路径",[51,169383,169385],{"id":169384},"_821-相对路径","8.2.1 相对路径",[19,169387,169388],{},"相对当前运行目录：",[99,169390,169392],{"className":31553,"code":169391,"language":31555,"meta":104,"style":104},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[106,169393,169394],{"__ignoreMap":104},[109,169395,169396,169398,169400,169402,169404,169406,169408,169410,169412,169414],{"class":111,"line":112},[109,169397,88090],{"class":133},[109,169399,714],{"class":126},[109,169401,147971],{"class":278},[109,169403,13608],{"class":126},[109,169405,147976],{"class":278},[109,169407,13608],{"class":126},[109,169409,147981],{"class":6553},[109,169411,130],{"class":122},[109,169413,147986],{"class":278},[109,169415,1330],{"class":126},[51,169417,169419],{"id":169418},"_822-绝对路径","8.2.2 绝对路径",[19,169421,169422],{},"从根目录或盘符开始：",[99,169424,169426],{"className":31553,"code":169425,"language":31555,"meta":104,"style":104},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[106,169427,169428,169451],{"__ignoreMap":104},[109,169429,169430,169432,169434,169437,169439,169441,169443,169445,169447,169449],{"class":111,"line":112},[109,169431,88090],{"class":133},[109,169433,714],{"class":126},[109,169435,169436],{"class":278},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[109,169438,13608],{"class":126},[109,169440,147976],{"class":278},[109,169442,13608],{"class":126},[109,169444,147981],{"class":6553},[109,169446,130],{"class":122},[109,169448,147986],{"class":278},[109,169450,1330],{"class":126},[109,169452,169453,169455,169457,169460,169462,169464,169466,169468,169470,169472],{"class":111,"line":119},[109,169454,88090],{"class":133},[109,169456,714],{"class":126},[109,169458,169459],{"class":278},"\"D:\u002Fdata\u002Fdata.txt\"",[109,169461,13608],{"class":126},[109,169463,147976],{"class":278},[109,169465,13608],{"class":126},[109,169467,147981],{"class":6553},[109,169469,130],{"class":122},[109,169471,147986],{"class":278},[109,169473,1330],{"class":126},[19,169475,169476],{},"Windows 路径建议写成：",[99,169478,169480],{"className":31553,"code":169479,"language":31555,"meta":104,"style":104},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[106,169481,169482],{"__ignoreMap":104},[109,169483,169484,169487,169489],{"class":111,"line":112},[109,169485,169486],{"class":126},"path ",[109,169488,130],{"class":122},[109,169490,169491],{"class":278}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169493,169494],{},"或原始字符串：",[99,169496,169498],{"className":31553,"code":169497,"language":31555,"meta":104,"style":104},"path = r\"D:\\data\\data.txt\"\n",[106,169499,169500],{"__ignoreMap":104},[109,169501,169502,169504,169506,169508,169510,169513,169516,169519,169521,169523,169525,169528],{"class":111,"line":112},[109,169503,169486],{"class":126},[109,169505,130],{"class":122},[109,169507,18294],{"class":122},[109,169509,1789],{"class":278},[109,169511,169512],{"class":49152},"D:",[109,169514,169515],{"class":133},"\\d",[109,169517,169518],{"class":49152},"ata",[109,169520,169515],{"class":133},[109,169522,169518],{"class":49152},[109,169524,2090],{"class":133},[109,169526,169527],{"class":49152},"txt",[109,169529,26308],{"class":278},[14,169531,169533],{"id":169532},"_83-open函数","8.3 open函数",[19,169535,6518],{},[99,169537,169539],{"className":31553,"code":169538,"language":31555,"meta":104,"style":104},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[106,169540,169541],{"__ignoreMap":104},[109,169542,169543,169545,169547,169549,169552,169554,169556,169558],{"class":111,"line":112},[109,169544,46529],{"class":6553},[109,169546,14737],{"class":122},[109,169548,147966],{"class":133},[109,169550,169551],{"class":126},"(文件路径, 打开模式, ",[109,169553,147981],{"class":6553},[109,169555,130],{"class":122},[109,169557,147986],{"class":278},[109,169559,1330],{"class":126},[19,169561,169562],{},"常见模式：",[1677,169564,169565,169574],{},[1680,169566,169567],{},[1683,169568,169569,169572],{},[1686,169570,169571],{},"模式",[1686,169573,27044],{},[1723,169575,169576,169585,169594,169603,169613],{},[1683,169577,169578,169582],{},[1728,169579,169580],{},[106,169581,2202],{},[1728,169583,169584],{},"只读，文件不存在会报错",[1683,169586,169587,169591],{},[1728,169588,169589],{},[106,169590,2327],{},[1728,169592,169593],{},"只写，文件不存在会创建，存在会清空",[1683,169595,169596,169600],{},[1728,169597,169598],{},[106,169599,1776],{},[1728,169601,169602],{},"追加，文件不存在会创建",[1683,169604,169605,169610],{},[1728,169606,169607],{},[106,169608,169609],{},"rb",[1728,169611,169612],{},"二进制只读",[1683,169614,169615,169620],{},[1728,169616,169617],{},[106,169618,169619],{},"wb",[1728,169621,169622],{},"二进制只写",[14,169624,169626],{"id":169625},"_84-读取文件","8.4 读取文件",[51,169628,169630],{"id":169629},"_841-read","8.4.1 read",[19,169632,169633],{},"一次读取全部内容：",[99,169635,169637],{"className":31553,"code":169636,"language":31555,"meta":104,"style":104},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[106,169638,169639,169665,169677,169684],{"__ignoreMap":104},[109,169640,169641,169643,169645,169647,169649,169651,169653,169655,169657,169659,169661,169663],{"class":111,"line":112},[109,169642,46529],{"class":6553},[109,169644,14737],{"class":122},[109,169646,147966],{"class":133},[109,169648,714],{"class":126},[109,169650,147971],{"class":278},[109,169652,13608],{"class":126},[109,169654,147976],{"class":278},[109,169656,13608],{"class":126},[109,169658,147981],{"class":6553},[109,169660,130],{"class":122},[109,169662,147986],{"class":278},[109,169664,1330],{"class":126},[109,169666,169667,169670,169672,169674],{"class":111,"line":119},[109,169668,169669],{"class":126},"content ",[109,169671,130],{"class":122},[109,169673,149328],{"class":6553},[109,169675,169676],{"class":126},".read()\n",[109,169678,169679,169681],{"class":111,"line":140},[109,169680,31590],{"class":133},[109,169682,169683],{"class":126},"(content)\n",[109,169685,169686,169688],{"class":111,"line":154},[109,169687,46529],{"class":6553},[109,169689,169690],{"class":126},".close()\n",[19,169692,169693],{},"可以指定读取字符数：",[99,169695,169697],{"className":31553,"code":169696,"language":31555,"meta":104,"style":104},"content = file.read(10)\n",[106,169698,169699],{"__ignoreMap":104},[109,169700,169701,169703,169705,169707,169710,169712],{"class":111,"line":112},[109,169702,169669],{"class":126},[109,169704,130],{"class":122},[109,169706,149328],{"class":6553},[109,169708,169709],{"class":126},".read(",[109,169711,1008],{"class":133},[109,169713,1330],{"class":126},[51,169715,169717],{"id":169716},"_842-readline","8.4.2 readline",[19,169719,169720],{},"一次读取一行：",[99,169722,169724],{"className":31553,"code":169723,"language":31555,"meta":104,"style":104},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[106,169725,169726,169752,169756,169767,169774,169778],{"__ignoreMap":104},[109,169727,169728,169730,169732,169734,169736,169738,169740,169742,169744,169746,169748,169750],{"class":111,"line":112},[109,169729,46529],{"class":6553},[109,169731,14737],{"class":122},[109,169733,147966],{"class":133},[109,169735,714],{"class":126},[109,169737,147971],{"class":278},[109,169739,13608],{"class":126},[109,169741,147976],{"class":278},[109,169743,13608],{"class":126},[109,169745,147981],{"class":6553},[109,169747,130],{"class":122},[109,169749,147986],{"class":278},[109,169751,1330],{"class":126},[109,169753,169754],{"class":111,"line":119},[109,169755,158],{"emptyLinePlaceholder":157},[109,169757,169758,169760,169762,169764],{"class":111,"line":140},[109,169759,148427],{"class":126},[109,169761,130],{"class":122},[109,169763,149328],{"class":6553},[109,169765,169766],{"class":126},".readline()\n",[109,169768,169769,169771],{"class":111,"line":154},[109,169770,31590],{"class":133},[109,169772,169773],{"class":126},"(line)\n",[109,169775,169776],{"class":111,"line":161},[109,169777,158],{"emptyLinePlaceholder":157},[109,169779,169780,169782],{"class":111,"line":167},[109,169781,46529],{"class":6553},[109,169783,169690],{"class":126},[51,169785,169787],{"id":169786},"_843-readlines","8.4.3 readlines",[19,169789,169790],{},"读取所有行，返回列表：",[99,169792,169794],{"className":31553,"code":169793,"language":31555,"meta":104,"style":104},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[106,169795,169796,169822,169834,169841],{"__ignoreMap":104},[109,169797,169798,169800,169802,169804,169806,169808,169810,169812,169814,169816,169818,169820],{"class":111,"line":112},[109,169799,46529],{"class":6553},[109,169801,14737],{"class":122},[109,169803,147966],{"class":133},[109,169805,714],{"class":126},[109,169807,147971],{"class":278},[109,169809,13608],{"class":126},[109,169811,147976],{"class":278},[109,169813,13608],{"class":126},[109,169815,147981],{"class":6553},[109,169817,130],{"class":122},[109,169819,147986],{"class":278},[109,169821,1330],{"class":126},[109,169823,169824,169827,169829,169831],{"class":111,"line":119},[109,169825,169826],{"class":126},"lines ",[109,169828,130],{"class":122},[109,169830,149328],{"class":6553},[109,169832,169833],{"class":126},".readlines()\n",[109,169835,169836,169838],{"class":111,"line":140},[109,169837,31590],{"class":133},[109,169839,169840],{"class":126},"(lines)\n",[109,169842,169843,169845],{"class":111,"line":154},[109,169844,46529],{"class":6553},[109,169846,169690],{"class":126},[19,169848,169849,169850,169853],{},"每一行通常带有换行符，可以用 ",[106,169851,169852],{},"strip()"," 去掉：",[99,169855,169857],{"className":31553,"code":169856,"language":31555,"meta":104,"style":104},"for line in lines:\n    print(line.strip())\n",[106,169858,169859,169871],{"__ignoreMap":104},[109,169860,169861,169863,169866,169868],{"class":111,"line":112},[109,169862,4372],{"class":122},[109,169864,169865],{"class":126}," line ",[109,169867,27218],{"class":122},[109,169869,169870],{"class":126}," lines:\n",[109,169872,169873,169875],{"class":111,"line":119},[109,169874,32474],{"class":133},[109,169876,169877],{"class":126},"(line.strip())\n",[51,169879,169881],{"id":169880},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169883,169884],{},"推荐读取大文件时使用：",[99,169886,169888],{"className":31553,"code":169887,"language":31555,"meta":104,"style":104},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[106,169889,169890,169916,169920,169932,169938,169942],{"__ignoreMap":104},[109,169891,169892,169894,169896,169898,169900,169902,169904,169906,169908,169910,169912,169914],{"class":111,"line":112},[109,169893,46529],{"class":6553},[109,169895,14737],{"class":122},[109,169897,147966],{"class":133},[109,169899,714],{"class":126},[109,169901,147971],{"class":278},[109,169903,13608],{"class":126},[109,169905,147976],{"class":278},[109,169907,13608],{"class":126},[109,169909,147981],{"class":6553},[109,169911,130],{"class":122},[109,169913,147986],{"class":278},[109,169915,1330],{"class":126},[109,169917,169918],{"class":111,"line":119},[109,169919,158],{"emptyLinePlaceholder":157},[109,169921,169922,169924,169926,169928,169930],{"class":111,"line":140},[109,169923,4372],{"class":122},[109,169925,169865],{"class":126},[109,169927,27218],{"class":122},[109,169929,149328],{"class":6553},[109,169931,5082],{"class":126},[109,169933,169934,169936],{"class":111,"line":154},[109,169935,32474],{"class":133},[109,169937,169877],{"class":126},[109,169939,169940],{"class":111,"line":161},[109,169941,158],{"emptyLinePlaceholder":157},[109,169943,169944,169946],{"class":111,"line":167},[109,169945,46529],{"class":6553},[109,169947,169690],{"class":126},[14,169949,169951],{"id":169950},"_85-with语句","8.5 with语句",[19,169953,169954,169956],{},[106,169955,109008],{}," 会自动关闭文件，推荐使用。",[99,169958,169960],{"className":31553,"code":169959,"language":31555,"meta":104,"style":104},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[106,169961,169962,169992,170002],{"__ignoreMap":104},[109,169963,169964,169966,169968,169970,169972,169974,169976,169978,169980,169982,169984,169986,169988,169990],{"class":111,"line":112},[109,169965,109008],{"class":122},[109,169967,147966],{"class":133},[109,169969,714],{"class":126},[109,169971,147971],{"class":278},[109,169973,13608],{"class":126},[109,169975,147976],{"class":278},[109,169977,13608],{"class":126},[109,169979,147981],{"class":6553},[109,169981,130],{"class":122},[109,169983,147986],{"class":278},[109,169985,14887],{"class":126},[109,169987,32558],{"class":122},[109,169989,149328],{"class":6553},[109,169991,5082],{"class":126},[109,169993,169994,169996,169998,170000],{"class":111,"line":119},[109,169995,147998],{"class":126},[109,169997,130],{"class":122},[109,169999,149328],{"class":6553},[109,170001,169676],{"class":126},[109,170003,170004,170006],{"class":111,"line":140},[109,170005,32474],{"class":133},[109,170007,169683],{"class":126},[19,170009,170010],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170012,170014],{"id":170013},"_86-写入文件","8.6 写入文件",[19,170016,170017,170019],{},[106,170018,2327],{}," 模式会清空原文件。",[99,170021,170023],{"className":31553,"code":170022,"language":31555,"meta":104,"style":104},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[106,170024,170025,170055,170072],{"__ignoreMap":104},[109,170026,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053],{"class":111,"line":112},[109,170028,109008],{"class":122},[109,170030,147966],{"class":133},[109,170032,714],{"class":126},[109,170034,147971],{"class":278},[109,170036,13608],{"class":126},[109,170038,153151],{"class":278},[109,170040,13608],{"class":126},[109,170042,147981],{"class":6553},[109,170044,130],{"class":122},[109,170046,147986],{"class":278},[109,170048,14887],{"class":126},[109,170050,32558],{"class":122},[109,170052,149328],{"class":6553},[109,170054,5082],{"class":126},[109,170056,170057,170060,170063,170066,170068,170070],{"class":111,"line":119},[109,170058,170059],{"class":6553},"    file",[109,170061,170062],{"class":126},".write(",[109,170064,170065],{"class":278},"\"hello",[109,170067,157700],{"class":133},[109,170069,1789],{"class":278},[109,170071,1330],{"class":126},[109,170073,170074,170076,170078,170081,170083,170085],{"class":111,"line":140},[109,170075,170059],{"class":6553},[109,170077,170062],{"class":126},[109,170079,170080],{"class":278},"\"python",[109,170082,157700],{"class":133},[109,170084,1789],{"class":278},[109,170086,1330],{"class":126},[19,170088,170089],{},"写入多行：",[99,170091,170093],{"className":31553,"code":170092,"language":31555,"meta":104,"style":104},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[106,170094,170095,170130,170134,170165],{"__ignoreMap":104},[109,170096,170097,170099,170101,170103,170106,170108,170110,170112,170115,170117,170119,170121,170124,170126,170128],{"class":111,"line":112},[109,170098,169826],{"class":126},[109,170100,130],{"class":122},[109,170102,53401],{"class":126},[109,170104,170105],{"class":278},"\"小明,18",[109,170107,157700],{"class":133},[109,170109,1789],{"class":278},[109,170111,13608],{"class":126},[109,170113,170114],{"class":278},"\"小红,17",[109,170116,157700],{"class":133},[109,170118,1789],{"class":278},[109,170120,13608],{"class":126},[109,170122,170123],{"class":278},"\"小刚,19",[109,170125,157700],{"class":133},[109,170127,1789],{"class":278},[109,170129,34421],{"class":126},[109,170131,170132],{"class":111,"line":119},[109,170133,158],{"emptyLinePlaceholder":157},[109,170135,170136,170138,170140,170142,170145,170147,170149,170151,170153,170155,170157,170159,170161,170163],{"class":111,"line":140},[109,170137,109008],{"class":122},[109,170139,147966],{"class":133},[109,170141,714],{"class":126},[109,170143,170144],{"class":278},"\"students.txt\"",[109,170146,13608],{"class":126},[109,170148,153151],{"class":278},[109,170150,13608],{"class":126},[109,170152,147981],{"class":6553},[109,170154,130],{"class":122},[109,170156,147986],{"class":278},[109,170158,14887],{"class":126},[109,170160,32558],{"class":122},[109,170162,149328],{"class":6553},[109,170164,5082],{"class":126},[109,170166,170167,170169],{"class":111,"line":154},[109,170168,170059],{"class":6553},[109,170170,170171],{"class":126},".writelines(lines)\n",[14,170173,170175],{"id":170174},"_87-追加文件","8.7 追加文件",[19,170177,170178,170180],{},[106,170179,1776],{}," 模式不会清空原内容，而是在末尾追加。",[99,170182,170184],{"className":31553,"code":170183,"language":31555,"meta":104,"style":104},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[106,170185,170186,170217],{"__ignoreMap":104},[109,170187,170188,170190,170192,170194,170197,170199,170201,170203,170205,170207,170209,170211,170213,170215],{"class":111,"line":112},[109,170189,109008],{"class":122},[109,170191,147966],{"class":133},[109,170193,714],{"class":126},[109,170195,170196],{"class":278},"\"log.txt\"",[109,170198,13608],{"class":126},[109,170200,166500],{"class":278},[109,170202,13608],{"class":126},[109,170204,147981],{"class":6553},[109,170206,130],{"class":122},[109,170208,147986],{"class":278},[109,170210,14887],{"class":126},[109,170212,32558],{"class":122},[109,170214,149328],{"class":6553},[109,170216,5082],{"class":126},[109,170218,170219,170221,170223,170226,170228,170230],{"class":111,"line":119},[109,170220,170059],{"class":6553},[109,170222,170062],{"class":126},[109,170224,170225],{"class":278},"\"程序启动",[109,170227,157700],{"class":133},[109,170229,1789],{"class":278},[109,170231,1330],{"class":126},[19,170233,170234],{},"日志类文件常用追加模式。",[14,170236,170238],{"id":170237},"_88-文件编码","8.8 文件编码",[19,170240,170241],{},"编码决定文字如何保存为字节。",[19,170243,170244],{},"常见编码：",[765,170246,170247,170250],{},[30,170248,170249],{},"UTF-8：推荐。",[30,170251,170252],{},"GBK：部分 Windows 中文文件常见。",[19,170254,170255],{},"读取文件乱码时，可以尝试：",[99,170257,170259],{"className":31553,"code":170258,"language":31555,"meta":104,"style":104},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[106,170260,170261,170292],{"__ignoreMap":104},[109,170262,170263,170265,170267,170269,170271,170273,170275,170277,170279,170281,170284,170286,170288,170290],{"class":111,"line":112},[109,170264,109008],{"class":122},[109,170266,147966],{"class":133},[109,170268,714],{"class":126},[109,170270,147971],{"class":278},[109,170272,13608],{"class":126},[109,170274,147976],{"class":278},[109,170276,13608],{"class":126},[109,170278,147981],{"class":6553},[109,170280,130],{"class":122},[109,170282,170283],{"class":278},"\"gbk\"",[109,170285,14887],{"class":126},[109,170287,32558],{"class":122},[109,170289,149328],{"class":6553},[109,170291,5082],{"class":126},[109,170293,170294,170296,170298,170300],{"class":111,"line":119},[109,170295,147998],{"class":126},[109,170297,130],{"class":122},[109,170299,149328],{"class":6553},[109,170301,169676],{"class":126},[19,170303,170304],{},"写文件时建议统一 UTF-8：",[99,170306,170308],{"className":31553,"code":170307,"language":31555,"meta":104,"style":104},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[106,170309,170310,170340],{"__ignoreMap":104},[109,170311,170312,170314,170316,170318,170320,170322,170324,170326,170328,170330,170332,170334,170336,170338],{"class":111,"line":112},[109,170313,109008],{"class":122},[109,170315,147966],{"class":133},[109,170317,714],{"class":126},[109,170319,147971],{"class":278},[109,170321,13608],{"class":126},[109,170323,153151],{"class":278},[109,170325,13608],{"class":126},[109,170327,147981],{"class":6553},[109,170329,130],{"class":122},[109,170331,147986],{"class":278},[109,170333,14887],{"class":126},[109,170335,32558],{"class":122},[109,170337,149328],{"class":6553},[109,170339,5082],{"class":126},[109,170341,170342,170344,170346,170349],{"class":111,"line":119},[109,170343,170059],{"class":6553},[109,170345,170062],{"class":126},[109,170347,170348],{"class":278},"\"中文内容\"",[109,170350,1330],{"class":126},[14,170352,170354],{"id":170353},"_89-pathlib","8.9 pathlib",[19,170356,170357,170360],{},[106,170358,170359],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[99,170362,170364],{"className":31553,"code":170363,"language":31555,"meta":104,"style":104},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[106,170365,170366,170376,170380,170398],{"__ignoreMap":104},[109,170367,170368,170370,170372,170374],{"class":111,"line":112},[109,170369,31912],{"class":122},[109,170371,109486],{"class":126},[109,170373,31567],{"class":122},[109,170375,109491],{"class":126},[109,170377,170378],{"class":111,"line":119},[109,170379,158],{"emptyLinePlaceholder":157},[109,170381,170382,170384,170386,170388,170391,170393,170395],{"class":111,"line":140},[109,170383,169486],{"class":126},[109,170385,130],{"class":122},[109,170387,109720],{"class":126},[109,170389,170390],{"class":278},"\"data\"",[109,170392,14887],{"class":126},[109,170394,2116],{"class":122},[109,170396,170397],{"class":278}," \"students.txt\"\n",[109,170399,170400,170402],{"class":111,"line":154},[109,170401,31590],{"class":133},[109,170403,170404],{"class":126},"(path)\n",[19,170406,170407],{},"创建目录：",[99,170409,170411],{"className":31553,"code":170410,"language":31555,"meta":104,"style":104},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[106,170412,170413,170423,170427,170440],{"__ignoreMap":104},[109,170414,170415,170417,170419,170421],{"class":111,"line":112},[109,170416,31912],{"class":122},[109,170418,109486],{"class":126},[109,170420,31567],{"class":122},[109,170422,109491],{"class":126},[109,170424,170425],{"class":111,"line":119},[109,170426,158],{"emptyLinePlaceholder":157},[109,170428,170429,170432,170434,170436,170438],{"class":111,"line":140},[109,170430,170431],{"class":126},"data_dir ",[109,170433,130],{"class":122},[109,170435,109720],{"class":126},[109,170437,170390],{"class":278},[109,170439,1330],{"class":126},[109,170441,170442,170445,170448,170450,170452],{"class":111,"line":154},[109,170443,170444],{"class":126},"data_dir.mkdir(",[109,170446,170447],{"class":6553},"exist_ok",[109,170449,130],{"class":122},[109,170451,32651],{"class":133},[109,170453,1330],{"class":126},[19,170455,170456],{},"判断文件是否存在：",[99,170458,170460],{"className":31553,"code":170459,"language":31555,"meta":104,"style":104},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[106,170461,170462,170475,170479,170486],{"__ignoreMap":104},[109,170463,170464,170466,170468,170470,170473],{"class":111,"line":112},[109,170465,169486],{"class":126},[109,170467,130],{"class":122},[109,170469,109720],{"class":126},[109,170471,170472],{"class":278},"\"data\u002Fstudents.txt\"",[109,170474,1330],{"class":126},[109,170476,170477],{"class":111,"line":119},[109,170478,158],{"emptyLinePlaceholder":157},[109,170480,170481,170483],{"class":111,"line":140},[109,170482,2922],{"class":122},[109,170484,170485],{"class":126}," path.exists():\n",[109,170487,170488,170490,170492,170495],{"class":111,"line":154},[109,170489,32474],{"class":133},[109,170491,714],{"class":126},[109,170493,170494],{"class":278},"\"文件存在\"",[109,170496,1330],{"class":126},[19,170498,170499],{},"读写文本：",[99,170501,170503],{"className":31553,"code":170502,"language":31555,"meta":104,"style":104},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[106,170504,170505,170517,170521,170538,170555],{"__ignoreMap":104},[109,170506,170507,170509,170511,170513,170515],{"class":111,"line":112},[109,170508,169486],{"class":126},[109,170510,130],{"class":122},[109,170512,109720],{"class":126},[109,170514,147971],{"class":278},[109,170516,1330],{"class":126},[109,170518,170519],{"class":111,"line":119},[109,170520,158],{"emptyLinePlaceholder":157},[109,170522,170523,170526,170528,170530,170532,170534,170536],{"class":111,"line":140},[109,170524,170525],{"class":126},"path.write_text(",[109,170527,147051],{"class":278},[109,170529,13608],{"class":126},[109,170531,147981],{"class":6553},[109,170533,130],{"class":122},[109,170535,147986],{"class":278},[109,170537,1330],{"class":126},[109,170539,170540,170542,170544,170547,170549,170551,170553],{"class":111,"line":154},[109,170541,169669],{"class":126},[109,170543,130],{"class":122},[109,170545,170546],{"class":126}," path.read_text(",[109,170548,147981],{"class":6553},[109,170550,130],{"class":122},[109,170552,147986],{"class":278},[109,170554,1330],{"class":126},[109,170556,170557,170559],{"class":111,"line":161},[109,170558,31590],{"class":133},[109,170560,169683],{"class":126},[14,170562,170564],{"id":170563},"_810-json文件","8.10 JSON文件",[19,170566,170567],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[99,170569,170571],{"className":31553,"code":170570,"language":31555,"meta":104,"style":104},"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",[106,170572,170573,170579,170583,170591,170601,170611,170619,170623,170627,170652],{"__ignoreMap":104},[109,170574,170575,170577],{"class":111,"line":112},[109,170576,31567],{"class":122},[109,170578,148266],{"class":126},[109,170580,170581],{"class":111,"line":119},[109,170582,158],{"emptyLinePlaceholder":157},[109,170584,170585,170587,170589],{"class":111,"line":140},[109,170586,150656],{"class":126},[109,170588,130],{"class":122},[109,170590,16745],{"class":126},[109,170592,170593,170595,170597,170599],{"class":111,"line":154},[109,170594,148195],{"class":278},[109,170596,52612],{"class":126},[109,170598,151063],{"class":278},[109,170600,32641],{"class":126},[109,170602,170603,170605,170607,170609],{"class":111,"line":161},[109,170604,165712],{"class":278},[109,170606,52612],{"class":126},[109,170608,2182],{"class":133},[109,170610,32641],{"class":126},[109,170612,170613,170615,170617],{"class":111,"line":167},[109,170614,165723],{"class":278},[109,170616,52612],{"class":126},[109,170618,165728],{"class":133},[109,170620,170621],{"class":111,"line":185},[109,170622,742],{"class":126},[109,170624,170625],{"class":111,"line":201},[109,170626,158],{"emptyLinePlaceholder":157},[109,170628,170629,170631,170633,170636,170638,170640,170642,170644,170646,170648,170650],{"class":111,"line":206},[109,170630,157619],{"class":126},[109,170632,130],{"class":122},[109,170634,170635],{"class":126}," json.dumps(student, ",[109,170637,148312],{"class":6553},[109,170639,130],{"class":122},[109,170641,35162],{"class":133},[109,170643,13608],{"class":126},[109,170645,153187],{"class":6553},[109,170647,130],{"class":122},[109,170649,1618],{"class":133},[109,170651,1330],{"class":126},[109,170653,170654,170656],{"class":111,"line":218},[109,170655,31590],{"class":133},[109,170657,165246],{"class":126},[19,170659,170660],{},"写入 JSON 文件：",[99,170662,170664],{"className":31553,"code":170663,"language":31555,"meta":104,"style":104},"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",[106,170665,170666,170672,170676,170684,170712,170740,170744,170748,170778],{"__ignoreMap":104},[109,170667,170668,170670],{"class":111,"line":112},[109,170669,31567],{"class":122},[109,170671,148266],{"class":126},[109,170673,170674],{"class":111,"line":119},[109,170675,158],{"emptyLinePlaceholder":157},[109,170677,170678,170680,170682],{"class":111,"line":140},[109,170679,160891],{"class":126},[109,170681,130],{"class":122},[109,170683,56622],{"class":126},[109,170685,170686,170688,170690,170692,170694,170696,170698,170700,170702,170704,170706,170708,170710],{"class":111,"line":154},[109,170687,149560],{"class":126},[109,170689,63854],{"class":278},[109,170691,52612],{"class":126},[109,170693,151063],{"class":278},[109,170695,13608],{"class":126},[109,170697,70299],{"class":278},[109,170699,52612],{"class":126},[109,170701,2182],{"class":133},[109,170703,13608],{"class":126},[109,170705,152647],{"class":278},[109,170707,52612],{"class":126},[109,170709,2519],{"class":133},[109,170711,6267],{"class":126},[109,170713,170714,170716,170718,170720,170722,170724,170726,170728,170730,170732,170734,170736,170738],{"class":111,"line":161},[109,170715,149560],{"class":126},[109,170717,63854],{"class":278},[109,170719,52612],{"class":126},[109,170721,152111],{"class":278},[109,170723,13608],{"class":126},[109,170725,70299],{"class":278},[109,170727,52612],{"class":126},[109,170729,2157],{"class":133},[109,170731,13608],{"class":126},[109,170733,152647],{"class":278},[109,170735,52612],{"class":126},[109,170737,2343],{"class":133},[109,170739,6267],{"class":126},[109,170741,170742],{"class":111,"line":167},[109,170743,34421],{"class":126},[109,170745,170746],{"class":111,"line":185},[109,170747,158],{"emptyLinePlaceholder":157},[109,170749,170750,170752,170754,170756,170758,170760,170762,170764,170766,170768,170770,170772,170774,170776],{"class":111,"line":201},[109,170751,109008],{"class":122},[109,170753,147966],{"class":133},[109,170755,714],{"class":126},[109,170757,153006],{"class":278},[109,170759,13608],{"class":126},[109,170761,153151],{"class":278},[109,170763,13608],{"class":126},[109,170765,147981],{"class":6553},[109,170767,130],{"class":122},[109,170769,147986],{"class":278},[109,170771,14887],{"class":126},[109,170773,32558],{"class":122},[109,170775,149328],{"class":6553},[109,170777,5082],{"class":126},[109,170779,170780,170783,170785,170787,170789,170791,170793,170795,170797,170799,170801],{"class":111,"line":206},[109,170781,170782],{"class":126},"    json.dump(students, ",[109,170784,46529],{"class":6553},[109,170786,13608],{"class":126},[109,170788,148312],{"class":6553},[109,170790,130],{"class":122},[109,170792,35162],{"class":133},[109,170794,13608],{"class":126},[109,170796,153187],{"class":6553},[109,170798,130],{"class":122},[109,170800,1618],{"class":133},[109,170802,1330],{"class":126},[19,170804,170805],{},"读取 JSON 文件：",[99,170807,170809],{"className":31553,"code":170808,"language":31555,"meta":104,"style":104},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[106,170810,170811,170817,170821,170851,170863,170867],{"__ignoreMap":104},[109,170812,170813,170815],{"class":111,"line":112},[109,170814,31567],{"class":122},[109,170816,148266],{"class":126},[109,170818,170819],{"class":111,"line":119},[109,170820,158],{"emptyLinePlaceholder":157},[109,170822,170823,170825,170827,170829,170831,170833,170835,170837,170839,170841,170843,170845,170847,170849],{"class":111,"line":140},[109,170824,109008],{"class":122},[109,170826,147966],{"class":133},[109,170828,714],{"class":126},[109,170830,153006],{"class":278},[109,170832,13608],{"class":126},[109,170834,147976],{"class":278},[109,170836,13608],{"class":126},[109,170838,147981],{"class":6553},[109,170840,130],{"class":122},[109,170842,147986],{"class":278},[109,170844,14887],{"class":126},[109,170846,32558],{"class":122},[109,170848,149328],{"class":6553},[109,170850,5082],{"class":126},[109,170852,170853,170855,170857,170859,170861],{"class":111,"line":154},[109,170854,154212],{"class":126},[109,170856,130],{"class":122},[109,170858,149339],{"class":126},[109,170860,46529],{"class":6553},[109,170862,1330],{"class":126},[109,170864,170865],{"class":111,"line":161},[109,170866,158],{"emptyLinePlaceholder":157},[109,170868,170869,170871],{"class":111,"line":167},[109,170870,31590],{"class":133},[109,170872,166170],{"class":126},[14,170874,170876],{"id":170875},"_811-csv文件","8.11 CSV文件",[19,170878,170879],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170881,170882],{},"写入 CSV：",[99,170884,170886],{"className":31553,"code":170885,"language":31555,"meta":104,"style":104},"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",[106,170887,170888,170895,170899,170907,170925,170941,170957,170961,170965,171005,171019],{"__ignoreMap":104},[109,170889,170890,170892],{"class":111,"line":112},[109,170891,31567],{"class":122},[109,170893,170894],{"class":126}," csv\n",[109,170896,170897],{"class":111,"line":119},[109,170898,158],{"emptyLinePlaceholder":157},[109,170900,170901,170903,170905],{"class":111,"line":140},[109,170902,160891],{"class":126},[109,170904,130],{"class":122},[109,170906,56622],{"class":126},[109,170908,170909,170912,170914,170916,170918,170920,170923],{"class":111,"line":154},[109,170910,170911],{"class":126},"    [",[109,170913,74274],{"class":278},[109,170915,13608],{"class":126},[109,170917,74307],{"class":278},[109,170919,13608],{"class":126},[109,170921,170922],{"class":278},"\"成绩\"",[109,170924,89011],{"class":126},[109,170926,170927,170929,170931,170933,170935,170937,170939],{"class":111,"line":161},[109,170928,170911],{"class":126},[109,170930,151063],{"class":278},[109,170932,13608],{"class":126},[109,170934,2182],{"class":133},[109,170936,13608],{"class":126},[109,170938,2519],{"class":133},[109,170940,89011],{"class":126},[109,170942,170943,170945,170947,170949,170951,170953,170955],{"class":111,"line":167},[109,170944,170911],{"class":126},[109,170946,152111],{"class":278},[109,170948,13608],{"class":126},[109,170950,2157],{"class":133},[109,170952,13608],{"class":126},[109,170954,2343],{"class":133},[109,170956,89011],{"class":126},[109,170958,170959],{"class":111,"line":185},[109,170960,34421],{"class":126},[109,170962,170963],{"class":111,"line":201},[109,170964,158],{"emptyLinePlaceholder":157},[109,170966,170967,170969,170971,170973,170976,170978,170980,170982,170984,170986,170988,170990,170993,170995,170997,170999,171001,171003],{"class":111,"line":206},[109,170968,109008],{"class":122},[109,170970,147966],{"class":133},[109,170972,714],{"class":126},[109,170974,170975],{"class":278},"\"students.csv\"",[109,170977,13608],{"class":126},[109,170979,153151],{"class":278},[109,170981,13608],{"class":126},[109,170983,147981],{"class":6553},[109,170985,130],{"class":122},[109,170987,147986],{"class":278},[109,170989,13608],{"class":126},[109,170991,170992],{"class":6553},"newline",[109,170994,130],{"class":122},[109,170996,8978],{"class":278},[109,170998,14887],{"class":126},[109,171000,32558],{"class":122},[109,171002,149328],{"class":6553},[109,171004,5082],{"class":126},[109,171006,171007,171010,171012,171015,171017],{"class":111,"line":218},[109,171008,171009],{"class":126},"    writer ",[109,171011,130],{"class":122},[109,171013,171014],{"class":126}," csv.writer(",[109,171016,46529],{"class":6553},[109,171018,1330],{"class":126},[109,171020,171021],{"class":111,"line":223},[109,171022,171023],{"class":126},"    writer.writerows(students)\n",[19,171025,171026],{},"读取 CSV：",[99,171028,171030],{"className":31553,"code":171029,"language":31555,"meta":104,"style":104},"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",[106,171031,171032,171038,171042,171072,171086,171098],{"__ignoreMap":104},[109,171033,171034,171036],{"class":111,"line":112},[109,171035,31567],{"class":122},[109,171037,170894],{"class":126},[109,171039,171040],{"class":111,"line":119},[109,171041,158],{"emptyLinePlaceholder":157},[109,171043,171044,171046,171048,171050,171052,171054,171056,171058,171060,171062,171064,171066,171068,171070],{"class":111,"line":140},[109,171045,109008],{"class":122},[109,171047,147966],{"class":133},[109,171049,714],{"class":126},[109,171051,170975],{"class":278},[109,171053,13608],{"class":126},[109,171055,147976],{"class":278},[109,171057,13608],{"class":126},[109,171059,147981],{"class":6553},[109,171061,130],{"class":122},[109,171063,147986],{"class":278},[109,171065,14887],{"class":126},[109,171067,32558],{"class":122},[109,171069,149328],{"class":6553},[109,171071,5082],{"class":126},[109,171073,171074,171077,171079,171082,171084],{"class":111,"line":154},[109,171075,171076],{"class":126},"    reader ",[109,171078,130],{"class":122},[109,171080,171081],{"class":126}," csv.reader(",[109,171083,46529],{"class":6553},[109,171085,1330],{"class":126},[109,171087,171088,171090,171093,171095],{"class":111,"line":161},[109,171089,1302],{"class":122},[109,171091,171092],{"class":126}," row ",[109,171094,27218],{"class":122},[109,171096,171097],{"class":126}," reader:\n",[109,171099,171100,171102],{"class":111,"line":167},[109,171101,33626],{"class":133},[109,171103,171104],{"class":126},"(row)\n",[19,171106,171107],{},"使用字典写入：",[99,171109,171111],{"className":31553,"code":171110,"language":31555,"meta":104,"style":104},"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",[106,171112,171113,171119,171123,171131,171159,171187,171191,171195,171233,171254,171275,171280],{"__ignoreMap":104},[109,171114,171115,171117],{"class":111,"line":112},[109,171116,31567],{"class":122},[109,171118,170894],{"class":126},[109,171120,171121],{"class":111,"line":119},[109,171122,158],{"emptyLinePlaceholder":157},[109,171124,171125,171127,171129],{"class":111,"line":140},[109,171126,160891],{"class":126},[109,171128,130],{"class":122},[109,171130,56622],{"class":126},[109,171132,171133,171135,171137,171139,171141,171143,171145,171147,171149,171151,171153,171155,171157],{"class":111,"line":154},[109,171134,149560],{"class":126},[109,171136,63854],{"class":278},[109,171138,52612],{"class":126},[109,171140,151063],{"class":278},[109,171142,13608],{"class":126},[109,171144,70299],{"class":278},[109,171146,52612],{"class":126},[109,171148,2182],{"class":133},[109,171150,13608],{"class":126},[109,171152,152647],{"class":278},[109,171154,52612],{"class":126},[109,171156,2519],{"class":133},[109,171158,6267],{"class":126},[109,171160,171161,171163,171165,171167,171169,171171,171173,171175,171177,171179,171181,171183,171185],{"class":111,"line":161},[109,171162,149560],{"class":126},[109,171164,63854],{"class":278},[109,171166,52612],{"class":126},[109,171168,152111],{"class":278},[109,171170,13608],{"class":126},[109,171172,70299],{"class":278},[109,171174,52612],{"class":126},[109,171176,2157],{"class":133},[109,171178,13608],{"class":126},[109,171180,152647],{"class":278},[109,171182,52612],{"class":126},[109,171184,2343],{"class":133},[109,171186,6267],{"class":126},[109,171188,171189],{"class":111,"line":167},[109,171190,34421],{"class":126},[109,171192,171193],{"class":111,"line":185},[109,171194,158],{"emptyLinePlaceholder":157},[109,171196,171197,171199,171201,171203,171205,171207,171209,171211,171213,171215,171217,171219,171221,171223,171225,171227,171229,171231],{"class":111,"line":201},[109,171198,109008],{"class":122},[109,171200,147966],{"class":133},[109,171202,714],{"class":126},[109,171204,170975],{"class":278},[109,171206,13608],{"class":126},[109,171208,153151],{"class":278},[109,171210,13608],{"class":126},[109,171212,147981],{"class":6553},[109,171214,130],{"class":122},[109,171216,147986],{"class":278},[109,171218,13608],{"class":126},[109,171220,170992],{"class":6553},[109,171222,130],{"class":122},[109,171224,8978],{"class":278},[109,171226,14887],{"class":126},[109,171228,32558],{"class":122},[109,171230,149328],{"class":6553},[109,171232,5082],{"class":126},[109,171234,171235,171238,171240,171242,171244,171246,171248,171250,171252],{"class":111,"line":206},[109,171236,171237],{"class":126},"    fieldnames ",[109,171239,130],{"class":122},[109,171241,53401],{"class":126},[109,171243,63854],{"class":278},[109,171245,13608],{"class":126},[109,171247,70299],{"class":278},[109,171249,13608],{"class":126},[109,171251,152647],{"class":278},[109,171253,34421],{"class":126},[109,171255,171256,171258,171260,171263,171265,171267,171270,171272],{"class":111,"line":218},[109,171257,171009],{"class":126},[109,171259,130],{"class":122},[109,171261,171262],{"class":126}," csv.DictWriter(",[109,171264,46529],{"class":6553},[109,171266,13608],{"class":126},[109,171268,171269],{"class":6553},"fieldnames",[109,171271,130],{"class":122},[109,171273,171274],{"class":126},"fieldnames)\n",[109,171276,171277],{"class":111,"line":223},[109,171278,171279],{"class":126},"    writer.writeheader()\n",[109,171281,171282],{"class":111,"line":229},[109,171283,171023],{"class":126},[14,171285,171287],{"id":171286},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171289,124467],{},[765,171291,171292,171295,171298],{},[30,171293,171294],{},"读取文本文件。",[30,171296,171297],{},"统计每个单词出现次数。",[30,171299,171300],{},"输出出现次数最多的前 10 个单词。",[19,171302,11353],{},[99,171304,171306],{"className":31553,"code":171305,"language":31555,"meta":104,"style":104},"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",[106,171307,171308,171318,171322,171335,171351,171355,171365,171374,171378,171390,171410,171419,171423,171441,171445,171475,171479,171495],{"__ignoreMap":104},[109,171309,171310,171312,171314,171316],{"class":111,"line":112},[109,171311,31912],{"class":122},[109,171313,109486],{"class":126},[109,171315,31567],{"class":122},[109,171317,109491],{"class":126},[109,171319,171320],{"class":111,"line":119},[109,171321,158],{"emptyLinePlaceholder":157},[109,171323,171324,171326,171328,171330,171333],{"class":111,"line":140},[109,171325,169486],{"class":126},[109,171327,130],{"class":122},[109,171329,109720],{"class":126},[109,171331,171332],{"class":278},"\"article.txt\"",[109,171334,1330],{"class":126},[109,171336,171337,171339,171341,171343,171345,171347,171349],{"class":111,"line":154},[109,171338,169669],{"class":126},[109,171340,130],{"class":122},[109,171342,170546],{"class":126},[109,171344,147981],{"class":6553},[109,171346,130],{"class":122},[109,171348,147986],{"class":278},[109,171350,1330],{"class":126},[109,171352,171353],{"class":111,"line":161},[109,171354,158],{"emptyLinePlaceholder":157},[109,171356,171357,171360,171362],{"class":111,"line":167},[109,171358,171359],{"class":126},"words ",[109,171361,130],{"class":122},[109,171363,171364],{"class":126}," content.lower().split()\n",[109,171366,171367,171370,171372],{"class":111,"line":185},[109,171368,171369],{"class":126},"counter ",[109,171371,130],{"class":122},[109,171373,89043],{"class":126},[109,171375,171376],{"class":111,"line":201},[109,171377,158],{"emptyLinePlaceholder":157},[109,171379,171380,171382,171385,171387],{"class":111,"line":206},[109,171381,4372],{"class":122},[109,171383,171384],{"class":126}," word ",[109,171386,27218],{"class":122},[109,171388,171389],{"class":126}," words:\n",[109,171391,171392,171395,171397,171400,171403,171405,171408],{"class":111,"line":218},[109,171393,171394],{"class":126},"    word ",[109,171396,130],{"class":122},[109,171398,171399],{"class":126}," word.strip(",[109,171401,171402],{"class":278},"\".,!?;:",[109,171404,157670],{"class":133},[109,171406,171407],{"class":278},"'()[]\"",[109,171409,1330],{"class":126},[109,171411,171412,171414,171416],{"class":111,"line":223},[109,171413,4446],{"class":122},[109,171415,40105],{"class":122},[109,171417,171418],{"class":126}," word:\n",[109,171420,171421],{"class":111,"line":229},[109,171422,149687],{"class":122},[109,171424,171425,171428,171430,171433,171435,171437,171439],{"class":111,"line":244},[109,171426,171427],{"class":126},"    counter[word] ",[109,171429,130],{"class":122},[109,171431,171432],{"class":126}," counter.get(word, ",[109,171434,1314],{"class":133},[109,171436,14887],{"class":126},[109,171438,1348],{"class":122},[109,171440,56874],{"class":133},[109,171442,171443],{"class":111,"line":258},[109,171444,158],{"emptyLinePlaceholder":157},[109,171446,171447,171450,171452,171454,171457,171459,171461,171463,171465,171467,171469,171471,171473],{"class":111,"line":263},[109,171448,171449],{"class":126},"items ",[109,171451,130],{"class":122},[109,171453,164779],{"class":133},[109,171455,171456],{"class":126},"(counter.items(), ",[109,171458,155121],{"class":6553},[109,171460,155124],{"class":122},[109,171462,155127],{"class":126},[109,171464,1755],{"class":133},[109,171466,113377],{"class":126},[109,171468,164703],{"class":6553},[109,171470,130],{"class":122},[109,171472,32651],{"class":133},[109,171474,1330],{"class":126},[109,171476,171477],{"class":111,"line":269},[109,171478,158],{"emptyLinePlaceholder":157},[109,171480,171481,171483,171486,171488,171491,171493],{"class":111,"line":304},[109,171482,4372],{"class":122},[109,171484,171485],{"class":126}," word, count ",[109,171487,27218],{"class":122},[109,171489,171490],{"class":126}," items[:",[109,171492,1008],{"class":133},[109,171494,166930],{"class":126},[109,171496,171497,171499],{"class":111,"line":331},[109,171498,32474],{"class":133},[109,171500,171501],{"class":126},"(word, count)\n",[14,171503,171505],{"id":171504},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[99,171507,171509],{"className":31553,"code":171508,"language":31555,"meta":104,"style":104},"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",[106,171510,171511,171517,171527,171531,171543,171547,171551,171559,171569,171575,171579,171609,171619,171623,171627,171635,171665,171689,171693,171697,171705,171734,171739],{"__ignoreMap":104},[109,171512,171513,171515],{"class":111,"line":112},[109,171514,31567],{"class":122},[109,171516,148266],{"class":126},[109,171518,171519,171521,171523,171525],{"class":111,"line":119},[109,171520,31912],{"class":122},[109,171522,109486],{"class":126},[109,171524,31567],{"class":122},[109,171526,109491],{"class":126},[109,171528,171529],{"class":111,"line":140},[109,171530,158],{"emptyLinePlaceholder":157},[109,171532,171533,171535,171537,171539,171541],{"class":111,"line":154},[109,171534,152999],{"class":133},[109,171536,14737],{"class":122},[109,171538,109720],{"class":126},[109,171540,153006],{"class":278},[109,171542,1330],{"class":126},[109,171544,171545],{"class":111,"line":161},[109,171546,158],{"emptyLinePlaceholder":157},[109,171548,171549],{"class":111,"line":167},[109,171550,158],{"emptyLinePlaceholder":157},[109,171552,171553,171555,171557],{"class":111,"line":185},[109,171554,33122],{"class":122},[109,171556,153023],{"class":211},[109,171558,33128],{"class":126},[109,171560,171561,171563,171565,171567],{"class":111,"line":201},[109,171562,4446],{"class":122},[109,171564,40105],{"class":122},[109,171566,153034],{"class":133},[109,171568,153037],{"class":126},[109,171570,171571,171573],{"class":111,"line":206},[109,171572,15925],{"class":122},[109,171574,53013],{"class":126},[109,171576,171577],{"class":111,"line":218},[109,171578,158],{"emptyLinePlaceholder":157},[109,171580,171581,171583,171585,171587,171589,171591,171593,171595,171597,171599,171601,171603,171605,171607],{"class":111,"line":223},[109,171582,35353],{"class":122},[109,171584,147966],{"class":133},[109,171586,714],{"class":126},[109,171588,152999],{"class":133},[109,171590,13608],{"class":126},[109,171592,147976],{"class":278},[109,171594,13608],{"class":126},[109,171596,147981],{"class":6553},[109,171598,130],{"class":122},[109,171600,147986],{"class":278},[109,171602,14887],{"class":126},[109,171604,32558],{"class":122},[109,171606,149328],{"class":6553},[109,171608,5082],{"class":126},[109,171610,171611,171613,171615,171617],{"class":111,"line":229},[109,171612,15925],{"class":122},[109,171614,149339],{"class":126},[109,171616,46529],{"class":6553},[109,171618,1330],{"class":126},[109,171620,171621],{"class":111,"line":244},[109,171622,158],{"emptyLinePlaceholder":157},[109,171624,171625],{"class":111,"line":258},[109,171626,158],{"emptyLinePlaceholder":157},[109,171628,171629,171631,171633],{"class":111,"line":263},[109,171630,33122],{"class":122},[109,171632,153133],{"class":211},[109,171634,153136],{"class":126},[109,171636,171637,171639,171641,171643,171645,171647,171649,171651,171653,171655,171657,171659,171661,171663],{"class":111,"line":269},[109,171638,35353],{"class":122},[109,171640,147966],{"class":133},[109,171642,714],{"class":126},[109,171644,152999],{"class":133},[109,171646,13608],{"class":126},[109,171648,153151],{"class":278},[109,171650,13608],{"class":126},[109,171652,147981],{"class":6553},[109,171654,130],{"class":122},[109,171656,147986],{"class":278},[109,171658,14887],{"class":126},[109,171660,32558],{"class":122},[109,171662,149328],{"class":6553},[109,171664,5082],{"class":126},[109,171666,171667,171669,171671,171673,171675,171677,171679,171681,171683,171685,171687],{"class":111,"line":304},[109,171668,153172],{"class":126},[109,171670,46529],{"class":6553},[109,171672,13608],{"class":126},[109,171674,148312],{"class":6553},[109,171676,130],{"class":122},[109,171678,35162],{"class":133},[109,171680,13608],{"class":126},[109,171682,153187],{"class":6553},[109,171684,130],{"class":122},[109,171686,1618],{"class":133},[109,171688,1330],{"class":126},[109,171690,171691],{"class":111,"line":331},[109,171692,158],{"emptyLinePlaceholder":157},[109,171694,171695],{"class":111,"line":336},[109,171696,158],{"emptyLinePlaceholder":157},[109,171698,171699,171701,171703],{"class":111,"line":364},[109,171700,160891],{"class":126},[109,171702,130],{"class":122},[109,171704,154217],{"class":126},[109,171706,171707,171710,171712,171714,171716,171718,171720,171722,171724,171726,171728,171730,171732],{"class":111,"line":391},[109,171708,171709],{"class":126},"students.append({",[109,171711,63854],{"class":278},[109,171713,52612],{"class":126},[109,171715,151063],{"class":278},[109,171717,13608],{"class":126},[109,171719,70299],{"class":278},[109,171721,52612],{"class":126},[109,171723,2182],{"class":133},[109,171725,13608],{"class":126},[109,171727,152647],{"class":278},[109,171729,52612],{"class":126},[109,171731,2519],{"class":133},[109,171733,166327],{"class":126},[109,171735,171736],{"class":111,"line":396},[109,171737,171738],{"class":126},"save_students(students)\n",[109,171740,171741,171743,171745,171748],{"class":111,"line":402},[109,171742,31590],{"class":133},[109,171744,714],{"class":126},[109,171746,171747],{"class":278},"\"保存成功\"",[109,171749,1330],{"class":126},[14,171751,171753],{"id":171752},"_814-易错点","8.14 易错点",[765,171755,171756,171760,171766,171771,171778,171785],{},[30,171757,171758,170019],{},[106,171759,2327],{},[30,171761,171762,171763,29560],{},"读写中文要指定 ",[106,171764,171765],{},"encoding=\"utf-8\"",[30,171767,171768,171769,29560],{},"打开文件后要关闭，推荐使用 ",[106,171770,109008],{},[30,171772,171773,171774,171777],{},"读取大文件不要直接 ",[106,171775,171776],{},"read()"," 全部内容。",[30,171779,171780,171781,171784],{},"Windows 写 CSV 时建议加 ",[106,171782,171783],{},"newline=\"\"","，避免空行。",[30,171786,171787],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171789,171791],{"id":171790},"_815-本章练习","8.15 本章练习",[765,171793,171794,171801,171806,171809,171812],{},[30,171795,171796,171797,171800],{},"写入一个 ",[106,171798,171799],{},"students.txt","，每行保存一个学生姓名。",[30,171802,105530,171803,171805],{},[106,171804,171799],{}," 并输出所有学生。",[30,171807,171808],{},"把学生列表保存为 JSON 文件。",[30,171810,171811],{},"从 JSON 文件读取学生数据，计算平均分。",[30,171813,171814,171815,171818,171819,171822],{},"写一个日志函数 ",[106,171816,171817],{},"write_log(message)","，每次调用向 ",[106,171820,171821],{},"app.log"," 追加一行。",[1467,171824,171825],{},"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":104,"searchDepth":119,"depth":119,"links":171827},[171828,171829,171833,171834,171840,171841,171842,171843,171844,171845,171846,171847,171848,171849,171850],{"id":169339,"depth":119,"text":169340},{"id":169380,"depth":119,"text":169381,"children":171830},[171831,171832],{"id":169384,"depth":140,"text":169385},{"id":169418,"depth":140,"text":169419},{"id":169532,"depth":119,"text":169533},{"id":169625,"depth":119,"text":169626,"children":171835},[171836,171837,171838,171839],{"id":169629,"depth":140,"text":169630},{"id":169716,"depth":140,"text":169717},{"id":169786,"depth":140,"text":169787},{"id":169880,"depth":140,"text":169881},{"id":169950,"depth":119,"text":169951},{"id":170013,"depth":119,"text":170014},{"id":170174,"depth":119,"text":170175},{"id":170237,"depth":119,"text":170238},{"id":170353,"depth":119,"text":170354},{"id":170563,"depth":119,"text":170564},{"id":170875,"depth":119,"text":170876},{"id":171286,"depth":119,"text":171287},{"id":171504,"depth":119,"text":171505},{"id":171752,"depth":119,"text":171753},{"id":171790,"depth":119,"text":171791},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169331,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171857,"title":171858,"body":171859,"description":24550,"extension":1476,"meta":174045,"navigation":157,"path":174046,"seo":174047,"stem":174048,"__hash__":174049},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171860,"toc":174012},[171861,171864,171868,171871,171874,171966,171968,171987,171992,171996,171999,172002,172031,172038,172041,172045,172048,172077,172079,172131,172137,172190,172194,172292,172295,172362,172366,172423,172425,172431,172435,172440,172446,172537,172542,172546,172549,172627,172630,172668,172672,172790,172793,172797,172800,172845,172848,172852,172857,172863,172913,172916,172947,172951,172955,172985,172989,173024,173028,173063,173103,173107,173123,173126,173130,173134,173213,173217,173258,173262,173317,173321,173355,173359,173389,173398,173405,173411,173468,173471,173479,173482,173486,173493,173496,173502,173505,173522,173527,173531,173537,173550,173553,173590,173593,173604,173607,173621,173624,173638,173642,173649,173682,173685,173687,173693,173696,173700,173702,173708,173713,173886,173890,173953,173957,173981,173985,174009],[10,171862,171858],{"id":171863},"_9-异常模块与包",[14,171865,171867],{"id":171866},"_91-什么是异常","9.1 什么是异常",[19,171869,171870],{},"异常是程序运行过程中出现的错误。",[19,171872,171873],{},"常见异常：",[1677,171875,171876,171885],{},[1680,171877,171878],{},[1683,171879,171880,171883],{},[1686,171881,171882],{},"异常",[1686,171884,27044],{},[1723,171886,171887,171897,171907,171916,171926,171936,171946,171956],{},[1683,171888,171889,171894],{},[1728,171890,171891],{},[106,171892,171893],{},"NameError",[1728,171895,171896],{},"使用了未定义变量",[1683,171898,171899,171904],{},[1728,171900,171901],{},[106,171902,171903],{},"TypeError",[1728,171905,171906],{},"类型不匹配",[1683,171908,171909,171913],{},[1728,171910,171911],{},[106,171912,156009],{},[1728,171914,171915],{},"值不合法",[1683,171917,171918,171923],{},[1728,171919,171920],{},[106,171921,171922],{},"IndexError",[1728,171924,171925],{},"列表索引越界",[1683,171927,171928,171933],{},[1728,171929,171930],{},[106,171931,171932],{},"KeyError",[1728,171934,171935],{},"字典 key 不存在",[1683,171937,171938,171943],{},[1728,171939,171940],{},[106,171941,171942],{},"FileNotFoundError",[1728,171944,171945],{},"文件不存在",[1683,171947,171948,171953],{},[1728,171949,171950],{},[106,171951,171952],{},"ZeroDivisionError",[1728,171954,171955],{},"除数为 0",[1683,171957,171958,171963],{},[1728,171959,171960],{},[106,171961,171962],{},"ImportError",[1728,171964,171965],{},"导入失败",[19,171967,16308],{},[99,171969,171971],{"className":31553,"code":171970,"language":31555,"meta":104,"style":104},"num = int(\"abc\")\n",[106,171972,171973],{"__ignoreMap":104},[109,171974,171975,171977,171979,171981,171983,171985],{"class":111,"line":112},[109,171976,156962],{"class":126},[109,171978,130],{"class":122},[109,171980,173],{"class":133},[109,171982,714],{"class":126},[109,171984,157055],{"class":278},[109,171986,1330],{"class":126},[19,171988,171989,171990,29560],{},"会触发 ",[106,171991,156009],{},[14,171993,171995],{"id":171994},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171997,171998],{},"如果不处理异常，程序会直接终止。",[19,172000,172001],{},"例如用户输入年龄：",[99,172003,172005],{"className":31553,"code":172004,"language":31555,"meta":104,"style":104},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[106,172006,172007,172025],{"__ignoreMap":104},[109,172008,172009,172011,172013,172015,172017,172019,172021,172023],{"class":111,"line":112},[109,172010,147721],{"class":126},[109,172012,130],{"class":122},[109,172014,173],{"class":133},[109,172016,714],{"class":126},[109,172018,54996],{"class":133},[109,172020,714],{"class":126},[109,172022,153569],{"class":278},[109,172024,31672],{"class":126},[109,172026,172027,172029],{"class":111,"line":119},[109,172028,31590],{"class":133},[109,172030,156936],{"class":126},[19,172032,172033,172034,172037],{},"用户输入 ",[106,172035,172036],{},"abc","，程序就会报错退出。",[19,172039,172040],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172042,172044],{"id":172043},"_93-try-except","9.3 try except",[19,172046,172047],{},"基础语法：",[99,172049,172051],{"className":31553,"code":172050,"language":31555,"meta":104,"style":104},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[106,172052,172053,172060,172065,172072],{"__ignoreMap":104},[109,172054,172055,172058],{"class":111,"line":112},[109,172056,172057],{"class":122},"try",[109,172059,5082],{"class":126},[109,172061,172062],{"class":111,"line":119},[109,172063,172064],{"class":126},"    可能出错的代码\n",[109,172066,172067,172070],{"class":111,"line":140},[109,172068,172069],{"class":122},"except",[109,172071,5082],{"class":126},[109,172073,172074],{"class":111,"line":154},[109,172075,172076],{"class":126},"    出错后的处理代码\n",[19,172078,16308],{},[99,172080,172082],{"className":31553,"code":172081,"language":31555,"meta":104,"style":104},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[106,172083,172084,172090,172108,172114,172120],{"__ignoreMap":104},[109,172085,172086,172088],{"class":111,"line":112},[109,172087,172057],{"class":122},[109,172089,5082],{"class":126},[109,172091,172092,172094,172096,172098,172100,172102,172104,172106],{"class":111,"line":119},[109,172093,153561],{"class":126},[109,172095,130],{"class":122},[109,172097,173],{"class":133},[109,172099,714],{"class":126},[109,172101,54996],{"class":133},[109,172103,714],{"class":126},[109,172105,153569],{"class":278},[109,172107,31672],{"class":126},[109,172109,172110,172112],{"class":111,"line":140},[109,172111,32474],{"class":133},[109,172113,156936],{"class":126},[109,172115,172116,172118],{"class":111,"line":154},[109,172117,172069],{"class":122},[109,172119,5082],{"class":126},[109,172121,172122,172124,172126,172129],{"class":111,"line":161},[109,172123,32474],{"class":133},[109,172125,714],{"class":126},[109,172127,172128],{"class":278},"\"年龄必须是数字\"",[109,172130,1330],{"class":126},[19,172132,172133,172134,172136],{},"不建议裸写 ",[106,172135,172069],{},"，最好指定异常类型。",[99,172138,172140],{"className":31553,"code":172139,"language":31555,"meta":104,"style":104},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[106,172141,172142,172148,172166,172172,172180],{"__ignoreMap":104},[109,172143,172144,172146],{"class":111,"line":112},[109,172145,172057],{"class":122},[109,172147,5082],{"class":126},[109,172149,172150,172152,172154,172156,172158,172160,172162,172164],{"class":111,"line":119},[109,172151,153561],{"class":126},[109,172153,130],{"class":122},[109,172155,173],{"class":133},[109,172157,714],{"class":126},[109,172159,54996],{"class":133},[109,172161,714],{"class":126},[109,172163,153569],{"class":278},[109,172165,31672],{"class":126},[109,172167,172168,172170],{"class":111,"line":140},[109,172169,32474],{"class":133},[109,172171,156936],{"class":126},[109,172173,172174,172176,172178],{"class":111,"line":154},[109,172175,172069],{"class":122},[109,172177,153401],{"class":133},[109,172179,5082],{"class":126},[109,172181,172182,172184,172186,172188],{"class":111,"line":161},[109,172183,32474],{"class":133},[109,172185,714],{"class":126},[109,172187,172128],{"class":278},[109,172189,1330],{"class":126},[14,172191,172193],{"id":172192},"_94-捕获多个异常","9.4 捕获多个异常",[99,172195,172197],{"className":31553,"code":172196,"language":31555,"meta":104,"style":104},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[106,172198,172199,172205,172226,172246,172253,172261,172272,172281],{"__ignoreMap":104},[109,172200,172201,172203],{"class":111,"line":112},[109,172202,172057],{"class":122},[109,172204,5082],{"class":126},[109,172206,172207,172210,172212,172214,172216,172218,172220,172222,172224],{"class":111,"line":119},[109,172208,172209],{"class":126},"    nums ",[109,172211,130],{"class":122},[109,172213,53401],{"class":126},[109,172215,1755],{"class":133},[109,172217,13608],{"class":126},[109,172219,1618],{"class":133},[109,172221,13608],{"class":126},[109,172223,1612],{"class":133},[109,172225,34421],{"class":126},[109,172227,172228,172231,172233,172235,172237,172239,172241,172244],{"class":111,"line":140},[109,172229,172230],{"class":126},"    index ",[109,172232,130],{"class":122},[109,172234,173],{"class":133},[109,172236,714],{"class":126},[109,172238,54996],{"class":133},[109,172240,714],{"class":126},[109,172242,172243],{"class":278},"\"请输入索引:\"",[109,172245,31672],{"class":126},[109,172247,172248,172250],{"class":111,"line":154},[109,172249,32474],{"class":133},[109,172251,172252],{"class":126},"(nums[index])\n",[109,172254,172255,172257,172259],{"class":111,"line":161},[109,172256,172069],{"class":122},[109,172258,153401],{"class":133},[109,172260,5082],{"class":126},[109,172262,172263,172265,172267,172270],{"class":111,"line":167},[109,172264,32474],{"class":133},[109,172266,714],{"class":126},[109,172268,172269],{"class":278},"\"索引必须是整数\"",[109,172271,1330],{"class":126},[109,172273,172274,172276,172279],{"class":111,"line":185},[109,172275,172069],{"class":122},[109,172277,172278],{"class":133}," IndexError",[109,172280,5082],{"class":126},[109,172282,172283,172285,172287,172290],{"class":111,"line":201},[109,172284,32474],{"class":133},[109,172286,714],{"class":126},[109,172288,172289],{"class":278},"\"索引越界\"",[109,172291,1330],{"class":126},[19,172293,172294],{},"多个异常使用相同处理逻辑：",[99,172296,172298],{"className":31553,"code":172297,"language":31555,"meta":104,"style":104},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[106,172299,172300,172306,172324,172337,172351],{"__ignoreMap":104},[109,172301,172302,172304],{"class":111,"line":112},[109,172303,172057],{"class":122},[109,172305,5082],{"class":126},[109,172307,172308,172310,172312,172314,172316,172318,172320,172322],{"class":111,"line":119},[109,172309,46768],{"class":126},[109,172311,130],{"class":122},[109,172313,173],{"class":133},[109,172315,714],{"class":126},[109,172317,54996],{"class":133},[109,172319,714],{"class":126},[109,172321,156971],{"class":278},[109,172323,31672],{"class":126},[109,172325,172326,172328,172330,172332,172334],{"class":111,"line":140},[109,172327,32474],{"class":133},[109,172329,714],{"class":126},[109,172331,1008],{"class":133},[109,172333,157221],{"class":122},[109,172335,172336],{"class":126}," num)\n",[109,172338,172339,172341,172343,172345,172347,172349],{"class":111,"line":154},[109,172340,172069],{"class":122},[109,172342,285],{"class":126},[109,172344,156009],{"class":133},[109,172346,13608],{"class":126},[109,172348,171952],{"class":133},[109,172350,31961],{"class":126},[109,172352,172353,172355,172357,172360],{"class":111,"line":161},[109,172354,32474],{"class":133},[109,172356,714],{"class":126},[109,172358,172359],{"class":278},"\"输入不合法\"",[109,172361,1330],{"class":126},[14,172363,172365],{"id":172364},"_95-获取异常信息","9.5 获取异常信息",[99,172367,172369],{"className":31553,"code":172368,"language":31555,"meta":104,"style":104},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[106,172370,172371,172377,172391,172402],{"__ignoreMap":104},[109,172372,172373,172375],{"class":111,"line":112},[109,172374,172057],{"class":122},[109,172376,5082],{"class":126},[109,172378,172379,172381,172383,172385,172387,172389],{"class":111,"line":119},[109,172380,46768],{"class":126},[109,172382,130],{"class":122},[109,172384,173],{"class":133},[109,172386,714],{"class":126},[109,172388,157055],{"class":278},[109,172390,1330],{"class":126},[109,172392,172393,172395,172397,172399],{"class":111,"line":140},[109,172394,172069],{"class":122},[109,172396,153401],{"class":133},[109,172398,65779],{"class":122},[109,172400,172401],{"class":126}," e:\n",[109,172403,172404,172406,172408,172410,172413,172415,172417,172419,172421],{"class":111,"line":154},[109,172405,32474],{"class":133},[109,172407,714],{"class":126},[109,172409,1595],{"class":122},[109,172411,172412],{"class":278},"\"出错了:",[109,172414,2427],{"class":133},[109,172416,1615],{"class":126},[109,172418,2476],{"class":133},[109,172420,1789],{"class":278},[109,172422,1330],{"class":126},[19,172424,147632],{},[99,172426,172429],{"className":172427,"code":172428,"language":6524,"meta":104},[6522],"出错了:invalid literal for int() with base 10: 'abc'\n",[106,172430,172428],{"__ignoreMap":104},[14,172432,172434],{"id":172433},"_96-else和finally","9.6 else和finally",[19,172436,172437,172439],{},[106,172438,3077],{},"：没有异常时执行。",[19,172441,172442,172445],{},[106,172443,172444],{},"finally","：无论是否异常都会执行。",[99,172447,172449],{"className":31553,"code":172448,"language":31555,"meta":104,"style":104},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[106,172450,172451,172457,172475,172483,172493,172499,172520,172526],{"__ignoreMap":104},[109,172452,172453,172455],{"class":111,"line":112},[109,172454,172057],{"class":122},[109,172456,5082],{"class":126},[109,172458,172459,172461,172463,172465,172467,172469,172471,172473],{"class":111,"line":119},[109,172460,46768],{"class":126},[109,172462,130],{"class":122},[109,172464,173],{"class":133},[109,172466,714],{"class":126},[109,172468,54996],{"class":133},[109,172470,714],{"class":126},[109,172472,156971],{"class":278},[109,172474,31672],{"class":126},[109,172476,172477,172479,172481],{"class":111,"line":140},[109,172478,172069],{"class":122},[109,172480,153401],{"class":133},[109,172482,5082],{"class":126},[109,172484,172485,172487,172489,172491],{"class":111,"line":154},[109,172486,32474],{"class":133},[109,172488,714],{"class":126},[109,172490,154389],{"class":278},[109,172492,1330],{"class":126},[109,172494,172495,172497],{"class":111,"line":161},[109,172496,3077],{"class":122},[109,172498,5082],{"class":126},[109,172500,172501,172503,172505,172507,172510,172512,172514,172516,172518],{"class":111,"line":167},[109,172502,32474],{"class":133},[109,172504,714],{"class":126},[109,172506,1595],{"class":122},[109,172508,172509],{"class":278},"\"输入正确:",[109,172511,2427],{"class":133},[109,172513,3045],{"class":126},[109,172515,2476],{"class":133},[109,172517,1789],{"class":278},[109,172519,1330],{"class":126},[109,172521,172522,172524],{"class":111,"line":185},[109,172523,172444],{"class":122},[109,172525,5082],{"class":126},[109,172527,172528,172530,172532,172535],{"class":111,"line":201},[109,172529,32474],{"class":133},[109,172531,714],{"class":126},[109,172533,172534],{"class":278},"\"程序结束\"",[109,172536,1330],{"class":126},[19,172538,172539,172541],{},[106,172540,172444],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172543,172545],{"id":172544},"_97-抛出异常","9.7 抛出异常",[19,172547,172548],{},"程序可以主动抛出异常。",[99,172550,172552],{"className":31553,"code":172551,"language":31555,"meta":104,"style":104},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[106,172553,172554,172563,172575,172588,172608,172612,172616],{"__ignoreMap":104},[109,172555,172556,172558,172561],{"class":111,"line":112},[109,172557,33122],{"class":122},[109,172559,172560],{"class":211}," set_age",[109,172562,162590],{"class":126},[109,172564,172565,172567,172569,172571,172573],{"class":111,"line":119},[109,172566,4446],{"class":122},[109,172568,16880],{"class":126},[109,172570,1320],{"class":122},[109,172572,734],{"class":133},[109,172574,5082],{"class":126},[109,172576,172577,172579,172581,172583,172586],{"class":111,"line":140},[109,172578,104607],{"class":122},[109,172580,153401],{"class":133},[109,172582,714],{"class":126},[109,172584,172585],{"class":278},"\"年龄不能为负数\"",[109,172587,1330],{"class":126},[109,172589,172590,172592,172594,172596,172598,172600,172602,172604,172606],{"class":111,"line":154},[109,172591,32474],{"class":133},[109,172593,714],{"class":126},[109,172595,1595],{"class":122},[109,172597,163158],{"class":278},[109,172599,2427],{"class":133},[109,172601,71396],{"class":126},[109,172603,2476],{"class":133},[109,172605,1789],{"class":278},[109,172607,1330],{"class":126},[109,172609,172610],{"class":111,"line":161},[109,172611,158],{"emptyLinePlaceholder":157},[109,172613,172614],{"class":111,"line":167},[109,172615,158],{"emptyLinePlaceholder":157},[109,172617,172618,172621,172623,172625],{"class":111,"line":185},[109,172619,172620],{"class":126},"set_age(",[109,172622,2064],{"class":122},[109,172624,1755],{"class":133},[109,172626,1330],{"class":126},[19,172628,172629],{},"调用者可以捕获：",[99,172631,172633],{"className":31553,"code":172632,"language":31555,"meta":104,"style":104},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[106,172634,172635,172641,172652,172662],{"__ignoreMap":104},[109,172636,172637,172639],{"class":111,"line":112},[109,172638,172057],{"class":122},[109,172640,5082],{"class":126},[109,172642,172643,172646,172648,172650],{"class":111,"line":119},[109,172644,172645],{"class":126},"    set_age(",[109,172647,2064],{"class":122},[109,172649,1755],{"class":133},[109,172651,1330],{"class":126},[109,172653,172654,172656,172658,172660],{"class":111,"line":140},[109,172655,172069],{"class":122},[109,172657,153401],{"class":133},[109,172659,65779],{"class":122},[109,172661,172401],{"class":126},[109,172663,172664,172666],{"class":111,"line":154},[109,172665,32474],{"class":133},[109,172667,68174],{"class":126},[14,172669,172671],{"id":172670},"_98-自定义异常","9.8 自定义异常",[99,172673,172675],{"className":31553,"code":172674,"language":31555,"meta":104,"style":104},"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",[106,172676,172677,172691,172695,172699,172703,172711,172721,172732,172742,172746,172750,172756,172773,172784],{"__ignoreMap":104},[109,172678,172679,172681,172684,172686,172689],{"class":111,"line":112},[109,172680,15867],{"class":122},[109,172682,172683],{"class":211}," BalanceNotEnoughError",[109,172685,714],{"class":126},[109,172687,172688],{"class":133},"Exception",[109,172690,31961],{"class":126},[109,172692,172693],{"class":111,"line":119},[109,172694,150712],{"class":122},[109,172696,172697],{"class":111,"line":140},[109,172698,158],{"emptyLinePlaceholder":157},[109,172700,172701],{"class":111,"line":154},[109,172702,158],{"emptyLinePlaceholder":157},[109,172704,172705,172707,172709],{"class":111,"line":161},[109,172706,33122],{"class":122},[109,172708,151361],{"class":211},[109,172710,163987],{"class":126},[109,172712,172713,172715,172717,172719],{"class":111,"line":167},[109,172714,4446],{"class":122},[109,172716,151317],{"class":126},[109,172718,2490],{"class":122},[109,172720,163764],{"class":126},[109,172722,172723,172725,172728,172730],{"class":111,"line":185},[109,172724,104607],{"class":122},[109,172726,172727],{"class":126}," BalanceNotEnoughError(",[109,172729,151412],{"class":278},[109,172731,1330],{"class":126},[109,172733,172734,172736,172738,172740],{"class":111,"line":201},[109,172735,731],{"class":122},[109,172737,163994],{"class":126},[109,172739,2064],{"class":122},[109,172741,151350],{"class":126},[109,172743,172744],{"class":111,"line":206},[109,172745,158],{"emptyLinePlaceholder":157},[109,172747,172748],{"class":111,"line":218},[109,172749,158],{"emptyLinePlaceholder":157},[109,172751,172752,172754],{"class":111,"line":223},[109,172753,172057],{"class":122},[109,172755,5082],{"class":126},[109,172757,172758,172760,172762,172765,172767,172769,172771],{"class":111,"line":229},[109,172759,163665],{"class":126},[109,172761,130],{"class":122},[109,172763,172764],{"class":126}," withdraw(",[109,172766,1351],{"class":133},[109,172768,13608],{"class":126},[109,172770,3098],{"class":133},[109,172772,1330],{"class":126},[109,172774,172775,172777,172780,172782],{"class":111,"line":244},[109,172776,172069],{"class":122},[109,172778,172779],{"class":126}," BalanceNotEnoughError ",[109,172781,32558],{"class":122},[109,172783,172401],{"class":126},[109,172785,172786,172788],{"class":111,"line":258},[109,172787,32474],{"class":133},[109,172789,68174],{"class":126},[19,172791,172792],{},"入门阶段大多数情况使用内置异常即可。",[14,172794,172796],{"id":172795},"_99-traceback","9.9 traceback",[19,172798,172799],{},"调试时可以输出完整异常堆栈。",[99,172801,172803],{"className":31553,"code":172802,"language":31555,"meta":104,"style":104},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[106,172804,172805,172812,172816,172822,172832,172840],{"__ignoreMap":104},[109,172806,172807,172809],{"class":111,"line":112},[109,172808,31567],{"class":122},[109,172810,172811],{"class":126}," traceback\n",[109,172813,172814],{"class":111,"line":119},[109,172815,158],{"emptyLinePlaceholder":157},[109,172817,172818,172820],{"class":111,"line":140},[109,172819,172057],{"class":122},[109,172821,5082],{"class":126},[109,172823,172824,172826,172828,172830],{"class":111,"line":154},[109,172825,232],{"class":133},[109,172827,714],{"class":126},[109,172829,157055],{"class":278},[109,172831,1330],{"class":126},[109,172833,172834,172836,172838],{"class":111,"line":161},[109,172835,172069],{"class":122},[109,172837,153401],{"class":133},[109,172839,5082],{"class":126},[109,172841,172842],{"class":111,"line":167},[109,172843,172844],{"class":126},"    traceback.print_exc()\n",[19,172846,172847],{},"日志系统中常把异常堆栈记录到文件。",[14,172849,172851],{"id":172850},"_910-什么是模块","9.10 什么是模块",[19,172853,172854,172855,127158],{},"模块就是一个 ",[106,172856,147527],{},[19,172858,172859,172860,25793],{},"例如创建 ",[106,172861,172862],{},"my_math.py",[99,172864,172866],{"className":31553,"code":172865,"language":31555,"meta":104,"style":104},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[106,172867,172868,172876,172886,172890,172894,172903],{"__ignoreMap":104},[109,172869,172870,172872,172874],{"class":111,"line":112},[109,172871,33122],{"class":122},[109,172873,6546],{"class":211},[109,172875,152268],{"class":126},[109,172877,172878,172880,172882,172884],{"class":111,"line":119},[109,172879,731],{"class":122},[109,172881,235],{"class":126},[109,172883,1348],{"class":122},[109,172885,152279],{"class":126},[109,172887,172888],{"class":111,"line":140},[109,172889,158],{"emptyLinePlaceholder":157},[109,172891,172892],{"class":111,"line":154},[109,172893,158],{"emptyLinePlaceholder":157},[109,172895,172896,172898,172901],{"class":111,"line":161},[109,172897,33122],{"class":122},[109,172899,172900],{"class":211}," sub",[109,172902,152268],{"class":126},[109,172904,172905,172907,172909,172911],{"class":111,"line":167},[109,172906,731],{"class":122},[109,172908,235],{"class":126},[109,172910,2064],{"class":122},[109,172912,152279],{"class":126},[19,172914,172915],{},"在另一个文件中导入：",[99,172917,172919],{"className":31553,"code":172918,"language":31555,"meta":104,"style":104},"import my_math\n\nprint(my_math.add(1, 2))\n",[106,172920,172921,172928,172932],{"__ignoreMap":104},[109,172922,172923,172925],{"class":111,"line":112},[109,172924,31567],{"class":122},[109,172926,172927],{"class":126}," my_math\n",[109,172929,172930],{"class":111,"line":119},[109,172931,158],{"emptyLinePlaceholder":157},[109,172933,172934,172936,172939,172941,172943,172945],{"class":111,"line":140},[109,172935,31590],{"class":133},[109,172937,172938],{"class":126},"(my_math.add(",[109,172940,1755],{"class":133},[109,172942,13608],{"class":126},[109,172944,1618],{"class":133},[109,172946,31672],{"class":126},[14,172948,172950],{"id":172949},"_911-import导入","9.11 import导入",[51,172952,172954],{"id":172953},"_9111-导入模块","9.11.1 导入模块",[99,172956,172958],{"className":31553,"code":172957,"language":31555,"meta":104,"style":104},"import random\n\nprint(random.randint(1, 10))\n",[106,172959,172960,172966,172970],{"__ignoreMap":104},[109,172961,172962,172964],{"class":111,"line":112},[109,172963,31567],{"class":122},[109,172965,46503],{"class":126},[109,172967,172968],{"class":111,"line":119},[109,172969,158],{"emptyLinePlaceholder":157},[109,172971,172972,172974,172977,172979,172981,172983],{"class":111,"line":140},[109,172973,31590],{"class":133},[109,172975,172976],{"class":126},"(random.randint(",[109,172978,1755],{"class":133},[109,172980,13608],{"class":126},[109,172982,1008],{"class":133},[109,172984,31672],{"class":126},[51,172986,172988],{"id":172987},"_9112-导入指定内容","9.11.2 导入指定内容",[99,172990,172992],{"className":31553,"code":172991,"language":31555,"meta":104,"style":104},"from random import randint\n\nprint(randint(1, 10))\n",[106,172993,172994,173005,173009],{"__ignoreMap":104},[109,172995,172996,172998,173000,173002],{"class":111,"line":112},[109,172997,31912],{"class":122},[109,172999,58971],{"class":126},[109,173001,31567],{"class":122},[109,173003,173004],{"class":126}," randint\n",[109,173006,173007],{"class":111,"line":119},[109,173008,158],{"emptyLinePlaceholder":157},[109,173010,173011,173013,173016,173018,173020,173022],{"class":111,"line":140},[109,173012,31590],{"class":133},[109,173014,173015],{"class":126},"(randint(",[109,173017,1755],{"class":133},[109,173019,13608],{"class":126},[109,173021,1008],{"class":133},[109,173023,31672],{"class":126},[51,173025,173027],{"id":173026},"_9113-起别名","9.11.3 起别名",[99,173029,173031],{"className":31553,"code":173030,"language":31555,"meta":104,"style":104},"import random as rd\n\nprint(rd.randint(1, 10))\n",[106,173032,173033,173044,173048],{"__ignoreMap":104},[109,173034,173035,173037,173039,173041],{"class":111,"line":112},[109,173036,31567],{"class":122},[109,173038,58971],{"class":126},[109,173040,32558],{"class":122},[109,173042,173043],{"class":126}," rd\n",[109,173045,173046],{"class":111,"line":119},[109,173047,158],{"emptyLinePlaceholder":157},[109,173049,173050,173052,173055,173057,173059,173061],{"class":111,"line":140},[109,173051,31590],{"class":133},[109,173053,173054],{"class":126},"(rd.randint(",[109,173056,1755],{"class":133},[109,173058,13608],{"class":126},[109,173060,1008],{"class":133},[109,173062,31672],{"class":126},[99,173064,173066],{"className":31553,"code":173065,"language":31555,"meta":104,"style":104},"from random import randint as rint\n\nprint(rint(1, 10))\n",[106,173067,173068,173084,173088],{"__ignoreMap":104},[109,173069,173070,173072,173074,173076,173079,173081],{"class":111,"line":112},[109,173071,31912],{"class":122},[109,173073,58971],{"class":126},[109,173075,31567],{"class":122},[109,173077,173078],{"class":126}," randint ",[109,173080,32558],{"class":122},[109,173082,173083],{"class":126}," rint\n",[109,173085,173086],{"class":111,"line":119},[109,173087,158],{"emptyLinePlaceholder":157},[109,173089,173090,173092,173095,173097,173099,173101],{"class":111,"line":140},[109,173091,31590],{"class":133},[109,173093,173094],{"class":126},"(rint(",[109,173096,1755],{"class":133},[109,173098,13608],{"class":126},[109,173100,1008],{"class":133},[109,173102,31672],{"class":126},[51,173104,173106],{"id":173105},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[99,173108,173110],{"className":31553,"code":173109,"language":31555,"meta":104,"style":104},"from random import *\n",[106,173111,173112],{"__ignoreMap":104},[109,173113,173114,173116,173118,173120],{"class":111,"line":112},[109,173115,31912],{"class":122},[109,173117,58971],{"class":126},[109,173119,31567],{"class":122},[109,173121,173122],{"class":122}," *\n",[19,173124,173125],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173127,173129],{"id":173128},"_912-常用内置模块","9.12 常用内置模块",[51,173131,173133],{"id":173132},"_9121-random","9.12.1 random",[99,173135,173137],{"className":31553,"code":173136,"language":31555,"meta":104,"style":104},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[106,173138,173139,173145,173149,173163,173182],{"__ignoreMap":104},[109,173140,173141,173143],{"class":111,"line":112},[109,173142,31567],{"class":122},[109,173144,46503],{"class":126},[109,173146,173147],{"class":111,"line":119},[109,173148,158],{"emptyLinePlaceholder":157},[109,173150,173151,173153,173155,173157,173159,173161],{"class":111,"line":140},[109,173152,31590],{"class":133},[109,173154,172976],{"class":126},[109,173156,1755],{"class":133},[109,173158,13608],{"class":126},[109,173160,1008],{"class":133},[109,173162,31672],{"class":126},[109,173164,173165,173167,173170,173172,173174,173176,173178,173180],{"class":111,"line":154},[109,173166,31590],{"class":133},[109,173168,173169],{"class":126},"(random.choice([",[109,173171,151063],{"class":278},[109,173173,13608],{"class":126},[109,173175,152111],{"class":278},[109,173177,13608],{"class":126},[109,173179,160906],{"class":278},[109,173181,34318],{"class":126},[109,173183,173184,173186,173189,173191,173193,173195,173197,173199,173201,173203,173205,173207,173209,173211],{"class":111,"line":161},[109,173185,31590],{"class":133},[109,173187,173188],{"class":126},"(random.sample([",[109,173190,1755],{"class":133},[109,173192,13608],{"class":126},[109,173194,1618],{"class":133},[109,173196,13608],{"class":126},[109,173198,1612],{"class":133},[109,173200,13608],{"class":126},[109,173202,1831],{"class":133},[109,173204,13608],{"class":126},[109,173206,1856],{"class":133},[109,173208,113377],{"class":126},[109,173210,1618],{"class":133},[109,173212,31672],{"class":126},[51,173214,173216],{"id":173215},"_9122-time","9.12.2 time",[99,173218,173220],{"className":31553,"code":173219,"language":31555,"meta":104,"style":104},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[106,173221,173222,173228,173232,173239,173247],{"__ignoreMap":104},[109,173223,173224,173226],{"class":111,"line":112},[109,173225,31567],{"class":122},[109,173227,33004],{"class":126},[109,173229,173230],{"class":111,"line":119},[109,173231,158],{"emptyLinePlaceholder":157},[109,173233,173234,173236],{"class":111,"line":140},[109,173235,31590],{"class":133},[109,173237,173238],{"class":126},"(time.time())\n",[109,173240,173241,173243,173245],{"class":111,"line":154},[109,173242,96246],{"class":126},[109,173244,1755],{"class":133},[109,173246,1330],{"class":126},[109,173248,173249,173251,173253,173256],{"class":111,"line":161},[109,173250,31590],{"class":133},[109,173252,714],{"class":126},[109,173254,173255],{"class":278},"\"1秒后执行\"",[109,173257,1330],{"class":126},[51,173259,173261],{"id":173260},"_9123-datetime","9.12.3 datetime",[99,173263,173265],{"className":31553,"code":173264,"language":31555,"meta":104,"style":104},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[106,173266,173267,173279,173283,173293,173300],{"__ignoreMap":104},[109,173268,173269,173271,173274,173276],{"class":111,"line":112},[109,173270,31912],{"class":122},[109,173272,173273],{"class":126}," datetime ",[109,173275,31567],{"class":122},[109,173277,173278],{"class":126}," datetime\n",[109,173280,173281],{"class":111,"line":119},[109,173282,158],{"emptyLinePlaceholder":157},[109,173284,173285,173288,173290],{"class":111,"line":140},[109,173286,173287],{"class":126},"now ",[109,173289,130],{"class":122},[109,173291,173292],{"class":126}," datetime.now()\n",[109,173294,173295,173297],{"class":111,"line":154},[109,173296,31590],{"class":133},[109,173298,173299],{"class":126},"(now)\n",[109,173301,173302,173304,173307,173310,173312,173315],{"class":111,"line":161},[109,173303,31590],{"class":133},[109,173305,173306],{"class":126},"(now.strftime(",[109,173308,173309],{"class":278},"\"%Y-%m-",[109,173311,157866],{"class":133},[109,173313,173314],{"class":278}," %H:%M:%S\"",[109,173316,31672],{"class":126},[51,173318,173320],{"id":173319},"_9124-os","9.12.4 os",[99,173322,173324],{"className":31553,"code":173323,"language":31555,"meta":104,"style":104},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[106,173325,173326,173332,173336,173343],{"__ignoreMap":104},[109,173327,173328,173330],{"class":111,"line":112},[109,173329,31567],{"class":122},[109,173331,46480],{"class":126},[109,173333,173334],{"class":111,"line":119},[109,173335,158],{"emptyLinePlaceholder":157},[109,173337,173338,173340],{"class":111,"line":140},[109,173339,31590],{"class":133},[109,173341,173342],{"class":126},"(os.getcwd())\n",[109,173344,173345,173347,173350,173353],{"class":111,"line":154},[109,173346,31590],{"class":133},[109,173348,173349],{"class":126},"(os.listdir(",[109,173351,173352],{"class":278},"\".\"",[109,173354,31672],{"class":126},[51,173356,173358],{"id":173357},"_9125-sys","9.12.5 sys",[99,173360,173362],{"className":31553,"code":173361,"language":31555,"meta":104,"style":104},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[106,173363,173364,173371,173375,173382],{"__ignoreMap":104},[109,173365,173366,173368],{"class":111,"line":112},[109,173367,31567],{"class":122},[109,173369,173370],{"class":126}," sys\n",[109,173372,173373],{"class":111,"line":119},[109,173374,158],{"emptyLinePlaceholder":157},[109,173376,173377,173379],{"class":111,"line":140},[109,173378,31590],{"class":133},[109,173380,173381],{"class":126},"(sys.version)\n",[109,173383,173384,173386],{"class":111,"line":154},[109,173385,31590],{"class":133},[109,173387,173388],{"class":126},"(sys.path)\n",[14,173390,173392,173393,173395,173396,1789],{"id":173391},"_913-if-name-main","9.13 if ",[23,173394,80985],{}," == \"",[23,173397,103233],{},[19,173399,173400,173401,173404],{},"模块被直接运行和被导入时，",[106,173402,173403],{},"__name__"," 的值不同。",[19,173406,173407,173408,25793],{},"创建 ",[106,173409,173410],{},"my_module.py",[99,173412,173414],{"className":31553,"code":173413,"language":31555,"meta":104,"style":104},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[106,173415,173416,173424,173434,173438,173442,173454],{"__ignoreMap":104},[109,173417,173418,173420,173422],{"class":111,"line":112},[109,173419,33122],{"class":122},[109,173421,6546],{"class":211},[109,173423,152268],{"class":126},[109,173425,173426,173428,173430,173432],{"class":111,"line":119},[109,173427,731],{"class":122},[109,173429,235],{"class":126},[109,173431,1348],{"class":122},[109,173433,152279],{"class":126},[109,173435,173436],{"class":111,"line":140},[109,173437,158],{"emptyLinePlaceholder":157},[109,173439,173440],{"class":111,"line":154},[109,173441,158],{"emptyLinePlaceholder":157},[109,173443,173444,173446,173448,173450,173452],{"class":111,"line":161},[109,173445,2922],{"class":122},[109,173447,32395],{"class":133},[109,173449,102734],{"class":122},[109,173451,102737],{"class":278},[109,173453,5082],{"class":126},[109,173455,173456,173458,173460,173462,173464,173466],{"class":111,"line":167},[109,173457,32474],{"class":133},[109,173459,167775],{"class":126},[109,173461,1755],{"class":133},[109,173463,13608],{"class":126},[109,173465,1618],{"class":133},[109,173467,31672],{"class":126},[19,173469,173470],{},"作用：",[765,173472,173473,173476],{},[30,173474,173475],{},"直接运行该文件时，执行测试代码。",[30,173477,173478],{},"被其他文件导入时，不执行测试代码。",[19,173480,173481],{},"这是写模块时很常用的习惯。",[14,173483,173485],{"id":173484},"_914-包","9.14 包",[19,173487,173488,173489,173492],{},"包是包含 ",[106,173490,173491],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173494,173495],{},"目录结构：",[99,173497,173500],{"className":173498,"code":173499,"language":6524,"meta":104},[6522],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[106,173501,173499],{"__ignoreMap":104},[19,173503,173504],{},"导入：",[99,173506,173508],{"className":31553,"code":173507,"language":31555,"meta":104,"style":104},"from utils.file_utils import read_file\n",[106,173509,173510],{"__ignoreMap":104},[109,173511,173512,173514,173517,173519],{"class":111,"line":112},[109,173513,31912],{"class":122},[109,173515,173516],{"class":126}," utils.file_utils ",[109,173518,31567],{"class":122},[109,173520,173521],{"class":126}," read_file\n",[19,173523,173524,173526],{},[106,173525,173491],{}," 可以为空，也可以写包初始化逻辑。",[14,173528,173530],{"id":173529},"_915-第三方包","9.15 第三方包",[19,173532,173533,173534,173536],{},"第三方包通过 ",[106,173535,25005],{}," 安装。",[99,173538,173540],{"className":24996,"code":173539,"language":24998,"meta":104,"style":104},"pip install requests\n",[106,173541,173542],{"__ignoreMap":104},[109,173543,173544,173546,173548],{"class":111,"line":112},[109,173545,25005],{"class":211},[109,173547,25008],{"class":278},[109,173549,147273],{"class":278},[19,173551,173552],{},"使用：",[99,173554,173556],{"className":31553,"code":173555,"language":31555,"meta":104,"style":104},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[106,173557,173558,173564,173568,173583],{"__ignoreMap":104},[109,173559,173560,173562],{"class":111,"line":112},[109,173561,31567],{"class":122},[109,173563,147273],{"class":126},[109,173565,173566],{"class":111,"line":119},[109,173567,158],{"emptyLinePlaceholder":157},[109,173569,173570,173573,173575,173578,173581],{"class":111,"line":140},[109,173571,173572],{"class":126},"response ",[109,173574,130],{"class":122},[109,173576,173577],{"class":126}," requests.get(",[109,173579,173580],{"class":278},"\"https:\u002F\u002Fwww.example.com\"",[109,173582,1330],{"class":126},[109,173584,173585,173587],{"class":111,"line":154},[109,173586,31590],{"class":133},[109,173588,173589],{"class":126},"(response.status_code)\n",[19,173591,173592],{},"查看已安装包：",[99,173594,173596],{"className":24996,"code":173595,"language":24998,"meta":104,"style":104},"pip list\n",[106,173597,173598],{"__ignoreMap":104},[109,173599,173600,173602],{"class":111,"line":112},[109,173601,25005],{"class":211},[109,173603,120130],{"class":278},[19,173605,173606],{},"导出项目依赖：",[99,173608,173609],{"className":24996,"code":147468,"language":24998,"meta":104,"style":104},[106,173610,173611],{"__ignoreMap":104},[109,173612,173613,173615,173617,173619],{"class":111,"line":112},[109,173614,25005],{"class":211},[109,173616,147477],{"class":278},[109,173618,27397],{"class":122},[109,173620,147482],{"class":278},[19,173622,173623],{},"安装项目依赖：",[99,173625,173626],{"className":24996,"code":147488,"language":24998,"meta":104,"style":104},[106,173627,173628],{"__ignoreMap":104},[109,173629,173630,173632,173634,173636],{"class":111,"line":112},[109,173631,25005],{"class":211},[109,173633,25008],{"class":278},[109,173635,120814],{"class":133},[109,173637,147482],{"class":278},[14,173639,173641],{"id":173640},"_916-模块搜索路径","9.16 模块搜索路径",[19,173643,173644,173645,173648],{},"Python 导入模块时会在 ",[106,173646,173647],{},"sys.path"," 中查找。",[99,173650,173652],{"className":31553,"code":173651,"language":31555,"meta":104,"style":104},"import sys\n\nfor path in sys.path:\n    print(path)\n",[106,173653,173654,173660,173664,173676],{"__ignoreMap":104},[109,173655,173656,173658],{"class":111,"line":112},[109,173657,31567],{"class":122},[109,173659,173370],{"class":126},[109,173661,173662],{"class":111,"line":119},[109,173663,158],{"emptyLinePlaceholder":157},[109,173665,173666,173668,173671,173673],{"class":111,"line":140},[109,173667,4372],{"class":122},[109,173669,173670],{"class":126}," path ",[109,173672,27218],{"class":122},[109,173674,173675],{"class":126}," sys.path:\n",[109,173677,173678,173680],{"class":111,"line":154},[109,173679,32474],{"class":133},[109,173681,170404],{"class":126},[19,173683,173684],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173686,158798],{},[99,173688,173691],{"className":173689,"code":173690,"language":6524,"meta":104},[6522],"random.py\njson.py\ntime.py\n",[106,173692,173690],{"__ignoreMap":104},[19,173694,173695],{},"这些文件名可能导致导入异常。",[14,173697,173699],{"id":173698},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173701,173495],{},[99,173703,173706],{"className":173704,"code":173705,"language":6524,"meta":104},[6522],"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",[106,173707,173705],{"__ignoreMap":104},[19,173709,173710,25793],{},[106,173711,173712],{},"utils\u002Ffile_utils.py",[99,173714,173716],{"className":31553,"code":173715,"language":31555,"meta":104,"style":104},"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",[106,173717,173718,173724,173734,173738,173742,173752,173762,173770,173776,173780,173807,173817,173821,173825,173835,173861],{"__ignoreMap":104},[109,173719,173720,173722],{"class":111,"line":112},[109,173721,31567],{"class":122},[109,173723,148266],{"class":126},[109,173725,173726,173728,173730,173732],{"class":111,"line":119},[109,173727,31912],{"class":122},[109,173729,109486],{"class":126},[109,173731,31567],{"class":122},[109,173733,109491],{"class":126},[109,173735,173736],{"class":111,"line":140},[109,173737,158],{"emptyLinePlaceholder":157},[109,173739,173740],{"class":111,"line":154},[109,173741,158],{"emptyLinePlaceholder":157},[109,173743,173744,173746,173749],{"class":111,"line":161},[109,173745,33122],{"class":122},[109,173747,173748],{"class":211}," read_json",[109,173750,173751],{"class":126},"(path):\n",[109,173753,173754,173757,173759],{"class":111,"line":167},[109,173755,173756],{"class":126},"    path ",[109,173758,130],{"class":122},[109,173760,173761],{"class":126}," Path(path)\n",[109,173763,173764,173766,173768],{"class":111,"line":185},[109,173765,4446],{"class":122},[109,173767,40105],{"class":122},[109,173769,170485],{"class":126},[109,173771,173772,173774],{"class":111,"line":201},[109,173773,15925],{"class":122},[109,173775,53013],{"class":126},[109,173777,173778],{"class":111,"line":206},[109,173779,158],{"emptyLinePlaceholder":157},[109,173781,173782,173784,173786,173789,173791,173793,173795,173797,173799,173801,173803,173805],{"class":111,"line":218},[109,173783,35353],{"class":122},[109,173785,147966],{"class":133},[109,173787,173788],{"class":126},"(path, ",[109,173790,147976],{"class":278},[109,173792,13608],{"class":126},[109,173794,147981],{"class":6553},[109,173796,130],{"class":122},[109,173798,147986],{"class":278},[109,173800,14887],{"class":126},[109,173802,32558],{"class":122},[109,173804,149328],{"class":6553},[109,173806,5082],{"class":126},[109,173808,173809,173811,173813,173815],{"class":111,"line":223},[109,173810,15925],{"class":122},[109,173812,149339],{"class":126},[109,173814,46529],{"class":6553},[109,173816,1330],{"class":126},[109,173818,173819],{"class":111,"line":229},[109,173820,158],{"emptyLinePlaceholder":157},[109,173822,173823],{"class":111,"line":244},[109,173824,158],{"emptyLinePlaceholder":157},[109,173826,173827,173829,173832],{"class":111,"line":258},[109,173828,33122],{"class":122},[109,173830,173831],{"class":211}," write_json",[109,173833,173834],{"class":126},"(path, data):\n",[109,173836,173837,173839,173841,173843,173845,173847,173849,173851,173853,173855,173857,173859],{"class":111,"line":263},[109,173838,35353],{"class":122},[109,173840,147966],{"class":133},[109,173842,173788],{"class":126},[109,173844,153151],{"class":278},[109,173846,13608],{"class":126},[109,173848,147981],{"class":6553},[109,173850,130],{"class":122},[109,173852,147986],{"class":278},[109,173854,14887],{"class":126},[109,173856,32558],{"class":122},[109,173858,149328],{"class":6553},[109,173860,5082],{"class":126},[109,173862,173863,173866,173868,173870,173872,173874,173876,173878,173880,173882,173884],{"class":111,"line":269},[109,173864,173865],{"class":126},"        json.dump(data, ",[109,173867,46529],{"class":6553},[109,173869,13608],{"class":126},[109,173871,148312],{"class":6553},[109,173873,130],{"class":122},[109,173875,35162],{"class":133},[109,173877,13608],{"class":126},[109,173879,153187],{"class":6553},[109,173881,130],{"class":122},[109,173883,1618],{"class":133},[109,173885,1330],{"class":126},[19,173887,173888,25793],{},[106,173889,155782],{},[99,173891,173893],{"className":31553,"code":173892,"language":31555,"meta":104,"style":104},"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",[106,173894,173895,173906,173910,173923,173943],{"__ignoreMap":104},[109,173896,173897,173899,173901,173903],{"class":111,"line":112},[109,173898,31912],{"class":122},[109,173900,173516],{"class":126},[109,173902,31567],{"class":122},[109,173904,173905],{"class":126}," read_json, write_json\n",[109,173907,173908],{"class":111,"line":119},[109,173909,158],{"emptyLinePlaceholder":157},[109,173911,173912,173914,173916,173919,173921],{"class":111,"line":140},[109,173913,160891],{"class":126},[109,173915,130],{"class":122},[109,173917,173918],{"class":126}," read_json(",[109,173920,153006],{"class":278},[109,173922,1330],{"class":126},[109,173924,173925,173927,173929,173931,173933,173935,173937,173939,173941],{"class":111,"line":154},[109,173926,171709],{"class":126},[109,173928,63854],{"class":278},[109,173930,52612],{"class":126},[109,173932,151063],{"class":278},[109,173934,13608],{"class":126},[109,173936,152647],{"class":278},[109,173938,52612],{"class":126},[109,173940,2519],{"class":133},[109,173942,166327],{"class":126},[109,173944,173945,173948,173950],{"class":111,"line":161},[109,173946,173947],{"class":126},"write_json(",[109,173949,153006],{"class":278},[109,173951,173952],{"class":126},", students)\n",[14,173954,173956],{"id":173955},"_918-易错点","9.18 易错点",[765,173958,173959,173962,173967,173972,173975,173978],{},[30,173960,173961],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[30,173963,173964,173965,29560],{},"能指定异常类型就不要裸写 ",[106,173966,172069],{},[30,173968,173969,173971],{},[106,173970,172444],{}," 无论是否出错都会执行。",[30,173973,173974],{},"模块文件名不要和标准库重名。",[30,173976,173977],{},"导入自己写的模块时，要注意运行目录。",[30,173979,173980],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173982,173984],{"id":173983},"_919-本章练习","9.19 本章练习",[765,173986,173987,173990,173993,173999,174006],{},[30,173988,173989],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[30,173991,173992],{},"写函数读取文件，如果文件不存在则返回空字符串。",[30,173994,173407,173995,173998],{},[106,173996,173997],{},"math_utils.py","，实现加减乘除函数并导入使用。",[30,174000,174001,174002,174005],{},"创建一个 ",[106,174003,174004],{},"utils"," 包，把 JSON 读写函数放进去。",[30,174007,174008],{},"写一个程序，捕获除零异常和输入格式异常。",[1467,174010,174011],{},"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":104,"searchDepth":119,"depth":119,"links":174013},[174014,174015,174016,174017,174018,174019,174020,174021,174022,174023,174024,174030,174037,174039,174040,174041,174042,174043,174044],{"id":171866,"depth":119,"text":171867},{"id":171994,"depth":119,"text":171995},{"id":172043,"depth":119,"text":172044},{"id":172192,"depth":119,"text":172193},{"id":172364,"depth":119,"text":172365},{"id":172433,"depth":119,"text":172434},{"id":172544,"depth":119,"text":172545},{"id":172670,"depth":119,"text":172671},{"id":172795,"depth":119,"text":172796},{"id":172850,"depth":119,"text":172851},{"id":172949,"depth":119,"text":172950,"children":174025},[174026,174027,174028,174029],{"id":172953,"depth":140,"text":172954},{"id":172987,"depth":140,"text":172988},{"id":173026,"depth":140,"text":173027},{"id":173105,"depth":140,"text":173106},{"id":173128,"depth":119,"text":173129,"children":174031},[174032,174033,174034,174035,174036],{"id":173132,"depth":140,"text":173133},{"id":173215,"depth":140,"text":173216},{"id":173260,"depth":140,"text":173261},{"id":173319,"depth":140,"text":173320},{"id":173357,"depth":140,"text":173358},{"id":173391,"depth":119,"text":174038},"9.13 if name == \"main\"",{"id":173484,"depth":119,"text":173485},{"id":173529,"depth":119,"text":173530},{"id":173640,"depth":119,"text":173641},{"id":173698,"depth":119,"text":173699},{"id":173955,"depth":119,"text":173956},{"id":173983,"depth":119,"text":173984},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171858,"description":24550},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174051,"title":174052,"body":174053,"description":174216,"extension":1476,"meta":174217,"navigation":157,"path":174218,"seo":174219,"stem":174220,"__hash__":174221},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174054,"toc":174211},[174055,174058,174061,174064,174075,174077,174151,174154,174157,174160,174163,174166,174169,174172,174175,174178,174181],[10,174056,174052],{"id":174057},"python教程",[19,174059,174060],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174062,174063],{},"建议学习环境：",[765,174065,174066,174069,174072],{},[30,174067,174068],{},"Python 版本：Python 3.10 及以上。",[30,174070,174071],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[30,174073,174074],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174076,118253],{"id":118253},[765,174078,174079,174085,174091,174097,174103,174109,174115,174121,174127,174133,174139,174145],{},[30,174080,174081],{},[1776,174082,174084],{"href":174083},".\u002Fch1-Python","Python环境与第一个程序",[30,174086,174087],{},[1776,174088,174090],{"href":174089},".\u002Fch2","基础语法、变量与字符串",[30,174092,174093],{},[1776,174094,174096],{"href":174095},".\u002Fch3","判断语句",[30,174098,174099],{},[1776,174100,174102],{"href":174101},".\u002Fch4","循环语句",[30,174104,174105],{},[1776,174106,174108],{"href":174107},".\u002Fch5","函数基础",[30,174110,174111],{},[1776,174112,174114],{"href":174113},".\u002Fch6","数据容器",[30,174116,174117],{},[1776,174118,174120],{"href":174119},".\u002Fch7","函数进阶",[30,174122,174123],{},[1776,174124,174126],{"href":174125},".\u002Fch8","文件操作",[30,174128,174129],{},[1776,174130,174132],{"href":174131},".\u002Fch9","异常、模块与包",[30,174134,174135],{},[1776,174136,174138],{"href":174137},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[30,174140,174141],{},[1776,174142,174144],{"href":174143},".\u002Fch11","面向对象基础",[30,174146,174147],{},[1776,174148,174150],{"href":174149},".\u002Fch12","综合案例与复习路线",[14,174152,174153],{"id":174153},"学习路线",[19,174155,174156],{},"第一阶段：能运行程序。",[19,174158,174159],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174161,174162],{},"第二阶段：能组织数据。",[19,174164,174165],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174167,174168],{},"第三阶段：能封装逻辑。",[19,174170,174171],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174173,174174],{},"第四阶段：能做小项目。",[19,174176,174177],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174179,174180],{"id":174180},"参考资料",[765,174182,174183,174190,174197,174204],{},[30,174184,174185,174186],{},"黑马程序员 Python 入门教程推荐：",[1776,174187,174188],{"href":174188,"rel":174189},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25039],[30,174191,174192,174193],{},"Python 官方中文教程：",[1776,174194,174195],{"href":174195,"rel":174196},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25039],[30,174198,174199,174200],{},"Python 标准库文档：",[1776,174201,174202],{"href":174202,"rel":174203},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25039],[30,174205,174206,174207],{},"pyecharts 文档：",[1776,174208,174209],{"href":174209,"rel":174210},"https:\u002F\u002Fpyecharts.org\u002F",[25039],{"title":104,"searchDepth":119,"depth":119,"links":174212},[174213,174214,174215],{"id":118253,"depth":119,"text":118253},{"id":174153,"depth":119,"text":174153},{"id":174180,"depth":119,"text":174180},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24552},"\u002Fwiki\u002F2024-10-10-python",{"title":174052,"description":174216},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379661]